uboot之board.c
来源:互联网 发布:淘宝鸿星尔克优惠券 编辑:程序博客网 时间:2024/06/04 19:39
第一阶段:跳转到board.c 。执行start_armboot函数。
void start_armboot (void)
{
DECLARE_GLOBAL_DATA_PTR;
ulong size;
gd_t gd_data;
bd_t bd_data;
init_fnc_t **init_fnc_ptr; //这个是函数的指针,指向一些硬件初始化的函数,见下面
//init_fnc_t *init_sequence[] = {
// cpu_init, /* basic cpu dependent setup */
// board_init, /* basic board dependent setup */
// interrupt_init, /* set up exceptions */
// env_init, /* initialize environment */
// init_baudrate, /* initialze baudrate settings */
// serial_init, /* serial communications setup */
// display_banner,
// dram_init, /* configure available RAM banks */
// display_dram_config,
// NULL,
// };
//printf("**********Start *************\n");
/* Pointer is writable since we allocated a register for it */
gd = &gd_data;
memset (gd, 0, sizeof (gd_t));//初始化为0
gd->bd = &bd_data;
memset (gd->bd, 0, sizeof (bd_t));//初始化为0
//注意,下面的循环是依次调用各个硬件初始化函数,顺序见上面的的数组,我们在下一篇中依次解释每种硬//件的初始化,第六个就是串口的初始化,这时候我们就可以通过串口输出信息了
for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
if ((*init_fnc_ptr)() != 0) {
hang (); //如果不成功的话,就“输出信息,然后就进入死循环”
}
}
/* configure available FLASH banks */
size = flash_init (); //flash的初始化
display_flash_config (size);//打印flash的配置信息
/* initialize environment */
env_relocate ();//环境的初始化,代码在common\env_common.c中
/* IP Address */
bd_data.bi_ip_addr = getenv_IPaddr ("ipaddr");//读取IP地址,保存到bd_t数据结构中
/* MAC Address */ //MAC地址的初始化
{
int i;
ulong reg;
char *s, *e;
uchar tmp[64];
i = getenv_r ("ethaddr", tmp, sizeof (tmp));
s = (i > 0) ? tmp : NULL;
for (reg = 0; reg < 6; ++reg) {
bd_data.bi_enetaddr[reg] = s ? simple_strtoul (s, &e, 16) : 0;
if (s)
s = (*e) ? e + 1 : e;
}
}
/* enable exceptions */ //允许中断
enable_interrupts ();
#ifdef CONFIG_DRIVER_CS8900 //配置网卡
if (!getenv ("ethaddr")) {
cs8900_get_enetaddr (gd->bd->bi_enetaddr);
}
#endif
//直接进入main_loop 该函数在common\main.c中,至此,硬件初始化完成
/* main_loop() can return to retry autoboot, if so just run it again. */
for (;;) {
main_loop ()
}
/* NOTREACHED - no way out of command loop except booting */
}
- uboot之board.c
- UBOOT之board.c分析(一)
- UBOOT之board.c分析(二)
- UBOOT之board.c分析(三)
- UBOOT之board.c分析(四)
- uboot之board.c源码分析
- Uboot移植之board.c中函数指针数组
- mini6410 uboot board.c 分析
- mini6410 uboot board.c 分析
- uboot-1.1.6 /lib_arm/board.c分析
- uboot-1.1.6 /lib_arm/board.c分析
- uboot/board/mini2440/conifg.mk 之TEXT_BASE
- TQ210 —— s5pv210 board.c分析(uboot第二阶段)
- Uboot 启动流程分析:启动阶段2 board.c
- board.c
- board.c
- UBOOT之main.c分析
- linux c 编程之四 way-board.cgi 漏洞扫描器
- MySql优化实战,详解存储过程
- 冒泡排序(最优)
- java 程序用exe4j 打包成exe,怎样在没有jdk环境电脑上运行
- Android代码混淆
- 纯汇编语言打印字符.以及输出寄存器值至屏幕
- uboot之board.c
- JavaScript正则表达式——常用正则表达式整理
- 基于js的算术验证
- linux 5 clone to linux 6 libjava.so error
- C++ Handle(句柄) part1
- UVa 536 Tree Recobery 二叉树重建
- tomcat后端允许跨域访问的配置
- frame buffer驱动
- hive的查询注意事项以及优化总结