笔记整理—uboot启动过程(8)uboot启动二阶段结束

        前文说到,uboot实现了malloc()可以申请堆内存了,今天这章将会对uboot进行一个了结。

        Ip Adderss开发板地址也就是开发板的IP。

gd->bd->bo_ip_addr=getenv_Ipaddr("ipaddr");

        通过getenv转string_to_ip实现,完成所见的ip地址。把字符串->点分十进制,因为一个IP地址正好32位,使以用unsigend int进行存储,人看到的点分十进制为192/168.3.1。

        MAC地址:网卡或网络设备硬件地址。使用getenv得到ethaddr,将数据放在gd->bd->bi_enetaddr[rag]中。MAC地址有六位组成,对于X210而言是00:40:5C:26:0A:5B,这个数据是默认在uboot中的值,可在config中进行修改初始值,如果save过环境变量,就应该在命令行中进行修改,因为已经存储在SD卡中了。

        devices_init()硬件设备初始化,都是驱动设备相关的,根据Linux驱动框架衍生出的结构,该结构从linux内核中移植,集中进行各种硬件的驱动。但是在x210的uboot上没用到,因为用不上,对于x210而言,uboot就是为了去启动内核的,所以没用上,但在内核部分会对相关使用到的硬件进行驱动。

        jumptable_init跳转表,初始化gd中的jt值,是对一些函数指针进行函数绑定,目的是使用c语言进行面向对象的操作,本uboot没用上这玩意。

        consele_init_r控制台二阶段初始化,前几章出现过相关的内容但那是consele_init_f也就是控制台一阶段初始化。控制台初始化以纯软件形式进行初始化。给相关数据结构填充相应的值,但是在uboot的consele并没有建立缓冲区,其本质还是一个串口,到了内核部分的consele就使用到了缓冲区等机制。

        enable_interrupts中断初始化。COSR说到总中断位(CPSR_C)的使能,但在uboot中没有使用到中断,所以是空转。

        uboot中经常出现一个以宏为条件编译的代码,一般会用到两种方法:1.调用处进行条件编译。2.提供两种函数体选择(实体函数/空转)。

        loadadder与bootfile,都是与内核启动有关,在linux内核中会去参考这些东西(从环境变量中读取到全局变量)。

        board_late_init()开发板后期初始化,在x210的uboot中为空转,侧面说明了板级初始化已经基本结束了。

        eth_initialze网卡相关初始化。在因为x210已经在board_init中完成了相关内容的初始化,所以结论为空转。

        miiphy网卡的mii层初始化,对于x210所使用的DM9000而言来说这一部分是空转。

        x210_preboot_init:LCD与logo显示。x210在启动命令之前的初始化。fd_init()是Frame_Buffers像素缓冲器的初始化其大小为显示器的像素长*像素宽*色彩的比特位。LCD_port_init相关gpio的初始化。LCD_reg_init相关寄存器的初始化。init_logo()初始化logo图片,display_logo()显示logo图片。

        check menukey to update from sd自动更新,将启动img放到sd卡中(要升级的内核版本),在最后时检查按键进行img升级,按下->updata mode->从sd卡读->烧入INand。不按按键->boot mode->正常运行。这样能快速的烧录系统,用于量产产品。

        main_loop死循环,uboot结束。

        uboot启动第二阶段总结:主要针对一些硬件与数据结构进行初始化。init_sequence(网卡、机器码、内存传参地址、定时器、gd结构体中的波特率、打印启动信息、cpu时钟设置信息、校验开发板名称、gd中的DDR信息、DDR配置信息表打印)。

mem_malloc_init    malloc初始化(堆内存)
mmc_initialize    inand/sd卡的初始化(soc相关)
env_relocate    环境变量重定位
ip_addr    gd中的ip初始化(bd)
ETH(gd->bd->bienetaddr)相关的初始化
device_init    空转
jumb_table_init    跳转表
console_init    控制台初始化
loadaddr与bootfile    环境变量->全局变量
X210_preboot_init    LCD初始化与logo初始化
check_menu_update_from_sd    SD卡量产烧录程序
main_loop()    主loop
其中有些空转内容没写

        uboot的第一阶段:SOC相关工作;以汇编语言为主;发生在SRAM中。

        uboot的第二阶段:开发板相关工作;以c语言为主;发生在DRAM中。

        其中移植的重点在于宏定义:x210_sd.h。

        特定的硬件初始化放在uboot的二阶段。

        值得一提的是串口已经在一阶段实现了。

        至此历经8个文章,完成了uboot的大概内容讲解,可喜可贺! 

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值