uboot第2阶段分析 start_armboot
来源:互联网 发布:网页广告拦截软件 编辑:程序博客网 时间:2024/05/16 00:55
通过前面的分析,知道第2阶段代码主要是start_armboot,首先我们先介绍几个比较重要的结构体。这里主要是对start_armboot中的流程做具体的分析,如图所示:
1.gd_t全局数据结构,主要保存了uboot的配置信息。include/asm-arm/global_data.h中定义:
typedef struct global_data {
#ifdef CONFIG_VFD
#endif
#if 0
#endif
} gd_t;
#define DECLARE_GLOBAL_DATA_PTR
这个声明告诉编译器使用寄存器r8来存储gd_t类型的指针gd,即这个定义声明了一个指针,并且指明了它的存储位置。
register表示变量放在机器的寄存器
volatile用于指定变量的值可以由外部过程异步修改
这个指针在board.c中初始化。
2.bd_t板子数据结构体,主要保存与板子相关的信息。定义在include/asm-arm/u-boot.h中
typedef struct bd_info {
} bd_t;
3.初始化函数队列
typedef int (init_fnc_t) (void);定义函数指针;
下面是函数指针数组
init_fnc_t *init_sequence[] = {
#if defined(CONFIG_ARCH_CPU_INIT)
#endif
#if defined(CONFIG_DISPLAY_CPUINFO)
#endif
#if defined(CONFIG_DISPLAY_BOARDINFO)
#endif
#if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)
#endif
#if defined(CONFIG_CMD_PCI) || defined (CONFIG_PCI)
#endif
}
OK现在开始分析start_armboot,这里只分析流程。
void start_armboot (void)
{
#if defined(CONFIG_VFD) || defined(CONFIG_LCD)\\
#endif
/定义了全局数据指针,见上1,_armboot_start的值位0x3ff80000,且CONFIG_SYS_MALLOC_LEN在smdk2410.h中定义,经过计算可知道config_sys_malloc_len大小为0x30000,sizeof(gd_t)=4+4*7+4=36=0x24.故gd所指向地址0x3ff80000-0x30000-0x24约为ox3ff50000*/
/
gd->bd = (bd_t*)((char*)gd -sizeof(bd_t));
/设置当前uboot标志位已经重定位*/
gd->flags |= GD_FLG_RELOC;
monitor_flash_len = _bss_start -_armboot_start;//uboot镜像文件大小
/初始化函数*/
//flash初始化以及打印其信息
display_flash_config (flash_init ());
//malloc内存空间清零
mem_malloc_init (_armboot_start -CONFIG_SYS_MALLOC_LEN);
//如果定义了nandflash,则对nandflash初始化
#if defined(CONFIG_CMD_NAND)
//环境初始化
env_relocate ();
serial_initialize();
//设置IP地址,以及设备初始化
gd->bd->bi_ip_addr = getenv_IPaddr("ipaddr");
console_init_r (); / fully init console as a device */
misc_init_r ();
//中断使能
enable_interrupts ();
//得到当前网卡物理地址
cs8900_get_enetaddr ();
//设置网卡
eth_initialize(gd->bd)
for (;;) {
}
转载:http://blog.sina.com.cn/s/blog_6cc850810100r364.html
- uboot第2阶段分析 start_armboot
- uboot第2阶段分析 start_armboot--转帖
- uboot第2阶段分析 start_armboot
- uboot第2阶段分析 start_armboot
- uboot第2阶段分析 start_armboot
- uboot之start_armboot分析2
- uboot分析--start_armboot
- uboot 分析之二 start_armboot
- uboot之start_armboot分析1
- uboot之start_armboot分析3
- uboot之start_armboot分析4
- uboot第2阶段nand的初始化分析
- Uboot start_armboot
- uboot 分析之二 start_armboot()函数
- uboot源码分析——start_armboot
- uboot源码分析——start_armboot()函数
- DECLARE_GLOBAL_DATA_PTR、gd_t、bd_t及uboot中 start_armboot 代码分析
- uboot 中的 start_armboot (void)
- linux(centos)安装jdk 1.6
- asp.net QQ 登录的实现
- C#导出EXCEL方法总结
- Android项目技术总结:获取状态栏和标题栏并计算长宽来限制绘制浮动窗口活动范围
- 视频码率,帧率和分辨率的联系与区别
- uboot第2阶段分析 start_armboot
- FCKeditor编辑器在JAVA中的使用与配置方法
- Android ShowDialog调用过程及报错问题
- Direct3D 9/Programming Guide/Getting Started/Lights and Materials
- JSONObject与JSONArray的使用
- LINQ To DataGridView
- 〖面向对象(高级)〗_实例分析:宠物商店笔记
- Excel 导出
- 由浅入深探究mysql索引结构原理、性能分析与优化