u-boot移植启动流程详细分析(2)

时间:2021-06-25 19:17:51

学习底层的东西,首要的就是去了解他的架构,整体的思路知道了,就会在出现问题的时候有很清晰的思路,知道哪里出的问题,以及程序是如何执行的,相信做到上面的,所遇到的问题,大都会迎刃而解了吧,高手是有很多的,所谓的高手,不过也就那样吧,努力努力也是可以赶超的。

之前,介绍了u-boot的第一阶段的启动流程,那么接下来就来说说第二阶段的具体执行流程:

(1)初始化gloabl data和board data,这里所谓的初始化就是给他们分配一块内存空间。

(2)初始化序列(init_sequence)

在初始化的序列当中包括有:

设置系统时钟操作函数 arch_cpu_init

设置开发板的机器码 board_init

初始化定时器 timer_init

初始化环境变量 env_init

初始化波特率 init_boudrate

初始化串口 serial_init

控制台设备一级初始化 console_init

打印u-boot的版本编译时间 disoplay_banner

打印cpu类型和当前的运行频率 print_cpuinfo

打印开发板的名称 checkboard

配置可用的内存 dream_init

显示当前的内存大小 display_dram_config

(3)NAND Flash 初始化 nand_init

(4)读取NAND Flash 的环境变量,然后做CRC校验,如果错误,则使用默认的环境变量,如果正确则使用从NAND Flash中读取的环境变量

(5)从环境变量中获得板子的ip地址

(6)初始化输入输出设备stdio_init

(7)初始化控制台,默认用串口作为控制台设备

(8)使能IRQ异常,enable——interrupts()

( 9) 初始化网卡设备,eth_initialize(gd->bd)

(10)进入main_loop()中开始判断是否设置了环境变量bootdelay和bootcmd两个参数,如果已经设置过了的话,

再判断在bootdelay的时间内串口是否有输入,如果没有的话则执行bootcmd所设置的接下来的命令,如果

两个参数没有设置过,则循环读取串口中所输入的命令,然后去执行。


以上就是整个第二阶段的内容了,接下来的几天里我会陆续的总结一下关于u-boot移植的具体操作,以及NAND Flash 的相关介绍,学习的过程总是需要把心放下来,然后专注的去体会你所认知的一些事物,每件事情都是这样,只有我们认真的去对待,才会得到应有的回报。