Linux-arm底层启动流程简介.docx_第1页
Linux-arm底层启动流程简介.docx_第2页
Linux-arm底层启动流程简介.docx_第3页
Linux-arm底层启动流程简介.docx_第4页
Linux-arm底层启动流程简介.docx_第5页
免费预览已结束,剩余5页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux开发驱动底层环境启动流程Uboot编译:rm -rf 删除命令 tar xjf 解压uboot文件patch -p1 ./u-boot-1.1.6.jz2440.patch打补丁 -p1 指示忽略第一个斜杠前因为已经在当前目录。打好补丁之后配置文件make 100ask24x0_config之后make配置文件是厂家提供好的。Make后生成bin文件,在Windows下进入oflash目录烧写这个文件。选择Open jtag S2C2440 nand flash 0块0 2 0 0 0这几个数字烧写之后进入启动界面之后uboot命令 按help查看支持哪些命令。?Md 查看 md命令Print 命令查看环境变量设置环境变量 set xxxx xx savereset重启Uboot 的终极目的就是要启动内核。Make config 就相当于执行命令100ask24x0_config:unconfig$(MKCONFIG) $(:_config=) arm arm920t 100ask24x0 NULL s3c24x0MKCONFIG:= $(SRCTREE)/mkconfig$(:_config=) $( 表示目标文件100ask24x0 _config=) 表示替换掉他用后面的arm arm920t 100ask24x0 NULL s3c24x0 100ask24x0最后就执行这个命令Mkconfig 100ask24x0 arm arm920t 100ask24x0 NULL s3c24x0 找到脚本文件mkconfig #!/bin/sh表示他是用bin目录下sh解释执行,后面是传入的参数。这个配置过程它做了一些连接工作,把arm board arch 链接到现在的文件。编译时的make 做的工作:用到了上面配置的config.mk(.a文件表示所有编译好的文件打包成成的一个库)OBJS = cpu/arm920/xxxxLib +=xxxx.a ALL = $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND)依赖$(obj)u-boot.bin文件$(obj)u-boot.bin他又依赖于$(obj)u-boot:depend version $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)UNDEF_SYM=$(OBJDUMP) -x $(LIBS) |sed -n -e s/.*(_u_boot_cmd_.*)/-u1/p|sort|uniq;cd $(LNDIR) & $(LD) $(LDFLAGS) $UNDEF_SYM $(_OBJS) -start-group $(_LIBS) -end-group $(PLATFORM_LIBS) -Map u-boot.map -o u-boot得到的bin文件就是这个.a文件如何组织连接在lds连接文件有说明链接地址在0x33f80000就是说应该在这个地址运行比如从0x00000000 到0x08000000是128M空间227次方=27*210*210=128M搜索命令 grep “” - nR内存一共64M0x33f80000空出512KUBOOT做一些工作:进入管理模式、关看门狗中断、初始化存储控制器、设置栈IRQFIQ、重定位(NORflash不能像内存一样写)、从flash拷到sdram、到他该运行的地址0x33f80000、清BSS段、调用C函数从上往下依次是512K UBOOT 然后是用来实现malloc接下来是全局参数,在接下来就是各种模式的栈。接下来刚才调用的C函数在这里执行完成大部分初始化包括以下初始化。在BOARD_INIT中定义了机器ID(有一个gd结构体在那个全局参数中),内核启动身后参数存放的位置。0x30000100处内核存放在0x30008000期间还有页表。最后进入main_loop()函数这个函数看是否设置了读秒的环境参数没有的话直接等待,如果设置了读秒的环节就会等待输入如果没有输入的话就会直接执行bootcmd环境变量进而启动内核,有的话等待串口输入。Bootcmd这个环境变量里是从nand读到0x30007fc0去读从kernel分区去读。然后bootm 0x30007fc0就启动了内核。环境变量是用run_commad去执行的他是怎么执行的?根据结构体每个命令都会有一个结构体比如bootcmd、.name.fun()然后调用fun()就执行了命令对于bootcmd中nand命令表示从nand中读,bootm表示从内存中读。The_kernel()函数一旦运行,控制权就交给了系统。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论