uboot笔记uboot命令分析+实现.docxVIP

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
uboot笔记uboot命令分析实现

uboot笔记:uboot命令分析+实现 /category/324350Uboot uboot命令分析+实现?先贴一个重要结构,位于uboot/include/command.h,这个结构代表每个uboot命令struct cmd_tbl_s { char *name;/* Command Name?????? */ int maxargs;/* maximum number of arguments*/ int repeatable;/* autorepeat allowed??? */ /* Implementation function */ int (*cmd)(struct cmd_tbl_s *, int, int, char *[]); char *usage;/* Usage message?? (short)简短用法信息*/#ifdefCFG_LONGHELP char *help;/* Help? message?? (long) 长的帮助信息*/#endif#ifdef CONFIG_AUTO_COMPLETE /* do auto completion on the arguments */ int (*complete)(intargc, char *argv[], charlast_char, intmaxv, char *cmdv[]);#endif};?typedef struct cmd_tbl_s cmd_tbl_t;============================================================?uboot的第一阶段:硬件相关初始化0.reset 执行arm920t/start.s 过程如下1.设置cpu svc管理模式2.关看门狗中断,mmu等3.设置时钟,sdram,外部总线4.代码重定位,搬运代码,从flash到sdram5.设置栈,bss段清零, bss用于未初始化的全局变量和静态变量6.ldr pc, _start_armboot 即进入uboot启动的第二阶段,调用c函数start_armboot()?从start_armboot 开始经过一系列外设初始化比如falsh_initnand_init...最后循环调用mian_loop()main_loop主要流程{ 1. 生成环境变量mtdparts, 调用mtdparts_init 2. 在启动过程中 若无空格键按下则boot_zImage,即run_command(getenv(bootcmd),0) 有空格键按下则 run_command(menu,0) 3. shell过程,读取用户的输入并执行相应的命令 { 从控制台获得命令,保存在全局变量comsole_buffer中 解析命令行字符串,分割命令与参数,最后执行 run_command(...); }}?也就是说在mian_loop中,是处理环境变量和控制台人机交互,mian_loop调用readline ()读取命令行到console_buffer,再把console_buffer复制到lastcommand中去,还要设置flag,最后调用run_command (lastcommand, flag)函数,run_command (lastcommand, flag)函数中,首先定义cmd_tbl_t *cmdtp,再解析命令行。再调用find_cmd(argv[0])函数,其中argv[0]应该是命令本身,参数已经被剥离,这个函数返回的是一个cmd_tbl_t结构体,就是说每个命令都有一个cmd_tbl_t结构体相对应,关于run_command函数后面再分析?mian_loop中有#define CONFIG_BOOTDELAY 3 //设置启动延时时间//如果延时大于等于零,并且没有在延时过程中接收到按键,则引导内核if (bootdelay = 0 s !abortboot (bootdelay)) { //# ifdef CONFIG_AUTOBOOT_KEYED intprev = disable_ctrlc(1);/* disable Control C checking */# endif //状态设置?# ifndef CFG_HUSH_PARSER { printf(Booting Linux ...\n);?????? //启动 linux run_command (s, 0); //运行引导内核的命令,s=getenv(bootcmd) }?加载linux内核时将使用变量“bootcmd”和 “bootargs”,变量“bootcmd”和 “bootargs”的值可以在在加载linux内核

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档