如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
Uboot编译:rm-rf删除命令tarxjf解压uboot文件patch打补丁-p1指示忽略第一个斜杠前因为已经在当前目录。打好补丁之后配置文件make100ask24x0_config之后make配置文件是厂家提供好的。Make后生成bin文件,在Windows下进入oflash目录烧写这个文件。选择OpenjtagS2C2440nandflash0块02000这几个数字烧写之后进入启动界面之后uboot命令按help查看支持哪些命令。?Md查看md命令Print命令查看环境变量设置环境变量setxxxxxxsavereset重启Uboot的终极目的就是要启动内核。Makeconfig就相当于执行命令100ask24x0_config:unconfig@$(MKCONFIG)$(@:_config=)armarm920t100ask24x0NULLs3c24x0MKCONFIG:=$(SRCTREE)/mkconfig$(@:_config=)$(@表示目标文件100ask24x0_config=)表示替换掉他用后面的armarm920t100ask24x0NULLs3c24x0100ask24x0最后就执行这个命令Mkconfig100ask24x0armarm920t100ask24x0NULLs3c24x0找到脚本文件mkconfig#!/bin/sh表示他是用bin目录下sh解释执行,后面是传入的参数。这个配置过程它做了一些连接工作,把armboardarch链接到现在的文件。编译时的make做的工作:用到了上面配置的config.mk(.a文件表示所有编译好的文件打包成成的一个库)OBJS=cpu/arm920/xxxxLib+=ALL=$(obj)u-$(obj)u-boot.bin$(obj)System.map$(U_BOOT_NAND)依赖$(obj$(obj$(obj)u-boot:dependversion$(SUBDIRS)$(OBJS)$(LIBS)$(LDSCRIPT)UNDEF_SYM=`$(OBJDUMP)-x$(LIBS)|sed-n-e's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\cd$(LNDIR)&&$(LD)$(LDFLAGS)$$UNDEF_SYM$(__OBJS)\--start-group$(__LIBS)--end-group$(PLATFORM_LIBS)\-Mapu-boot.map-ou-boot得到的bin文件就是这个.a文件如何组织连接在lds连接文件有说明链接地址在0x33f80000就是说应该在这个地址运行比如从0x00000000到0x08000000是128M空间2^27次方=2^7*2^10*2^10=128M搜索命令grep“”-nR内存一共64M0x33f80000空出512KUBOOT做一些工作:进入管理模式、关看门狗中断、初始化存储控制器、设置栈IRQFIQ、重定位(NORflash不能像内存一样写)、从flash拷到sdram、到他该运行的地址0x33f80000、清BSS段、调用C函数从上往下依次是512KUBOOT然后是用来实现malloc接下来是全局参数,在接下来就是各种模式的栈。接下来刚才调用的C函数在这里执行完成大部分初始化包括以下初始化。在BOARD_INIT中定义了机器ID(有一个gd结构体在那个全局参数中),内核启动身后参数存放的位置。0x30000100处内核存放在0x30008000期间还有页表。最后进入main_loop()函数这个函数看是否设置了读秒的环境参数没有的话直接等待,如果设置了读秒的环节就会等待输入如果没有输入的话就会直接执行bootcmd环境变量进而启动内核,有的话等待串口输入。Bootcmd这个环境变量里是从nand读到0x30007fc0去读从kernel分区去读。然后bootm0x30007fc0就启动了内核。环境变量是用run_commad去执行的他是怎么执行的?根据结构体每个命令都会有一个结构体比如bootcmd、{.name.fun()}然后调用fun()就执行了命令对于bootcmd中nand命令表示从nand中读,bootm表示从内存中读。The_kernel()函数一旦运行,控制权就交给了系统。Linux系统Find-name“defconfig”编译:patch-p1<../补丁文件配置:一、makemenuconfig二、使用默认的配置在此基础上修改三、使用厂家的配置文件直接把厂家提供的config复制为