简介
记录下自己的树莓派更新rootfs的过程,防止忘记原理跟步骤了
原理
因为rootfs镜像太大了,uboot下可用的内存不足以支持把镜像通过网络写到emmc中,所以将emmc划分出mmcblk0p5分区,放置一个小的根文件系统用来做升级(有点像为了专门升级而做的小系统)。升级文件可以选择放在p5或者p6都可以,这里我选择放在p6。需要升级的时候就设置好uboot的bootargs命令,将根文件系统切换到p5分区,就能对p3裸分区进行dd操作了。

步骤
打包rootfs,执行buildroot下的pack_rootfs脚本

树莓派端挂载nfs,将打包好后的raspi_rootfs.ext4文件拷贝放到/dav目录下,该目录挂载的是mmcblk0p6节点

重启,进入uboot,输入下列命令,将根文件系统切换到mmcblk0p5去,不需要保存参数,直接启动
U-Boot> setenv bootargs 'coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_headphones=0 rootfstype=ext4 root=/dev/mmcblk0p5 rootwait rw'
U-Boot> run bootcmd

重启后,直接对mmcblk0p3分区进行dd操作,这里操作前先看下ext4文件多大

# cd /dav
# ls -lh raspi_rootfs.ext4
# dd if=raspi_rootfs.ext4 of=/dev/mmcblk0p3 bs=50M count=8
直接重启后,给mmcblk0p3调整文件系统的大小(或者在上一步重启前直接执行命令也是可行的)
# resize2fs /dev/mmcblk0p3
可以看到/dev/root的available跟实际的硬件分区一样了

FEATURED TAGS
Ubuntu
markdown
stm32
OSDK
飞控
串口
Jscope
C
C++
bin
J-Flash
字符串
指针数组
malloc
vscode
svg
png
github
python
CMake
CMakeLists
Linux
拷贝构造函数
GIF
录屏
docker
操作系统
make
Makefile
文件操作
DSP
CCS
SQL
MySQL
shell
bochs
计算机网络
win10
SMTP
Socket
iOS
uxplay
投屏
证书错误
apt
nodesource
ELF
Typora
图床
fossil
sql
git
SecureCRT
windows
cygwin
blog
alsa
alsa-utils
alsa-lib
音频
USB
链接文件
内存
mmap
tcpdump
交叉编译
网络
防火墙
crontab
bond
Linux性能
udev
linux
pcie
wsl2
MMIO
wsl
qemu
raspi4
gdb
ssh
tun
tap
ifconfig
打印
gmac
phy
vim
组播
rock3a
win11
usb
sd
ubuntu
iptables
netfilter
wifi
veth
ipv6
wireshark
radvd
dhcpv6
dhcpv4
网络命名空间
br虚拟网卡
NDP
emmc
存储
raspi4b
baremental
jtag
buildroot
rootfs
ext4
调试
uboot
dropbear
raspi
ebpf
uart
baremetal
kernel
bringup
libbpf
arm64
fit
gzip
压缩
initcall_debug
bootargs
I2C
代理
cmake
python3
zephyr
mcxa156
riscv
MCXA156
I3C
RPMB
tar
lzma
dns
picgo
gpt
otg
adb
fdtdump
gadget
fastboot
mdns
gcc
mailbox
ksize