前言
本文讲述如何使用主线uboot编译自己想要的平台uboot,我们常用的平台也就arm和arm64,本文拿全志平台做例子,arm采用orange pipc h3平台。
arm64采用orange pipc2 h5平台。
编译环境搭建
下载
下载最新uboot代码,链接开源组件链接地址
https://ftp.denx.de/pub/u-boot/
我们整一个7月份的
tar -jxvf u-boot-2024.07.tar.bz2
arm
H3
make orangepi_pc_defconfig ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
make -j ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
依赖包
sudo yum install -y bison m4 flex openssl openssl-devel
常见错误
1./bin/sh: line 1: bison: command not found bison包没装
2. bison: m4 subprocess failed: No such file or directory 缺少m4依赖包
3. bison: m4 subprocess failed: No such file or directory flex
这就编译好了
文件介绍
4. u-boot 这个是uboot的elf文件有5M之大,包含了很多调试信息,一般可以gdb用
5. u-boot.bin,纯uboot bin文件 elf转换过来的
6. spl/sunxi-spl.bin uboot中spl的bin文件 重要
7. u-boot-sunxi-with-spl.bin 根据配置文件讲spl和uboot平在一起的文件
u-boot-sunxi-with-spl.bin 特别说明
关于镜像相关的说明在另一篇博客有提交传送
这里面提到了tf卡以及emmc中的镜像布局。
前8k 引导分区
8-32k是 spl分区,后面40K是uboot分区
使用hexdump -C u-boot-sunxi-with-spl.bin > tmp命令查看
发现0x8000的地方开始写uboot的镜像,0x8000就是32k,加上前面8k的偏移,
这样我们的uboot就是40k的地方,所以uboot的spl要去分区40k的地方加载uboot
40k/512=0x50, 512是tf卡一个section的大小,uboot有个宏专门配置这个section
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR 这个就是spl去哪里加载uboot的地方。
但是呢这个值配置成0x40,是因为这个值描述的是ubootbin文件在整个spl+uboot 中的偏移,
spl去tf卡中的偏移他自己会加上8k头的大小,raw_sect就是这个宏等于0x40,
spl_mmc_raw_uboot_offset返回的是CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET宏,而这个宏的值就是0x10,也就是8k,总的加起来就是0x50,访问正确。
看到这个config打头的就知道肯定的配置文件menuconfi那里来的查看kconfig文件
要grep -rn SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR 查看下值是否生效
arm64
H5
make orangepi_pc2_defconfig ARCH=arm CROSS_COMPILE=aarch64-linux-gnu-
make -j ARCH=arm CROSS_COMPILE=aarch64-linux-gnu-