uboot启动第二阶段start_armboot函数遍历init_sequence做了什么?
总体来说做了初始化gd结构变量,初始化网卡,timer4,打印一些cpu时钟,uboot版本等信息
一。 init_sequence[]函数指针数组位于lib_arm/board.c
二。 cpu_init 位于cpu/s5pc11x/cpu.c 这里什么也没做
三。 board_init 位于board/samsung/x210/x210.c 这里初始化网卡DM9000,gd->bd->bi_arch_number赋值(机器码),
gd->bd->bi_boot_params赋值(内核传参内存地址)(0x3000 0100)
四。 interrupt_init 位于cpu/s5pc11x/interrupts.c 将timer4定时为10ms。
五。 env_init 位于common/env_auto.c 这里将gd->env_addr赋值为内存中默认的环境变量的首地址,gd->env_valid = 1(表明环境变量可用);
六。 init_baudrate 位于lib_arm/board.c 将环境变量中的波特率赋值给gd->bd->bi_baudrate = gd->baudrate
七。 serial_init 位于cpu/s5pc11x/serial.c 这里什么也没做
八。 console_init_f 位于common/console.c 这里只将gd->have_console = 1;
九。 display_banner 位于common/board.c 用串口打印版本信息。(printf系列函数中有用到gd变量,所以gd必须赋值若无则可以用serial_puts来输出字符串)
十。 print_cpuinfo 位于cpu/s5pc11x/s5pc11o/speed.c 用于打印cpu时钟信息。
十一。 checkboard位于board/samsung/x210/x210.c中用于打印板子版本这里是printf("\nBoard: X210\n");
十二。 dram_init 位于board/samsung/x210/x210.c用于初始化dram(软件层面的其实就是gd->bd->bi_dram[]这个结构体进行赋值)。
十三。 display_dram_config 位于lib_arm/board.c 用于计算dram的大小并且将其打印出来。