<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[[Happy Hacking Nezha Board] 小孩子才做选择,我全都要 BOOT]]></title><description><![CDATA[<h2>乘胜追击</h2>
<p dir="auto">前面完成引导 rt-smart 后, 开始继续其他功能的研究.</p>
<p dir="auto">常规我们使用 raspberry pi 以及其他 Linux 系统的时候, 一般我们的 kernel 等信息都是放在 /boot 目录下的,大多数会格式化成独立的一个分区.</p>
<p dir="auto">那么我们就照着这个方向去改造哪吒板子, 目前已经初见成效了, 我做了一个 demo 的 image , 供大家测试, 后续 RVBoards 会发布正式的 Debian 版本.</p>
<ul>
<li>下载地址: <a href="http://404.net.cn/d1-multi-kernel.zip" target="_blank" rel="noopener noreferrer nofollow ugc">d1-multi-kernel</a></li>
</ul>
<h3>说明</h3>
<p dir="auto">镜像前面几个 1-3 分区是全志的预留的几个分区,占用空间很间,这里不去动他.</p>
<p dir="auto">第 4 分区是 vfat 格式的 boot 分区, kernel 和 dtbo 等文件存放在这里面</p>
<p dir="auto">demo 镜像 boot 分区文件说明</p>
<ul>
<li><code>overlay</code> : 存放 dtb overlay 文件</li>
<li><code>boot_debian.img</code> debian 内核</li>
<li><code>boot_tina.img</code> tina 内核</li>
<li><code>config.txt</code> 引导配置文件</li>
<li><code>rt-smart</code> rt-smart 执行程序</li>
</ul>
<p dir="auto">config.txt 配置说明</p>
<p dir="auto">配置示例</p>
<pre><code class="language-bash"># 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
</code></pre>
<p dir="auto">详细说明</p>
<ul>
<li>
<p dir="auto"><code>mode</code>:</p>
<p dir="auto">配置引导模式 0 为引导二进制程序 1 为引导linux 内核 (目前这个版本的 内核文件需要使用 <code>mkbootimage</code> 打包生成,就是 tina sdk 中 <code>pack</code> 命令生成的 <code>boot.img</code> 文化)</p>
</li>
<li>
<p dir="auto"><code>bin</code></p>
<p dir="auto">mode=0 的时候引导的文件</p>
</li>
<li>
<p dir="auto"><code>kernel</code></p>
<p dir="auto">mode=1 的时候引导的文件</p>
</li>
<li>
<p dir="auto"><code>dtoverlay</code></p>
<p dir="auto">dtb overlay 配置, 将会加载  overlay/${dtoverlay}.dtbo 这个文件,后续将会支持多个文件加载</p>
</li>
<li>
<p dir="auto"><code>mmc_root</code></p>
<p dir="auto">这个是作为 bootargs 中 root 参数传递给内核的,告诉内核 root 在什么分区,默认是 <code>/dev/mmcblk0p5</code> , demo 镜像中有多个内核,多个 rootfs ,所以需要配置一下.</p>
</li>
<li>
<p dir="auto">注意</p>
<ul>
<li>配置项"="两边不能有空格</li>
<li>config.txt 是作为 uboot 的环境变量加载的,可以配置其他变量覆盖 uboot 内部的变量</li>
</ul>
</li>
</ul>
<h2>原理</h2>
<p dir="auto">主要就是利用 uboot 的 fatload 这个指令,从 mmc 中 vfat 文件系统中加载指定文件到内存中使用.</p>
<p dir="auto">用到相关的指令 <code>fatload</code>, <code>env import</code> ,<code>fdt</code> 等</p>
<p dir="auto">核心配置</p>
<pre><code class="language-bash"># 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" &amp;&amp; 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

</code></pre>
<p dir="auto">原理和实现其实很简单, 后续还可以继续改进,支持多个 dtbo 加载, tftp 加载(方便快速调试) 等等.</p>
<h2>后记</h2>
<p dir="auto">完成多系统引导就这么简单了, 后续文章我会再写一个 dtb overlay 的 demo.<br />
注意事项: demo 镜像中, debain 的 rootfs 大小太小,更大空间,需要自行处理一下.</p>
]]></description><link>https://bbs.aw-ol.com/topic/143/happy-hacking-nezha-board-小孩子才做选择-我全都要-boot</link><generator>RSS for Node</generator><lastBuildDate>Tue, 19 May 2026 18:43:20 GMT</lastBuildDate><atom:link href="https://bbs.aw-ol.com/topic/143.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 11 Jun 2021 13:15:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [Happy Hacking Nezha Board] 小孩子才做选择,我全都要 BOOT on Fri, 11 Jun 2021 15:14:37 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://bbs.aw-ol.com/uid/30">@liangdi</a> 在 <a href="/post/529">[Happy Hacking Nezha Board] 小孩子才做选择,我全都要 BOOT</a> 中说：</p>
<blockquote>
<p dir="auto">下载<br />
更快的下载地址</p>
</blockquote>
<p dir="auto"><a href="http://2020-sd-static.qianguatech.com/d1-multi-kernel.zip" target="_blank" rel="noopener noreferrer nofollow ugc">http://2020-sd-static.qianguatech.com/d1-multi-kernel.zip</a></p>
]]></description><link>https://bbs.aw-ol.com/post/532</link><guid isPermaLink="true">https://bbs.aw-ol.com/post/532</guid><dc:creator><![CDATA[liangdi]]></dc:creator><pubDate>Fri, 11 Jun 2021 15:14:37 GMT</pubDate></item></channel></rss>