引言

根据官方手册的说明,板子上有一块自带的16MB存储,里面有一个小型的Linux系统。在出厂状态下,这个自带的Linux系统没有太多功能,基本只能用于证明开发板可以正常开机。

板载Flash位置图:

1754315521 Flashlocation

这个微型Linux的主要功能就是:

  • 开机时更改LED灯的状态
  • 可以通过HDMI连接显示器进入文本终端,也可以通过USB连接键盘输入一些Busybox自带的命令

技术分析

启动流程与存储配置

存储卡

在存在存储卡,并且在存储卡的8KiB处存在有效的uboot,则全志SoC会优先启动存储卡上的uboot并启动系统,因此如果板载Flash损坏或内容丢失也不影响开发板从存储卡启动系统(放心折腾?)。因此如果需要重写存储卡上的uboot,需要设置一个8KiB的偏移,并且第一个分区前面需要给uboot留出足够的空间,建议至少1MiB:

1754316211 Parttable

写入uboot时应该使用如下命令(Linux环境中):

sudo dd if=uboot.bin of=/dev/sdX bs=1024 seek=8

uboot.bin 应当替换为你即将写入的uboot文件名(或完整路径),/dev/sdX 替换为存储卡的实际设备名,在上图的案例中应为 /dev/sda ,bs=1024 表示设置一个块的大小是 1024字节(即1KiB),seek=8 表示偏移8个块,因此使用这条命令就能把uboot写到存储卡偏移8KiB的位置供全志SoC识别和启动。

user@Host:~ $ sudo dd if=/path/to/u-boot-sunxi-with-spl.bin  of=/dev/sda bs=1024 seek=8
[sudo] user 的密码:
输入了 822+1 块记录
输出了 822+1 块记录
842253 字节 (842 kB, 823 KiB) 已复制,0.168543 s,5.0 MB/s
user@Host:~ $ 

Flash

如果不存在存储卡,则SoC会从Flash头部寻找uboot并尝试启动。

物理层面上,这个Flash通过SPI总线与SoC通信,在我使用的 Arch Linux 环境下,他被识别为 spi0.0 设备,然后系统根据存储设备的性质生成 /dev/mtd0 字符设备进行通信。

你也许发现问题了,常规的存储设备应该是块设备,而 mtd 存储是字符设备。为了方便用户操作,系统就又模拟出 /dev/mtdblock0 块设备。这个块设备也能被系统中常见的分区软件所识别。

在出厂状态下,Flash中包含uboot(版本很旧,不支持从efi启动),设备树,linux内核和一个最小化的rootfs。因为uboot占用了Flash的前面400个KiB左右的空间,导致常规的分区表无法写入(分区表记录所在位置与uboot冲突,无法共存),因此Flash中使用ubi分区表,常规的分区软件无法识别。我们需要安装 mtd-utils 工具集:

# Arch Linux
sudo pacman -S mtd-utils

分区表和文件系统部分我还没有能力进行解析和提取,希望阅读本文的大佬们能提出一些自己的看法并留在评论区。下附上提取得的镜像:

百度网盘:提取码wxb5

sha256: d27405c97bea456c7f06240fc4413906dd1add7557db896cc60c5b9744e50037

UBoot 改写与刷入

如上所述,板载Flash中附带的uboot版本很旧,不支持efi启动等新特性,反而是Arch镜像中附带的uboot比较新,你可以从 /boot/u-boot-sunxi-with-spl.bin 取得uboot镜像。

操作之前一定要备份:

sudo dd if=/dev/mtdblock0 of=/path/to/bakimage

由于mtd存储比较特殊,我们需要先擦除设备:

sudo flash_erase /dev/mtd0 0 0

然后写入新的uboot镜像(无需设置偏移):

sudo dd if=uboot.bin of=/dev/mtdblock0 

提示


理论上来说应该使用mtd工具集中对应的工具写入比较好:
sudo nandwrite -p /dev/mtd0 uboot.bin
但是不知为何写入速度出奇的慢,因此这里没用,可能是我使用方法有误?

如果操作无误,写入完成后在无内存卡的情况下开机就能启动到flash中的新uboot,该uboot支持从efi启动,因此也支持使用U盘等方式启动,不再局限于存储卡,也不一定非得使用uboot直接加载内核并启动Linux,这部分内容之后再说(不知道什么时候)。

除非注明,否则均为天远日记原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.tqhyg.net/post575.html