uboot移植与分析.doc

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
uboot移植与分析.doc

编译系统: Ubuntu10.04 交叉编译器: arm-linux-gcc 4.4.3 硬件设备: mini-2440开发板 测试软件: u-boot-2009.11.tar.bz2 依赖库: 无 分析Makefile,由于我们前面在编译uboot时,还要有一步是配置make xxx_config,(我们类比于一般源代码怎么进行安装)我们可以在makefile中去查找些目标,分析其流程. 利用source insight 去查与s3c相关的信息,我们可以得到下面的两个目标: smdk2400_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t smdk2400 samsung s3c24x0 smdk2410_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0 我们当独拿出来分析,去查MKCONFIG. MKCONFIG := $(SRCTREE)/mkconfig,即可我们可以把上述的换成下面的形式: Mkconfig smdk2410 arm arm920t smdk2410 samsung s3c24x0 我们再去打开Mkconfig文件,然后分析是运行过程.(此文件内容较少,可以当独拿出来分析,一般另起一txt去分析),Mkconfig是个脚本文件,负责对主目录中makefile进行配置的文件。创建一些符号链接,并在include目录下创建了两个文件:config.mk和config.h。config.mk包含了uboot运行的环境,包括体系结构、处理器和板子。Config.h中指明了板子相关的配置头文件.我们截取重要的一些放入此处: [ ${BOARD_NAME} ] || BOARD_NAME=$1 这里就设置了BOARD_NAME. cd ./include rm -f asm ln -s asm-$2 asm rm -f asm-$2/arch ln -s ${LNPREFIX}arch-$6 asm-$2/arch rm -f asm-$2/proc ln -s ${LNPREFIX}proc-armv asm-$2/proc 这里是在include文件夹中建立三个链接文件,目的在于针对arm架构下的设置,而不用修改源代码中的统一的符号.这一点有点象alias. #区别于主目录下config.mk(定义了主目录和子目录makefile通用的变量“” * -nR来找,也可通过source insight来查找(通过这个例子可以知道linux下的grep的强大). 接下来看一下ran_command() 的实现. /* Look up command in command table */ if ((cmdtp = find_cmd(argv[0])) == NULL) { printf (Unknown command %s - try help\n, argv[0]); rc = -1; /* give up after bad command */ continue; } cmd_tbl_t *cmdtp; cmd_tbl_t *find_cmd (const char *cmd) { int len = __u_boot_cmd_end - __u_boot_cmd_start; //链接脚本中有定义 return find_cmd_tbl(cmd, __u_boot_cmd_start, len); } 由上面可以,cmd_tbl_t是放在了特殊的段中,我们根据链接脚本去查看,可知: #define Struct_Section __attribute__ ((unused,section (.u_boot_cmd))) 我们猜想uboot中的这些命令必定是放在这个段中,可以从一个命令开始,比如:bootcmd.这个命令必定会有上述一些信息,利用source insight去查可以找到U_BOOT_CMD, #define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \ cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage, help} 接下来,我们去写一个测试命令来进行理解,我们可以根据一个已有的命令去仿造. 文件名为:cmd_hello.c 增加到common中去,内容要有一个执行函数,还要有U_BOOT_CMD这

文档评论(0)

xingkongwd + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档