u-boot启动过程 u-boot (3)
1.u-boot启动模式简介
uboot包含启动模式和下载模式。
启动模式(boot loading)这种模式也称之为“自主”,整个过程是没有用户的参与的
下载模式(downloadig)这种模式下。目标机上的bootloader通过串口或者是网络来从主机上下载文件,然后控制启动流程
2.u-boot启动分析
由于一个可执行的image文件必须有一个入口点,这个入口点通常是放在flash的0x0处,因此必须通知编译器使其知道这个
工作是通过/board/smdk2410/uboot.lds来实现的
ENTRY(_start)
SECTIONS
{
. = 0x00000000;
. = ALIGN(4);
.text :
{
cpu/arm920t/start.o (.text)
*(.text)
}
*****
}
u-boot在代码区的位置在board/smdk2410/config.mk
# Linux-Kernel is expected to be at 3000'8000, entry 3000'8000
# optionally with a ramdisk at 3080'0000
TEXT_BASE = 0x33F80000
###################################
下面开始分析start.S文件
###################################
/*
* 当发生异常时,执行/cpu/arm920t/interrupts.c中的中断处理函数
*/
.globl _start
_start: b reset
ldr pc, _undefined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq
/*
* the actual reset code,实际开始运行点,设置为特权模式SVC
*/
/* turn off the watchdog,设置cpu频率*/
/* 与内存管理相关寄存器的设置 */
/* relocate U-Boot to RAM */
/* Set up the stack */
/* clear bss */
ldr pc, _start_armboot跳转到start_armboot(lib_arm/board.c)的c代码开始执行
###########################
board.c
############################
board.c文件中主函数是start_armboot函数,该函数同时也是整个uboot的主函数。
for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
if ((*init_fnc_ptr)() != 0) {
hang ();
}
}
调用init_sequence中函数
/* configure available FLASH banks */
configure LCD
configure network
*
最后调用函数main_loop来实现接受串口中传来的命令,调用相应函数(main_loop在common/main.c中定义) *
/* main_loop() can return to retry autoboot, if so just run it again. */
for (;;) {
main_loop ();
}
#############################
main.c
##############################
在main.c中接受串口的命令来执行
for (;;)
// get command and execute the command
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?