全志H3启动分析,移植主线UBOOT

参考资源

启动流程

因为使用的是外扩SD卡,因此主要参考了这部分内容;Bootable SD card

SD卡Layout如下:

start

sector

size

usage0KB

0

8KB

未使用,主要用于存放分区表

8KB

16

32KB

Init SPL

40KB

80

-

U-Boot

SD卡的起始地址处放的是分区表MBR(占用512B)或者GPT(更多),为了保证SD卡还能用于其他目的,所以前8KB是不能用的;

8KB开始存放U-Boot-spl以及U-boot镜像;

后续未使用区域可以分成FAT分区 + 其他分区,FAT分区中存放linux kernel + DTB文件 + boot.scr,其他分区主要存放根文件系统,或者其他分区;

上边这些规定都是全志内部固化的流程,芯片上电后首先运行内部一段引导程序,然后按照一定的优先级去遍历emmc sd nand usb等看是否能引导程序,如果是SD/eMMC,则会在8KB的便宜除引导程序(uboot-spl),再引导uboot,uboot会从sd卡FAT分区内引导linux内核,解析boot.scr,获取bootcmd,再从其他分区加载根文件系统,至此结束。

编译链

使用linaro工具链即可

uboot编译

make CROSS_COMPILE=arm-linux-gnueabihf- _defconfig

make CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

make CROSS_COMPILE=arm-linux-gnueabihf-

我的板子和orangepi plus类似,1GB DDR3+8GB emmc;但是不幸是ddr沒有走等长线,如果是用orangepi plus的配置,则linux会运行失败,需要修改ddr3的频率,降低频率即可,或者直接使用友善之臂 nano-pi的配置。

SD制作

linux下 使用dd命令烧写uboot至8k偏移处。

使用blockdev命令进行分区,具体可参见:Bootable SD card 。

将boot.cmd转换为uboot可识别的boot.scr,并见boot.scr放于FAT分区:

mkimage -C none -A arm -T script -d boot.cmd boot.scr

将制作好的kernel和DTB放于FAT分区。

使用busybox构建根文件系统,或者直接使用第三方根文件系统,将此系统解压至sd卡的其他分区。

来源:oschina

链接:https://my.oschina.net/u/4232364/blog/3134751

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐