![嵌入式linux应用开发图书学习手册v_第1页](http://file4.renrendoc.com/view/57b936d6525d37a30c5d4bc70d1c46e9/57b936d6525d37a30c5d4bc70d1c46e91.gif)
![嵌入式linux应用开发图书学习手册v_第2页](http://file4.renrendoc.com/view/57b936d6525d37a30c5d4bc70d1c46e9/57b936d6525d37a30c5d4bc70d1c46e92.gif)
![嵌入式linux应用开发图书学习手册v_第3页](http://file4.renrendoc.com/view/57b936d6525d37a30c5d4bc70d1c46e9/57b936d6525d37a30c5d4bc70d1c46e93.gif)
![嵌入式linux应用开发图书学习手册v_第4页](http://file4.renrendoc.com/view/57b936d6525d37a30c5d4bc70d1c46e9/57b936d6525d37a30c5d4bc70d1c46e94.gif)
![嵌入式linux应用开发图书学习手册v_第5页](http://file4.renrendoc.com/view/57b936d6525d37a30c5d4bc70d1c46e9/57b936d6525d37a30c5d4bc70d1c46e95.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
qwertyuiopasdfghjklzxcvbnmqwertycvbnmqwqwertyuiwertyuioopasdfghiopasdfgqwertyuiopasdfghjklzxcvbnmqwertycvbnmqwqwertyuiwertyuioopasdfghiopasdfgbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuionmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmrtyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfgLinux学习手册u-boot-2012.10、Linux3.6.7、Qtopia4.4.32013-1-29目录纵观本书 11章1.11.2Makefile的基本知识 2Makefile规则 2Makefile变量 ...6变量的 方式 2递归方式扩展的变量 2直接展开式变量 3条件赋值 3变量的替换目录纵观本书 11章1.11.2Makefile的基本知识 2Makefile规则 2Makefile变量 ...6变量的 方式 2递归方式扩展的变量 2直接展开式变量 3条件赋值 3变量的替换 4追加变量值 41.3Makefile函数 .2addprefix 5addsuffix 52章2.1u-boot-2012.10移植之准备工作 6安装交叉编译工具 62.1.1安装步骤 62.22.3Linux操作基本命令 6删除与修改 72.3.1删除与s3c6410无关文件 72.42.53章3.14章4.14.25章5.15.26章6.17章7.18章8.19章9.19.2初步修改文件 8CRT工具 1012硬件初始化 12移植之NandFlash 41NandFlash启动 41u-boot-2012.10移植之网卡驱动 61DM9000网卡驱动移植 61支持TFTP 63移植之USB驱动 64USB驱动 64移植之MMC驱动 70MMC驱动 70移植之添加u-boot命令 72小试u-boot命令 72config 74mkimage 74配置config 7510章10.1LoadAddress和EntryPoint的分析 81210.211章11.112章12.113章13.113.2LoadAddress和EntryPoint的修改 82Linux3.6.7移植之内核分区 88内核分区 88NandFlash10.211章11.112章12.113章13.113.2LoadAddress和EntryPoint的修改 82Linux3.6.7移植之内核分区 88内核分区 88NandFlash驱动 90NandFlash驱动 90Linux3.6.7移植之根文件系统 9898制作根文件系统 makeconfig进行配置 106制作mkyaffs2image工具 109制作根文件系统 11013.314章14.115章15.115.2NFS文件系统挂载 121Hello程序 129131板程序 131Linux中的LED驱动程序 15.2.415.2.515.2.615.2.715.2.815.2.9头文件 133寄存器地址 134open函数 135函数 136write函数 136release函数 137file_operations结构体 138模块的加载和卸载 138测试程序 13915.316章16.116.217章17.117.218章19章19.420章20.1Linux字符驱动之LED(二) 140148DS18B20原理分析 148DS18B20驱动程序 148LinuxADCLinuxADC 159寄存器简介 159驱动ADC程序 160Linux3.6.7驱动之常见问题 168模块证168卸载驱动模块 168段错误 168QT移植之搭建编译环境 172tslib的配置 172编译QT4.4.3 173QT启动错误 175LCD触摸屏移植 177QTCreator 185320.221章21.122章21章21.122章22.122.223章23.123.224章24.124.225章25.126章26.127章27.128章28.129章29.129.230章31章31.132章32.1编译Hello 187HelloWorld程序 189QT移植之信号与槽 194信号与槽机制194信号与槽程序 195QT移植之组件布局 199绝对定位和布局定位 199布局定位实例 199QT移植之窗口 201QMainWindow窗口分布 201QMainWindow窗口程序 201移植之QMessageBox 215QMessageBox简介 215QT移植之Q*Dialog 217常用框 217QT移植之为QT4.4.3添加应用程序 219添加应用程序 219植之LED应用程序 222LED应用程序设计 222QT移植之ADC应用程序 225ADC驱动程序 225ADC应用程序设计 228安装QWT 231Qwt的安装 231QWT的应用 233QT移植之DS18B20应用程序 241Qt界面应用程序 241GPRS模块 247常见函数 2474、淡泊明志、宁静致远:jxlgzzq@163.com纵观书书本书1章为Makefile基础知识;291419328章为u-boot-2012.10移植;13章为Linux3.6.7移植;、淡泊明志、宁静致远:jxlgzzq@163.com纵观书书本书1章为Makefile基础知识;291419328章为u-boot-2012.10移植;13章为Linux3.6.7移植;18章为Linux驱动;31章为Qt移植及Qt应用界面设计;(待更新)为模块驱动。匆年华,转眼间大学四年就过去了。都说岁月如梭光阴似箭从一个襁褓孩提而今变成一个要承担起 成家立业的责任。唯有骄傲的是现在还年轻,只有21周岁,距离而立之年还有9年光阴。供一条可以快速入门的途径罢了,我也希望绵薄之力有这个作用。感谢亚泰光电的时间供给,感谢各位网友的建议,感的悉心照顾。(由于网友迫切需要资料,先将未完成的书稿公布,真切希望网友找。未完待续……)宁静致远工作室2013129日1、淡泊明志、宁静致远:jxlgzzq@163.com1章Makefile的基识本知识在移植ubootuboot中用到的Makefile刀不误砍柴工”嘛。有 1.1Makefile规则一个语句由目标、依赖条件、指令组成。如程序1.1所示。程序11Makefile基本组成amsununconfig:先决条件;-$(obj)board/samsung/smdk6400:命令。这里特别注意,“、淡泊明志、宁静致远:jxlgzzq@163.com1章Makefile的基识本知识在移植ubootuboot中用到的Makefile刀不误砍柴工”嘛。有 1.1Makefile规则一个语句由目标、依赖条件、指令组成。如程序1.1所示。程序11Makefile基本组成amsununconfig:先决条件;-$(obj)board/samsung/smdk6400:命令。这里特别注意,“@”前面是Tab键,并且必须是Tab键,而不能是空格。目标和先决条件是依赖,目标是依赖于先决条件生成的。1.2Makefile变量1.2.1变量的方式“$(VARIABLE_NAME)”或者“${VARIABLE_NAME来变量的1.2所示。程序1.2变量的BUILD“BUILD_DIR”变量值不为目录。详细请参考《GNUmake》。1.2.2递归方式扩展的变量“递归展开”式变量。其优点是:这种类型变量在续部分定义,或者是通过make,可以其它的之前没有定义的变量(可能在后令行选项传递的变量)。如程序1.3所示。程序1.3递归方式扩展的变量2stu=dleinlteiCL=SSstu(dtenat)her)tea=cyhaenrgobj :$(OBJTREE)/OBJT:$(i(fBUILD_DIR),$(expBoUrItLD_DIR=/tmp/buildnnffiigg@mk-$i(robj)(ionbcjlubdoeard/s、淡泊明志、宁静致远:jxlgzzq@163.com按照递归扩展的变量规则,输出是:lilei yang。也就是说虽然teacher是在CLASS语句之后,但是还是会被替换掉。其缺点是:1.make陷入到无限的变量展开过程中,最终使make执行失败。如程序1.4所示。程序 1.4递归扩展的变量陷入循环这样的话会使得Makefile出错,因为都最终了。2.第二个缺点:这种风格的变量定义中如果使用了函数,那么包含在变量值中的函数总会在变量被的地方执行(变量被展开时)。1.2.3直接展开式变量”变量的问题和不方便。GNUmake、淡泊明志、宁静致远:jxlgzzq@163.com按照递归扩展的变量规则,输出是:lilei yang。也就是说虽然teacher是在CLASS语句之后,但是还是会被替换掉。其缺点是:1.make陷入到无限的变量展开过程中,最终使make执行失败。如程序1.4所示。程序 1.4递归扩展的变量陷入循环这样的话会使得Makefile出错,因为都最终了。2.第二个缺点:这种风格的变量定义中如果使用了函数,那么包含在变量值中的函数总会在变量被的地方执行(变量被展开时)。1.2.3直接展开式变量”变量的问题和不方便。GNUmake支持另外一种风格的变“:=”定义。在使用“:=”定义变量时,变量值中对其他量或者函数的在定义变量时被展开(对变量进行替换)。如程序1.5所示。程序 1.5直接展开式变量这里的输出是:teacher。此风格变量在就完成了对所量的。1.2.4条件赋值只有此变量在之前没有赋值的情况下才会对这个变量进行赋值。如程序 1.6所示。程序1.6条件赋值由于X在之前被赋值了,所以这里的输出是。3X:studentX?teacherall:@e$ho)X:studentY:$(X)X:teacherall:@e$ho()Y)x=$(y)y=$(z)z=$(x)a:l@e$hoLASS)、淡泊明志、宁静致远:jxlgzzq@163.com1.2.5变量的替换(字符串$(R:=(或者${R:=R”中所有“A”字符结尾的字为“B”结尾的字。、淡泊明志、宁静致远:jxlgzzq@163.com1.2.5变量的替换(字符串$(R:=(或者${R:=R”中所有“A”字符结尾的字为“B”结尾的字。“结尾”的含义是空格之前(变量值多个字之间使用空格)。而对于变量其它部分的“A”字符不进行替换。如程序1.7所示。程序1.7变量的替换这里特别注意的是$(Xo=.c)的“=”两边不能有空格。这里的输出是:fun.omain.o fun.cmain.c1.2.6追加变量值们可以在追加操作。如程序 1.8所示。程序1.8追加变量值fun.omain.osub.o.“+=”会自动变成“=”,此变量就被定义为一个递归展开式的变量如果之前 格。2.直接展开式变量的追加过程:变量使用“:=”定义,之后“+=”操作将会首先替换展开程如下所示。的变量风等效于:.“=”定义,之后“+=”操作时不对之前此变量值中的任何“=”给此变量重新赋值。variabllee 4varivaleevari$(leriable)varivaleevarimoleX=fumain.oX+sub.oall:@e$ho)X:fum.on.oY:$(Xo:=.c)all:@e$ho()Y)、淡泊明志、宁静致远:jxlgzzq@163.comvari、淡泊明志、宁静致远:jxlgzzq@163.comvarimole 等效于:1.3Makefile函数1.3.1addprefix$(addprefixPREFIX,NAMES…)。中的每一个文件名添加前缀“PREFIX”。参数“NAMES…”是空格分割的文件名序列,将“SUFFIX”添加到此序列的每一个文件名之前。“PREFIX”的文件名序列。$(adsrrbfioo 返回值为“src/foosrc/bar”。OBJS:=$(addprefix$(obj),$(OBJS))成之后即为“$(obj$(CPUDIR)/start.o”。1.3.2addsuffix$(addprefixSUFFIX,NAMES…)函数名称:加后缀函数—addsuffix。中的每一个文件名添加后缀“SUFFIX”。参数“NAMES…”为空格分割的文件名序列,将“SUFFIX”追加到此序列的每一个文件名的末尾。“SUFFIX”的文件名序列。$(ad.cbfar)x 返回值为:fob.c.c 5te=mvpaluevariabtmrp)、淡泊明志、宁静致远:jxlgzzq@163.com2章u-boot-2012.10移植之之准备工作2.1安装交叉编译工具版本:arm-linux-gcc4.4.1环境:ubuntu10.04.4(迄今为止,个人认为最为和健全的版本)2.1.1安装步骤1.、淡泊明志、宁静致远:jxlgzzq@163.com2章u-boot-2012.10移植之之准备工作2.1安装交叉编译工具版本:arm-linux-gcc4.4.1环境:ubuntu10.04.4(迄今为止,个人认为最为和健全的版本)2.1.1安装步骤arm文件夹里面。然后解压缩,命令根据压缩包的不同而不同。vimetc/profile。PATH=$PATH:/usr/local/arm/4.4.1/bin。执行命令:sourceetc/profile。检测安装是否 :arm-linux-gcc-v;如果 4.4.1SourceryGLite2009q3-67)。.2.2Linux操作基本命令1.建立目录当我们工作的需要,建立一个目录的时候,我们可以使用“mkdir”命令来建立一个目录,mkdirmyfile。2.删除目录“rmdir”rmdirmyfile。3.文件并且重命名将s3c6400.h一份并且重命名为s3c6410.h,如:cps3c6400.hs3c6410.h。4. 解压、打包、压缩.tar解包:tarxvfFileName.tar打包:tarcvfFileName.tarDirName(注:tar是打包,不是压缩!).gzFileName.gz2:gzip-dFileName.gz压缩:gzipFileName.tar.gz和.tgz解压:tarzxvfFileName.tar.gz压缩:tarzcvfFileName.tar.gzDirName6、淡泊明志、宁静致远:jxlgzzq@163.com.bz2-dFileName.bz2、淡泊明志、宁静致远:jxlgzzq@163.com.bz2-dFileName.bz2FileName.bz2bzip2-zFileName.tar.bz2FileName.tar.bz2压缩:tarjcvfFileName.tar.bz2DirName.bz1:bzip2-dFileName.bzFileName.bz压缩:未知.tar.bztarjxvfFileName.tar.bz压缩:未知.Z解压:uncompressFileName.Z压缩:compressFileName.tar.Z解压:tarZxvfFileName.tar.Z压缩:tarZcvfFileName.tar.ZDirName.zipDirName2.3删除与修改移植平台:s3c64102.3.1s3c6410无关文件安装tree,命令:sudoapt-getinstalltree。完成之后使用tree–L1查看第一级目录下有什么,初步观察下u-boot2.1所示。7、淡泊明志、宁静致远:jxlgzzq@163.com21uboot框架.5.6.进入\arch,对于文件夹,除了、淡泊明志、宁静致远:jxlgzzq@163.com21uboot框架.5.6.进入\arch,对于文件夹,除了arm之外,全部删除。进入\arch\arm\cpu,保留arm1176和u-boot.lds,其余文件夹可删除。进入\arch\arm\crm11763个,保留s3c64XX2个。进入\arch\arm\include\asm,仅对arch-*arch-s3c64XX之外全部删除。进入\board,除\samsung以外的文件夹全部删除。进入\board\samsung,smdk*中,除了smdk6400,其余文件夹可删除。繁杂。2.4初步修改文件本次初步操作是64006410。1.下面。将smdk6410smdk6400.csmdk6410.c,smdk6400_nand_spl.c文件修改成smdk6410_nand_spl.c。将smdk6410Makefile中的:COBJS-ysmdk6400.oCOBJS-y:=smdk6410.o。smdk6410smdk6400下的所有文件拷贝到smdk6410下面。将smdk6410下的Makefile中的:COBJS nand_boot.onand_ecc.os3c64xx.osmdk6400_nand_spl.onand_base.o修改为COBJS nand_boot.onand_ecc.os3c64xx.osmdk6410_nand_spl.onand_base.o;@ln-s$(TOPDIR)/board/samsung/smdk6400/lowlevel_init.S$@修改成@ln-s$(TOPDIR)/board/samsung/smdk6410/lowlevel_init.S$@;2.8、淡泊明志、宁静致远:jxlgzzq@163.com$(obj)smdk6400_nand_spl.c:修改成$(obj)smdk6410_nand_spl.c:;-$@修改成@ln-s$(TOPDIR)/board/samsung/smdk6410/smdk6410_nand_spl.c$@。smdk6400.hsmdk6410.h。将CONFIG_S3C6400修改为CONFIG_S3C6410CONFIG_SMDK6400修改为CONFIG_SMDK6410。在\arch\arm\include\asm\arch-s3c64xx下,将s3c6400.h拷贝一份重命名为s3c6410.h。打开s3c6410.h,将、淡泊明志、宁静致远:jxlgzzq@163.com$(obj)smdk6400_nand_spl.c:修改成$(obj)smdk6410_nand_spl.c:;-$@修改成@ln-s$(TOPDIR)/board/samsung/smdk6410/smdk6410_nand_spl.c$@。smdk6400.hsmdk6410.h。将CONFIG_S3C6400修改为CONFIG_S3C6410CONFIG_SMDK6400修改为CONFIG_SMDK6410。在\arch\arm\include\asm\arch-s3c64xx下,将s3c6400.h拷贝一份重命名为s3c6410.h。打开s3c6410.h,将#ifndefS3C6400_H和#defineS3C6400_H修改成#ifndefS3C6410_H和#defineS3C6410_H,其余稍后修改。3.4.5.进入\arch\arm\crm1176\s3c64xx,打开Makefile,将CONFIG_S3C6400修改成CONFIG_S3C6410。进入\board\samsung\smdk6410,打开smdk6410.c和lowlevel_init.s;6.进入\arch\arm\crm1176\s3c64xx,打开cpu_init.s、reset.s、speed.c和timer.c;进入\drivers\serial,打开s3c64xx.c;s3c64xx-hcd;将上面文件中的#includeasm/arch/s3c6410.h>修改成#includeasm/arch/s3c6410.h>。修改最顶层的MakefileCROSS_COMPILE修改成CROSS_COMPILE=/usr/local/arm/4.4.1/bin/arm-linux-;在arm1176部分,作如下修改。7.gsamsoardcOlOuTd"OlnTuBd_ecosmdksmdkg4xxdOlTue此时makesmdk6410_configmake,如果上面操作没有错误的话,应该是编译成功,但是此时还是基于s3c6400,只是披着s3c6410皮的s3c6400罢了。至此为止,u-boot:u-boot-2012.10.19smdk641\_noUSB_confismdk6:un_onniig@m-p(ob$(obj)board/@m-p(obj)nand_spl/b@echoefNineG>$N(AoNbDj_)Ui_nB@echoNFI=y_"N>A(NoDb_jU)_iBnOc@[fz$(fsmdk6410];oU\ec"hRoA=0_xT5E7>e>00000"$(obj)board/samsung/else \ec"hRoA=0_xTcE7>e>00000"$(obj)board/samsung/fi@$(MKCONFIsm1dk6ms3cn6@echoNFI=y_"N>A(NoDb_jU)_iBnOc、淡泊明志、宁静致远:jxlgzzq@163.coms3c6400的原版,到时候全部修改完成就是披着s3c6400皮的s3c6410了!这样本章节你只需修改一个地方:在最顶层的Makefile中,添加编译工具:将CROSS_COMPILECROSS_COMPILE=/usr/local/arm/4.4.1/bin/arm-linux-。经过本章节的操作,进行编译。2.2、淡泊明志、宁静致远:jxlgzzq@163.coms3c6400的原版,到时候全部修改完成就是披着s3c6400皮的s3c6410了!这样本章节你只需修改一个地方:在最顶层的Makefile中,添加编译工具:将CROSS_COMPILECROSS_COMPILE=/usr/local/arm/4.4.1/bin/arm-linux-。经过本章节的操作,进行编译。2.2所示。2.2编译结果2.5CRT工具SecureCRT_CN工具是一个很方便查看的窗口,即可连通ubuntu、即可作为OK6410串口输出查看窗口,还可以很方便的传输文件。开启ubuntu上的ssh功能,先安装,安装后就自动开启了。接着安装CRT工具,安装好之后便可使用。配置终端类型,显示颜色Options->SessionOptions->EmulationTerminalxtermANSIColor1)复选框。2)配置字体,编码方式Options(会话选项)Terminal(终端)->Appearance(显示),将Charater(字符)选择成UTF-8就支持中文了。10sudpot-geaellssh-servemaskmedk6410_config......maaklel、淡泊明志、宁静致远:jxlgzzq@163.com3)vim中颜色显示效果在打开的终端中,编辑、淡泊明志、宁静致远:jxlgzzq@163.com3)vim中颜色显示效果在打开的终端中,编辑/etc/profile在文末添加如下内容:exTE=xterm-color 添加完毕后执行如下内容,使之生效:so/etc/profile 11、淡泊明志、宁静致远:jxlgzzq@163.com第3章u-boot-2012.10移植之start 之版本不断更新,但是根基是万不能变,所以u-bootstart.s中开始执行。打开最顶层的Makefile,最先构建的也是start.o,如下所示。21O6B、淡泊明志、宁静致远:jxlgzzq@163.com第3章u-boot-2012.10移植之start 之版本不断更新,但是根基是万不能变,所以u-bootstart.s中开始执行。打开最顶层的Makefile,最先构建的也是start.o,如下所示。21O6BJ$S(CPUDIR)/start.o 3.1硬件初始化在start.s中第一行代码,一上电,系统复位。.globl 如果一个符号没有用.globl,就表示这个符号被链接器用到。4种:1)2)3)4)BBL跳转指令带返回的跳转指令带状态切换的跳转指令带返回和状态切换的跳转指令_stbarrets:et 而这句跳转时,PC寄存器的值将回到reset,这是s3c6410一上电做的第一件事情。如下所示。1.将cpu的工作模式设置为管理模式7种运行模式,分别为:用户模式(usr):ARM处理器正常的程序执行状态。(fiq):用于高速数据传输或通道处理。外部中断模式(irq):用于通用的中断处理。(svc):操作系统使用的保护模式。数据 保护。及(sys):运行具有的操作系统任务。12reset:/**sthcetSVmo2e*/mrs0c,psrbirc0r,0#,0x3forr0r,0#,0xd3mcprr,.gl_osbtlart_stbarrets:et、淡泊明志、宁静致远:jxlgzzq@163.com(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的。接着进入cpu_init_crit,即cpu初始化阶段。2.初始化CACHE3.初始化MMU))4.初始化外设,指明外设的基地址MAPB_ASSIEZ接下来是执行带返回跳转指令:bllowlevel_init、淡泊明志、宁静致远:jxlgzzq@163.com(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的。接着进入cpu_init_crit,即cpu初始化阶段。2.初始化CACHE3.初始化MMU))4.初始化外设,指明外设的基地址MAPB_ASSIEZ接下来是执行带返回跳转指令:bllowlevel_init,进入lowlevel_init(位于board\samsung\smdk6410\lowlevel_init.s)。5.LED初始化原始是与s3c6400配置,如下所示。13lr=ELFIN_GPIO_BASElr=0x55540000sr[r#0G,PNCON_OFFSET]lr=0x55555555sr[r#0G,PNPUD_OFFSET]lr=0xf000sr[r#0G,PNDAT_OFFSET]#iCONFIG_PERIPORT_RE/*eprosretuplr=CONFIG_PERIPORT_orr#CONFIG_PERIPORTmp15,0,r0,c15,c2,4#endifmp105,,cc0,brr#0x0@clea1s0--V-Sbrr#0x0@clea7,s(7B---Morr#0x0@sb2t0Al2ignorr#0x0@sb112000Cachemr#0mp105,,cc0/*lushv4hemp105,,cc0/*lush/、淡泊明志、宁静致远:jxlgzzq@163.com这里应该改成与s3c6410OK6410,所以由OK64103.1所示。3、淡泊明志、宁静致远:jxlgzzq@163.com这里应该改成与s3c6410OK6410,所以由OK64103.1所示。31LED原理图根据s3c6410M寄存器章节可以对程序作出如下修改。根据需要,LED测试自行修改:6.关闭看门狗14lr=0x7e00000004000orr#0x4000mr#0/*te*s/tlr=ELFIN_GPIO_BASElr=0x000sr[r#0G,PMDAT_OFFSET]/*onn#l8y/lr=ELFIN_GPIO_BASElr=0x00111111sr[r#0G,PMCON_OFFSET]lr=0x00000555sr[r#0G,PMPUD_OFFSET]/*ofEaDpsowerlr=0x000fsr[r#0G,PMDAT_OFFSET]、淡泊明志、宁静致远:jxlgzzq@163.com7.关闭中断DDDDRRblsystem_clock_init,跳转到系统时钟初始化。8.系统时钟初始化程序较长,不加以罗列。系统时钟初始化起始于:0_BA其中将修改成:我们看到15#if、淡泊明志、宁静致远:jxlgzzq@163.com7.关闭中断DDDDRRblsystem_clock_init,跳转到系统时钟初始化。8.系统时钟初始化程序较长,不加以罗列。系统时钟初始化起始于:0_BA其中将修改成:我们看到15#ifCnOdNeFIG_S3C64lr[r#0O,THERS_OFFSET]ldrr1=,0x80200203/*OoUfTPiLsL6MHzlr=0x200203system_clock_init:lr=ELFIN_CLOCK*POWE/*xtertnalnculeagrlr=(ELFIN_GPIO_BASElr[r0]sr[r0]lr=ELFIN_VIC0_BASE_lr=ELFIN_VIC1_BASE_/*isaaibnlte(VIVIC1)mr#0x0sr[r#0o,INTMSK]sr[r#1o,INTMSK]/*ainteas*/ptsmr#0x0sr[r#0o,INTMOD]sr[r#1o,INTMOD]/*enIdnitnCglrartmr#0x0sr[r#0o,VECTADDR]sr[r#1o,VECTADDR]sr[r0]、淡泊明志、宁静致远:jxlgzzq@163.com由于这里还是S3C6410CONFIG_S3C6400的宏中)。在此就先分析一下smdk6410.h这个文件。0Xl0d0y将s3c6400s3c6410相关:XlydASE这里SDRAM的基地址是:、淡泊明志、宁静致远:jxlgzzq@163.com由于这里还是S3C6410CONFIG_S3C6400的宏中)。在此就先分析一下smdk6410.h这个文件。0Xl0d0y将s3c6400s3c6410相关:XlydASE这里SDRAM的基地址是:0x500000000。这个无需修改。这个是s3c6400s3c6410,否则在启动内核的时候会出问题。修改成:为了在u-boot10s。修改成:/*on*d/t #deCfOiNnFeIG_1S0Y0S0_HZ 这个时间是在PCLK50MHz,故应该修改为:#deCfOiNnFeIG_1S5Y6S2_5H0Z0 16#deCfOiNnFeIG_"SzYzS>>_>P4R1O0MPT/*on*d/t #deCfOiNnFeIG_"SSYMS#"KP6R4O0M0PT#deCfOiNnFeIG1_0BOOTDELAY#deCfOiNnFeIG_MACH_TYPE/**Architectutrypnee*/#deCfOiNnFeIG_1M2A7C0H_TYPE#deCfOiNnFeIG_0SxY5S0_0S0D0R0A0M0_B#deCfOiNnFeIG1_/S*3nS64SS3CN6G4*/#deCfOiNnFeIG1_/S*3nS64SS3XCN6G4mXi/#deCfOiNnFeIG1_/S*MnSK6SSM0K64r#deCfOiNnFeIG1_/S*3nS64SS30CN6G4*0/#deCfOiNnFeIG1_/S*3nS64SS3XCN6G4mXi/#deCfOiNnFeIG1_/S*MnSK6SSM0DK64rbrr#0xC0orr#0x40sr[r#0O,THERS_OFFSET]、淡泊明志、宁静致远:jxlgzzq@163.comKSD/RAM因为s3c6410256MBSDRAM,故应该修改成:KSD/RAM堆栈的大小要修改为:G修改成:Gc00000修改为:#\deCfOiNnFeIG"_nB50D00;""bx5001800、淡泊明志、宁静致远:jxlgzzq@163.comKSD/RAM因为s3c6410256MBSDRAM,故应该修改成:KSD/RAM堆栈的大小要修改为:G修改成:Gc00000修改为:#\deCfOiNnFeIG"_nB50D00;""bx50018000"#deCfOiNnFeIG_0ExN0V0_4O0F0F0S0ET 修改为:#deCfOiNnFeIG_0E000000FFSET BOOTBOOT修改成:BOOT17/*ftoU-image#deCfOiNnFeIG_SY(SN0A2N4D)_U_/*ftoU-image#deCfOiNnFeIG_SYS*1024)_U_/*iozfeU-im*/e#deCfOiNnFeIG_SYS*NA2N4D)_U_#deCONnFIG_B\"b0x50018000"#deCfOiNnFeIG_"_4STRIN#deCfOiNnFeIG_"NDTK_6S4T0R0I"N/*otofenviSreo*n/moernt#deCfOiNnFeIG_0SIZE/*otofenviSreo*n/moernt#deCfOiNnFeIG_0ExN4V0_0S0IZE#deCfOiNnFeIG_1NR_DRAM_BAN/*DR#1k/#dePfHiYnSe_SCDORNAFMI_G1_SYS_S#dePfHiYnSe_S010AM_1_SnIaZnE*#deCfOiNnFeIG_1NR_DRAM_BAN/*DR#1k/#dePfHiYnSe_SCDORNAFMI_G1_SYS_S#dePfHiYnSe_S0DxR0A8M/_*1_S0I0ZnE*、淡泊明志、宁静致远:jxlgzzq@163.comBOOTGE_SOCK_GE_C根据K9F2G08U0A手册,修改成:GE_SOCK_GE_C回到lowlevel_init.s中,C6400r修改成:C6410r18#e、淡泊明志、宁静致远:jxlgzzq@163.comBOOTGE_SOCK_GE_C根据K9F2G08U0A手册,修改成:GE_SOCK_GE_C回到lowlevel_init.s中,C6400r修改成:C6410r18#e!ldieffined(CONFIG_S3/*cctrding8um_0Sx32lr[r#0O,THERS_OFFSET]#e!ldieffined(CONFIG_S3/*cctrding8um_0Sx32lr[r#0O,THERS_OFFSET]brr#0x20sr[r#0O,THERS_OFFSET]#ifCnOdNeFIG_S3C64lr[r#0O,THERS_OFFSET]brr#0xC0orr#0x40sr[r#0O,THERS_OFFSET]wait_for_async:lr[r#0O,THERS_OFFSET]arr#0xf00cr#0x0bwait_for_async#endif/*AcNhpiasgiez*e/#deCfOiNnFeIG_SY(S2_024)8ND_PA/*AcNhbiloc*e/#deCfOiNnFeIG_SY(S1**AND_BL/*AcNhpiapgelocknt#deCfOiNnFeIG_SY(SN)AND_PA/*AcNhpiasgiez*e/#deCfOiNnFeIG_SY2S0_4N8AND_PA/*AcNhbiloc*e/#deCfOiNnFeIG_SY(S1*NA2N4D)_BL/*AcNhpiapgelocknt#deCfOiNnFeIG_SY6S4_NAND_PA/*iozfeU-im*/e#deCfOiNnFeIG_SY(S4*NA2N4D)_U_、淡泊明志、宁静致远:jxlgzzq@163.com系统初始化结束之后,执行即是回到系统初始化执行的地方。即为:进入UATR初始化。9.UART初始化接着回到当初跳转的地方,即是:进入Nand初始化。10.Nand初始化回到跳转之处,即为:19/、淡泊明志、宁静致远:jxlgzzq@163.com系统初始化结束之后,执行即是回到系统初始化执行的地方。即为:进入UATR初始化。9.UART初始化接着回到当初跳转的地方,即是:进入Nand初始化。10.Nand初始化回到跳转之处,即为:19/*esubadd0rxe7m*s/0f120nand_asm_init:lr=ELFIN_NAND_BASElr[r#0N,FCONF_OFFSET]orr#0x70orr#0x7700sr[r#0N,FCONF_OFFSET]lr[r#0N,FCONT_OFFSET]orr#0x07sr[r#0N,FCONT_OFFSET]mplr#iCONFIG_BOOT_NAND/*iinfitA*N/Dbland_asm_init#endifuart_asm_init:/*GPtIoOnUA*R/Tlr=ELFIN_GPIO_BASElr=0x220022sr[r#0G,PACON_OFFSET]mplr#ifCnOdNeFfIG_NAND_SPL/*UA*R/Tblart_asm_init#endifmplrbrr#0x20sr[r#0O,THERS_OFFSET]、淡泊明志、宁静致远:jxlgzzq@163.comGCFG_进入内存管理初始化。11.内存管理初始化这里跳入到arch/arm/c自行查看。rm1176/s3c64xx/mem_ctrl_asm_init.s中。代码较长,请读者完成内存管理之后,程序将跳回start.s执行。12.MMU表00修改成:、淡泊明志、宁静致远:jxlgzzq@163.comGCFG_进入内存管理初始化。11.内存管理初始化这里跳入到arch/arm/c自行查看。rm1176/s3c64xx/mem_ctrl_asm_init.s中。代码较长,请读者完成内存管理之后,程序将跳回start.s执行。12.MMU表00修改成:0回到start之后,设置堆栈指针nit_20/*stackpointebolard_i/*28SDRAM0->x5*/0000.s_e_tb0axs5e0,0.r0x0C00FL_SE__b3a,,,,NTRY.s_e_tb_a_s,se.endr/*cisallo/wed..rept00D000.w0oxr0d0000000.endr/*28SDRAM0->x5*/000.s_e_tb0axs5e0,0.r8x0C00FL_SE__b3a,,,,NTRY.s_e_tb_a_s,se.endr/*cisallo/wed..rept00c080.w0oxr0d0000000.endrr=ELFIN_MEM_SYS_CF/*m0=NFnXm,0=NFn*/r#S3C64XX_MEM_SYS_sr[r0]bmem_ctrl_asm_init、淡泊明志、宁静致远:jxlgzzq@163.com_SP_ance进入uboot在SDRAM的内存空间配置(arch/arm/lib的board.c中)。SDRAM的内存空间配置board_init_f(ulongbootflag)。我们先看下面这段代码。;IrT、淡泊明志、宁静致远:jxlgzzq@163.com_SP_ance进入uboot在SDRAM的内存空间配置(arch/arm/lib的board.c中)。SDRAM的内存空间配置board_init_f(ulongbootflag)。我们先看下面这段代码。;IrT_S;sTtarEE);/es(fs"dg>ftgd_t是一个结构体类型,其定义在arch/arm/include/asm目录下的global_data.h文件中。如下所示。td()_BUFlxecetn/mdrt?nt21typstgucb{al_databd_t*bd;unsliofnlegs;unsliobnaedrate;unsliohnaee/*onswca*n/ie#iCONFIG_PRE_CONSOLEunsliopnreco/_bufb_uidxd;e#endifunslioenne/*ddorf;nsvsisrtonmunslioenne_/*liodf;nsvuivrao*nunsliofnbe/*saed;doframe/e/*oiisritanblelarceagistgd(gd_(tCONFIG&SYS_IN/*ompitlierinefG=*/memset((vzoeiodf(gd_t))gd->=m_obns_sl_eennd_ofs;#iCONFIG_OF_EMBED/*atoitnotFr/gd->f_dbti_nbalroyb_dt_dtb_#edleiffCiOnNeFdIG_OF_SEPARA/*istofmagegd->f(dvoid__TEXT_BAS#endif/*llearlyitroovnerratdd*rgd->f(dvoidetenv_ulon(uintptr_t)gd-call_board_init_f:ls=(CONFIG_SYS_INITbss#7*-alifAconmtp*l/ilr0,=0x00000000bboard_init_f、淡泊明志、宁静致远:jxlgzzq@163.com;z;nit;/ormalue/r_staSC_AICC、淡泊明志、宁静致远:jxlgzzq@163.com;z;nit;/ormalue/r_staSC_AICCH/e/c.22#iCONFIG_FSL_ESDHCunsliosndec_clk;#endif#iCONFIG_AT91FAMILY/*stdaata"ytclo*c/k.cunsliocnpe_clk_rate_hzunsliomnaen_clk_rate_hunsliomnce_rate_hz;unsliopnlea_rate_hz;unsliopnleb_rate_hz;unslioante1_pllb_usb_i#endif#iCONFIG_ARM/*stdaata"yoosftimonplca*unsliotnieer_rate_hz;unsliotnbe;unsliotnbe;unsliolnogngmer_reset_vunsliolnaetinc;#endif#iCONFIG_IXP425unsliotnieestamp;#endifunsliorneeo/*ddrorfe-in*phys_ram_siz*e/;unsliomnoe/*enl*t/orunslioinre_/*stac*n/terunsliosntert/addr_sp*/unsliorneeoc_off;#!(defined(CONFIG_SYdefined(CONFIG_SYS_Dunsliotnle_addr;#endifcons*fdt/*detreeifLo*nvoi**j/*utmablechaenv_/*ffgetenv()、淡泊明志、宁静致远:jxlgzzq@163.com)IG_Ltieset;e_df我们可以看到gd_t、淡泊明志、宁静致远:jxlgzzq@163.com)IG_Ltieset;e_df我们可以看到gd_t结构体中定义了很多变量。而这些变量恰恰是u-boot中重要的全局变量。gd(gd_(tCONFIG&SYS_INITgd是一个结构体指针,指向(gd_t*)CONFIG_SYS_INIT_SP_ADDR)&~0x07)。memset((vzoeiodf(gd_t));这条程序是将gd这个结构体中所有变量都清零了。gd->=m_obns_sl_eennd_ofs; 而_bss_end_ofs是这样定义的:_SPerrerttt在start.s中有这么一段代码:接着看board_init_f这个函数,_tp_tfrn)首先init_fnc_ptr定义为:init*_*finnci_tt_fnc_ptr; 而init_sequence定义为:23f(ini=i_nfintc__spetqrute_nfcnec;{if(*init_)fnc_ptr)(ha(n)g;}}.g_bss_start_ofs_bss_start_ofs:.ws-t.g_bss_end_ofs_bss_end_ofs:.ws-_.g_end_ofs_end_ofs:.wo-dstartexulongs_/*startassiv/exulongs_/*ereflatsiveexulongd/*ofmageatsiv/#defined||efined(CONFunsliopnoet_/l*oegP_OaScTr*/iunsliopnoet/*ucocfOS*;/tunsliopnoet_i/*henf_sttiamr#endif}gd_t;、淡泊明志、宁静致远:jxlgzzq@163.comtD_EALK_IsonsLAY_LAY__FII2G、淡泊明志、宁静致远:jxlgzzq@163.comtD_EALK_IsonsLAY_LAY__FII2GC_这个数组中存放的是指针,而数组中存放的是各个函数的函数指针,通过调用函数指针来调用函数。这些函数是进行一些初始化的作用,在此不细究。24typie(dienfit_fnc_t)ini*init=sequence[]arch_c/*_ice,psedup#idfef
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030全球铝合金坯料行业调研及趋势分析报告
- 光伏玻璃行业市场发展现状及趋势与投资分析研究报告
- 汽车装潢品行业行业发展趋势及投资战略研究分析报告
- 中国益生菌行业市场发展现状及前景趋势与投资分析研究报告(2024-2030版)
- 德国坦克声卡行业行业发展趋势及投资战略研究分析报告
- 2025年可压缩糖项目投资可行性研究分析报告
- 高助精粉行业市场发展及发展趋势与投资战略研究报告
- 2025年度工矿产品购销合同工业互联网应用合同
- 2025年度钢结构工程预决算审核合同
- 2025年度航空货运代理服务合同标准范本
- 2025年度高端商务车辆聘用司机劳动合同模板(专业版)4篇
- GB/T 45107-2024表土剥离及其再利用技术要求
- 2025长江航道工程局招聘101人历年高频重点提升(共500题)附带答案详解
- 2025年黑龙江哈尔滨市面向社会招聘社区工作者1598人历年高频重点提升(共500题)附带答案详解
- 执行总经理岗位职责
- 《妊娠期恶心呕吐及妊娠剧吐管理指南(2024年)》解读
- 《黑神话:悟空》跨文化传播策略与路径研究
- 《古希腊文明》课件
- 居家养老上门服务投标文件
- 长沙市公安局交通警察支队招聘普通雇员笔试真题2023
- 2025年高考语文作文满分范文6篇
评论
0/150
提交评论