【原创】U-Boot移植总结

本文详细介绍了U-boot在移植过程中的关键步骤,包括CPU初始化、内存管理、存储设备初始化以及内核启动前的环境配置。重点分析了start.S文件中的代码实现,以及lib_arm/board.c中的start_armboot()函数的初始化流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  移植过程主要参考《Mini2440之 U-boot使用及移植详细手册》和Tekkaman提供的源码。

一、cpu/arm920t/start.S

1、  包括关闭看门狗、关闭所有中断、设置时钟的分频比、初始化SDRAM控制器。

2、  代码位置确定:SDRAMnorflashnandflash

3、  代码搬移:nandflash读函数构建;norflash代码搬移循环。这里比较重要的几个地址_TEXT_BASE_armboot_start_bss_start

4、  设置堆栈:注意malloc areabdinfo相关的两部分空间。

5、  清除bss

6、  跳转C代码点:

ldr    pc, _start_armboot

_start_armboot:       .word start_armboot

nandbootnorboot时,此处也是向SDRAM进行跳转的地点。

二、lib_arm/board.c中的start_armboot()函数

1、  gd_t结构体:详见《【转】bd_t gd_t 及board.c的分析》。

2、  函数指针数组

  init_fnc_t *init_sequence[] = {

         cpu_init,            

         board_init,         

         interrupt_init,      

         env_init,            

         init_baudrate,       

         serial_init,         

         console_init_f,      

         display_banner,      

         dram_init,           

         display_dram_config, 

         NULL,

  };
 
详细介绍见《【原创】函数指针数组*init_sequen…》。

3、  初始化堆、norflash、显存。

4、  初始化 Nand Flash控制器。

5、  初始化环境变量,如果认为没有找到存储其中的,就用默认值并打印“*** Warning - bad CRC, using default environment”。对于环境变量的介绍,见《【原创】环境变量概述》。

6、  初始化 VFD、串口、标准输入输出设备等。

7、  初始化SD卡、网卡。

8、  其中会读取bootdelaybootcmd,在bootdelay时间内按下键进入命令行,否则执行 bootcmd的命令。

9、  bootcmduboot自动执行的命令,一般用来加载和启动内核。对于加载方式和命令参照《mini2440U-boot移植详细手册-201004194.4内核引导;对于启动内核的命令bootm见《[转载]BOOTM浅析(转)》。   

10、bootargs:详见《[转载][转]bootargs参数意义

   

【原创】U-Boot移植总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值