5、uboot启动过程

1.uboot简介

      它是bootloader的一种
       bootloader是用于为操作系统的启动初始化硬件环境,加载启动操作系统

       开源程序
      号称通用的bootloader
       1)支持多种CPU架构
       2)支持启动多种操作系统

2.uboot的配置与编译过程

   make x6818_config
   make
   make clean //清除编译过程中产生的文件
   make distclean //清除配置阶段和编译阶段产生的文件

          问:为什么要先配置后编译

          答:配置完成了选出特定硬件相关代码 ,使其参与后续编译过程

3.阅读uboot的代码

    3.1 寻找入口点

             rm u-boot
             make V=1 //V=1意思是显示编译链接的详细过程
             arm-cortex_a9-linux-gnueabi-ld.bfd   -pie  --gc-sections -Bstatic -Ttext 0x43C00000 -o u-boot -T u-boot.lds arch/arm/cpu/slsiap/start.o --start-group  arch/arm/cpu/built-in.o ...   //链接的第一个文件将是入口文件
             vi u-boot.lds
             arch/arm/cpu/slsiap/s5p6818/start.o (.text*)
             所以:入口点文件是arch/arm/cpu/slsiap/s5p6818/start.S

      3.2 uboot启动流程

              linux下代码阅读工具: vi + ctags 
              sudo apt-get install ctags  //安装ctags
              ctags -R *   
              vi start.s
              将光标停留要查看的函数字符串上 ,按下键盘上的 ctrl + ] 就可以跳转到定义位置,ctrl + t 返回跳转前的位置 

              0x00000000  b reset:

               reset:

                             1.设置为SVC模式
                             2.禁止看门狗
                             3.使L1缓存无效
                             4.禁止MMU
                             5.清空BSS

                              6.bl  board_init_f {      initcall_run_list (init_sequence_f)      }   //完成一系列硬件的初始化

                              7.ldr  pc,  =board_init_r   {   initcall_run_list ( init_sequence_r)   }   //进一步完成硬件的初始化 

                              8.最后 执行 run_main_loop 函数

            run_main_loop:

  1. 循环执行main_loop
    1. s = bootdelay_process(){
                        s = getenv("bootdelay");
                        //完成字符串到整型的转换
                        bootdelay = s ? (int)simple_strtol(s, NULL, 10) : CONFIG_BOOTDELAY;
                        ... 
                        s = getenv("bootcmd");
                        stored_bootdelay = bootdelay;
                        return s;
      }
    2. autoboot_command(s){
                        //倒数读秒计时 判断是否被打断
                        if (stored_bootdelay != -1 && s && !abortboot(stored_bootdelay)){
                                //顺序执行bootcmd中对应的命令
                                run_command_list(s, -1, 0);
                        }
      }
    3. cli_loop(){
                     cli_simple_loop(){
                           for (;;){
                                 //输出命令提示符 接收用户输入的命令到console_buffer
                                 len = cli_readline(CONFIG_SYS_PROMPT);
                                 strcpy(lastcommand, console_buffer);
                                 //执行命令
                                 run_command_repeatable(lastcommand, flag)
                            }
                      }
      }            

sourceinsight:编辑 阅读 修改代码的利器     
              ubuntu 系统使用 wine的模拟器       

阅读代码的经验:
    1)有文档先看文档
    2)看代码时关注框架 关注流程 放弃细节

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在u-boot启动过程中,有以下详细步骤: 1. u-boot被加载到内存中并运行。 2. u-boot执行do_bootm_linux函数,该函数用于启动Linux内核。 3. u-boot根据参数信息设置启动参数,这些参数由uboot传递给内核,用于配置内核的运行环境。 4. u-boot执行boot命令来启动Linux内核,常用的boot命令有bootz、bootm和boot。 5. 在bootm命令中,u-boot会执行bootcmd参数中定义的一系列命令。这些命令可以用于执行一些预定义的操作,比如显示logo信息、从存储设备中读取内核映像到内存等。 6. 最后,u-boot会将内核映像加载到内存中,并启动内核。 总结起来,uboot启动过程的详细步骤包括加载u-boot到内存中、设置启动参数、执行boot命令启动Linux内核,并根据bootcmd参数执行一些额外的操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Uboot启动过程详解](https://blog.csdn.net/weixin_45566765/article/details/119082331)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [linux-uboot 移植三 uboot启动内核过程](https://blog.csdn.net/u010681589/article/details/125195077)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值