[Happy Hacking Nezha Board] 小孩子才做选择,我全都要 BOOT
-
乘胜追击
前面完成引导 rt-smart 后, 开始继续其他功能的研究.
常规我们使用 raspberry pi 以及其他 Linux 系统的时候, 一般我们的 kernel 等信息都是放在 /boot 目录下的,大多数会格式化成独立的一个分区.
那么我们就照着这个方向去改造哪吒板子, 目前已经初见成效了, 我做了一个 demo 的 image , 供大家测试, 后续 RVBoards 会发布正式的 Debian 版本.
- 下载地址: d1-multi-kernel
说明
镜像前面几个 1-3 分区是全志的预留的几个分区,占用空间很间,这里不去动他.
第 4 分区是 vfat 格式的 boot 分区, kernel 和 dtbo 等文件存放在这里面
demo 镜像 boot 分区文件说明
overlay
: 存放 dtb overlay 文件boot_debian.img
debian 内核boot_tina.img
tina 内核config.txt
引导配置文件rt-smart
rt-smart 执行程序
config.txt 配置说明
配置示例
# mode # 0 boot bare metal bin # 1 boot linux kernel mode=1 bin=rt-smart kernel=boot_debian.img # dtb overlay # load overlay/${dtoverlay}.dtbo dtoverlay=test-overlay # uboot vars # for debian mmc_root=/dev/mmcblk0p6 # for tina #mmc_root=/dev/mmcblk0p5
详细说明
-
mode
:配置引导模式 0 为引导二进制程序 1 为引导linux 内核 (目前这个版本的 内核文件需要使用
mkbootimage
打包生成,就是 tina sdk 中pack
命令生成的boot.img
文化) -
bin
mode=0 的时候引导的文件
-
kernel
mode=1 的时候引导的文件
-
dtoverlay
dtb overlay 配置, 将会加载 overlay/${dtoverlay}.dtbo 这个文件,后续将会支持多个文件加载
-
mmc_root
这个是作为 bootargs 中 root 参数传递给内核的,告诉内核 root 在什么分区,默认是
/dev/mmcblk0p5
, demo 镜像中有多个内核,多个 rootfs ,所以需要配置一下. -
注意
- 配置项"="两边不能有空格
- config.txt 是作为 uboot 的环境变量加载的,可以配置其他变量覆盖 uboot 内部的变量
原理
主要就是利用 uboot 的 fatload 这个指令,从 mmc 中 vfat 文件系统中加载指定文件到内存中使用.
用到相关的指令
fatload
,env import
,fdt
等核心配置
# demo 镜像中的 bootcmd=run boot_check setargs_mmc boot_mmc # 其中 setargs_mmc 是全志默认的,设置 mmc 加载的 bootrags 的指令 # boot_check 检测 mmc 是否启用,然后加载 config.txt 文件,再加载 dtbo 文件 boot_check=run card_init;mmcinfo;mmc part;fatload mmc ${mmc_dev}:${mmc_boot_part} 47000000 config.txt;env import -t 47000000 ${filesize}; test -n "$dtoverlay" && fatload mmc ${mmc_dev}:${mmc_boot_part} 48000000 overlay/${dtoverlay}.dtbo; fdt apply 48000000 # boot_mmc 就是根据 mode 引导不同系统了 boot_mmc=if test ${mode} -eq 0; then fatload mmc ${mmc_dev}:${mmc_boot_part} 45000000 ${bin}; go 45000000; else fatload mmc ${mmc_dev}:${mmc_boot_part} 45000000 ${kernel}; bootm 45000000; fi
原理和实现其实很简单, 后续还可以继续改进,支持多个 dtbo 加载, tftp 加载(方便快速调试) 等等.
后记
完成多系统引导就这么简单了, 后续文章我会再写一个 dtb overlay 的 demo.
注意事项: demo 镜像中, debain 的 rootfs 大小太小,更大空间,需要自行处理一下. -
-
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号