uboot启动过程概要

大多数bootloader都分为stage1和stage2两大部分,u-boot也不例外。依赖于CPU体系结构的代码(如设备初始化代码等)通常都放在stage1且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下:

1) stage1 (start.s代码结构)
u-boot的stage1代码通常放在u-boot/cpu/xxxx/start.S文件中(xxx为体系结构,如s3c44b0),它用汇编语言写成,其主要代码部分如下:
(1) 定义入口。由于一个可执行的Image必须有一个入口点,并且只能有一个全局入口,通常这个入口放在ROM(Flash)的0x0地址,因此,必
须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成,主要是修改u-boot/board/xxxx/xxxx/u-boot.lds(xxx为相关的移植文件夹)。
(2)设置异常向量(Exceptionvector)。
(3)设置CPU的速度、时钟频率及中断控制寄存器,调用cpu_init_crit。
(4)初始化内存控制器,调用u-boot/board/xxxx/xxxx/memsetup.S。
(5)将ROM(FLASH)中的程序复制到RAM中。
(6)初始化堆栈 。
(7)转到RAM中执行,该工作可使用指令ldr pc来完成,调用_start_armboot(在u-boot/lib_arm/board.c文件中)。

详细过程分析详见:start.s文件分析

2) stage2 C语言代码部分
u-boot/libarm/board.c中的startarmboot是C语言开始的函数,也是整个启动代码中C语言的主函数,同时还是整个u-boot(armboot)的主函数,该
函数主要完成如下操作:
(1)调用一系列的初始化函数(详见:init_sequence分析)。
(2)初始化Flash设备,显示Flash配置(调用display_flash_config)。
(3)初始化系统内存分配函数(调用mem_malloc_init)。
(4)初始化环境变量(调用env_relocate)。
(5)初始化相关网络设备,填写IP、MAC地址等。
(6)进入命令循环(即整个Boot的工作循环),接受用户从串口输入的命
令,然后进行相应的工作。

转载于:http://0302209zsl.blog.163.com/blog/static/14797857520115202111715/

在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.youkuaiyun.com/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.youkuaiyun.com/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、付费专栏及课程。

余额充值