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

喜欢而已 提交于 2019-11-29 07:49:05

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


参考资源

http://linux-sunxi.org/Main_Page

启动流程

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

start sector size usage
0KB 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- <board_name>_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制作

  1. linux下 使用dd命令烧写uboot至8k偏移处。
  2. 使用blockdev命令进行分区,具体可参见:Bootable SD card
  3. 将boot.cmd转换为uboot可识别的boot.scr,并见boot.scr放于FAT分区:
    mkimage -C none -A arm -T script -d boot.cmd boot.scr
  4. 将制作好的kernel和DTB放于FAT分区。
  5. 使用busybox构建根文件系统,或者直接使用第三方根文件系统,将此系统解压至sd卡的其他分区。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!