hi3518ev200 从sd卡启动rootfs

板卡为 hisi 的 hi3518ev200,16M RAM,64M Flash。板卡不支持从SD卡启动,但是由于Flash空间有限,很多应用都放不下,因此考虑把 rootfs 放到 SD 卡中。先从 Flash 中启动 kernel,然后再加载 SD 卡中的 rootfs。

1. 准备rootfs

由于需要从sd卡中加载 rootfs,因此需要把我们编译生成的rootfs下载到sd卡中。这里我们使用 ext4 文件系统。

将sd卡通过读卡器接入到PC上,这里接入后,出来的分区设备是 /dev/sdc1,先将其格式化为 ext4:

umount /dev/sdc1
sudo mke2fs -t ext4 -F -L "rootfs" /dev/sdc1

格式化完成后,挂载分区,然后把编译的跟文件系统复制到这个分区中即可:

mkdir /tmp/rootfs
sudo mount /dev/sdc1 /tmp/rootfs
tar -xvf /media/linuxdata/workspace/buildroot-2022.02.8/output/images/rootfs.tar -C /tmp/rootfs/
umount /dev/sdc1

拔下sd卡,将其插到板卡上。

2. 挂载rootfs

由于默认uboot不支持emmc sd卡驱动,因此,无法从sd卡中加载kernel。所以先从 Flash 中加载 kernel,先将 kernel 和 initrd 加载 RAM中,然后运行kernel,kernel启动后,会先挂载 initrd 为初始的/,然后进行一系列的初始化后,再挂载真正的 rootfs。默认是从 Flash 中去挂载这个 rootfs,bootargs 参数为 setenv bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),3M(kernel),12M(rootfs)'

这里需要将root参数修改为如下:

set bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mmcblk0p1 rw rootwait'

完整的参数如下:

set bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 init=/linuxrc'

我这里只要加了下面的参数(blkdevparts),就会报错导致挂载失败:

set bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 init=/linuxrc blkdevparts=mmcblk0:-(rootfs.ext4)'

失败报错如下:

mmc1: error -84 whilst initialising SD card
usb 1-1.2: new high-speed USB device number 4 using hiusb-ehci
mmc1: new high speed SDHC card at address 5048
mmcblk0: mmc1:5048 SD32G 29.7 GiB
 mmcblk0: p1(rootfs)
List of all partitions:
b300        31178752 mmcblk0  driver: mmcblk
  b301        31178752 mmcblk0p1 00000000-0000-0000-0000-000000000000
No filesystem could mount root, tried:  ext4
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,1)

那么,使用上面最简单的参数就可以了。

保存,然后启动:

sa
sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000

挂载成功:

mmc1: error -84 whilst initialising SD card
usb 1-1.2: new high-speed USB device number 4 using hiusb-ehci
mmc1: new high speed SDHC card at address 5048
mmcblk0: mmc1:5048 SD32G 29.7 GiB
 mmcblk0: p1
EXT4-fs (mmcblk0p1): warning: mounting fs with errors, running e2fsck is recommended
EXT4-fs (mmcblk0p1): recovery complete
EXT4-fs (mmcblk0p1): mounted filesystem with writeback data mode. Opts: (null)
VFS: Mounted root (ext4 filesystem) on device 179:1.
devtmpfs: mounted
Freeing init memory: 148K
EXT4-fs (mmcblk0p1): re-mounted. Opts: (null)
devpts: called with bogus options
Starting syslogd: OK
Starting watchdogd: OK
Starting klogd: OK
Running sysctl: OK
Starting mdev... OK
Initializing random number generator: OK
Saving random seed: OK
Starting iptables: OK
Starting network: OK
Starting dhcpcd...
dhcpcd-9.4.1 starting
sandbox unavailable: seccomp
DUID 00:01:00:01:c7:92:bc:85:00:00:00:00:00:00
sandbox unavailable: seccomp
forked to background, child pid 592
ADDRCONF(NETDEV_UP): eth0: link is not ready

启动成功,sd卡是一张32G的内存卡:

# df -hT
Filesystem           Type            Size      Used Available Use% Mounted on
/dev/root            ext4           29.0G    187.5M     27.3G   1% /
devtmpfs             devtmpfs       28.7M         0     28.7M   0% /dev
tmpfs                tmpfs          28.8M         0     28.8M   0% /dev/shm
tmpfs                tmpfs          28.8M     36.0K     28.8M   0% /tmp
tmpfs                tmpfs          28.8M     32.0K     28.8M   0% /run
#

你可能感兴趣的:(Linux系统,linux)