uboot笔记(一):概括/移植等

前言

本笔记以u-boot-2024.10-rc4代码、在arm64平台运行为例对uboot的介绍、编译、适配移植、运行过程的关键流程等;

一、下载地址

https://ftp.denx.de/pub/u-boot/
下载自己想要使用的版本即可

二、目录介绍

目录或文件说明备 注
apiapi接口函数的封装,可以不用
arch架构相关的目录,移植时在相应架构下添加架构下的具体芯片驱动目录mach-xxx,设备树文件也在此目录,芯片寄存器头文件也在此目录
board板级驱动移植,对具体芯片的不同配置的板卡板载硬件的驱动
boot相对旧版本如2018版本将common中的部分文件移到此目录,是关于uboot启动内核相关的处理
cmd对uboot命令的支持实现
common公共接口函数,main.c 位于此目录
configs包含板级config文件
disk对存储设备分区的管理
doc说明文档
drivers驱动的主要目录
dts对dts编译的管理,实际编译arch下的dts文件
env对环境变量读写、存储的管理
examples一些demo
fs文件系统的接口
include公共头文件目录
Kbuild顶层Kbuild
Kconfig顶层Kconfig
lib工具函数的目录如crc、md5计算等
Makefile顶层Makefile,内部包含uboot版本信息
net包括网络协议处理相关实现文件,如ping ,icmp,tcp,udp等
post大概是powerpc架构相关的处理,可以不用
scriptspc端对于编译过程的一些处理
test测试程序
toolsx86下的一些工具函数实现文件

三、编译

1、以rk3308为例,配置文件configs/evb-rk3308_defconfig, 生成配置文件.config

解压 tar xvf u-boot-2024.10-rc4.tar.bz2
cd u-boot-2024.10-rc4
make CROSS_COMPILE=aarch64-linux-gnu- arch=arm64 evb-rk3308_defconfig

2、编译

make CROSS_COMPILE=aarch64-linux-gnu- arch=arm64;
编译过程中会出现一些缺失工具等的报错,可以根据具体情况安装后编译;

四、移植/适配

移植、适配需要处理以下几方面内容,假设我们的芯片厂商为ideachip
1、arch目录处理

添加设备树文件:
arch/arm/dts/目录增加设备树文件ideachip-chipname-boardname.dts,从大到小范围命名,厂商到具体芯片到以此芯片设计的板卡;
对于可以抽象出的公共部分可以创建一个芯片名称.dtsi 文件;
uboot下的设备树命名字符串中间普遍使用中间划线-,可能是为了和内核设备树区分;
对于设备树文件的编译指定在configs/xxxx配置文件中会通过CONFIG_DEFAULT_DEVICE_TREE=ideachip-chipname-boardname 指定;

添加寄存器头文件
arch/arm/include/asm/目录下增加arch-ideachip目录,并添加需要的外设寄存器头文件;
arch//arm/include/asm/mach-types.h,增加一个匹配id的宏,作为bdinfo成员的bi_arch_number的值;

修改支持厂商目录
修改arch/arm/Kconfig文件,添加配置项,config ARCH_厂商,及其它配置;
修改arch/arm/Makefile文件, 根据厂商配置增加厂商文件夹,文件中会自动加上前缀mach-去找mach-厂商目录;

添加驱动文件和目录
arch/arm/下增加mach-ideachip目录;
在mach-ideachip目录中增加Kconfig文件,根据配置source子目录的Kconfig;
在mach-ideachip目录中增加Makefile文件,根据配置控制子目录编译;
在mach-ideachip目录中增加芯片型号名目录,如chipname;
arch/arm/mach-ideachip/chipname/目录中增加Kconfig文件,根据配置source板级目录中的具体芯片下的Kconfig;
arch/arm/mach-ideachip/chipname/目录中增加Makefile文件,管理目录下的文件编译;
arch/arm/mach-ideachip/chipname/目录中增加具体的源文件、头文件,此部分文件可以选择性的初始化芯片的时钟实现board_postclk_init函数(由board_f.c 中调用)等;
Kconfig和Makefile的内核可以参考同级目录的写法,遵循架构到厂商到具体芯片型号的思路;

2、board目录处理

增加板级目录board/厂商/具体芯片/
board/厂商/具体芯片/,目录中增加Makefile文件;
board/厂商/具体芯片/,目录中增加Kconfig文件;
board/厂商/具体芯片/,目录中增加驱动文件,这里主要是实现ddr初始化的驱动,实现dram_init函数(由board_f.c中调用);

3、configs目录处理

增加配置文件, 厂商芯片型号_板卡_defconfig,用于对各级Kconfig中的配置项进行赋值或者屏蔽;

4、include/configs目录处理

增加配置文件xxx.h,主要定义环境变量等;

5、drivers目录处理

对于设备树中添加的设备节点,此部分驱动要进行对应开发和适配;

五、启动流程

1、启动分为带spl和不带spl启动两种情况

uboot源码编译时,可以增加配置去编译spl或者不编译spl;

不带spl时由bootrom直接将uboot加载到sram中,uboot在sram中运行做ddr、其它硬件初始化等操作,代码重定向到ddr中,加载内核,启动内核等操作;
适用于芯片内部sram容量较大能放下uboot运行的情况;

带spl时由bootrom直接将spl加载到sram中运行,spl主要对ddr做初始化,随后加载uboot到ddr中,uboot在ddr中运行做除ddr初始化外的其它硬件初始化等操作,代码重定向,加载内核,启动内核等操作;
适用于芯片内部sram容量较小不能直接放下uboot运行的情况;

2、不带spl时启动流程示意图

3、带spl时启动流程示意图

4、启动流程差异
不同厂家的芯片在uboot启动细节上会有不同,比如有的为安全boot、对内存初始化的方式或者时机有所不同,具体情况具体分析;
整体必要的启动流程主要就是bootroom->uboot->内核->文件系统;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值