Hi3559av100平台,制作EXT4文件系统在EMMC存储设备上启动,发现EXT4文件系统挂载成功后执行init文件linuxrc失败,分析原因如下:
错误打印
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
mmc0: SDHCI controller on 100f0000.eMMC [100f0000.eMMC] using ADMA 64-bit in legacy mode
mmc1: SDHCI controller on 10100000.SD [10100000.SD] using ADMA 64-bit in legacy mode
mmc0: CMDQ supported: depth: 32
mmc0: new HS400 Enhanced strobe MMC card at address 0001
mmc0: -524: cmdq: unable to set-up
mmc2: SDHCI controller on 10110000.SD [10110000.SD] using ADMA 64-bit in legacy mode
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
NET: Registered protocol family 10
mmcblk0: mmc0:0001 008G30 7.28 GiB
mmcblk0boot0: mmc0:0001 008G30 partition 1 4.00 MiB
mmcblk0boot1: mmc0:0001 008G30 partition 2 4.00 MiB
mmcblk0rpmb: mmc0:0001 008G30 partition 3 4.00 MiB
mmcblk0: p1(boot) p2(kernel) p3(rootfs) p4(user)
NET: Registered protocol family 17
hibvt_rtc 180b0000.rtc: setting system clock to 1970-01-01 00:05:15 UTC (315)
clk: Not disabling unused clocks
EXT4-fs (mmcblk0p3): recovery complete
EXT4-fs (mmcblk0p3): mounted filesystem with ordered data mode. Opts: (null)
VFS: Mounted root (ext4 filesystem) on device 179:3.
Freeing unused kernel memory: 320K (ffffffc004820000 - ffffffc004870000)
Kernel panic - not syncing: Requested init /linuxrc failed (error -13).
CPU: 2 PID: 1 Comm: swapper/0 Not tainted 4.9.37 #1
Hardware name: Hisilicon HI3559AV100 DEMO Board (DT)
Call trace:
[<ffffff80080880d8>] dump_backtrace+0x0/0x1d0
[<ffffff80080883b4>] show_stack+0x14/0x20
[<ffffff8008338bcc>] dump_stack+0x94/0xb8
[<ffffff800811d9d0>] panic+0x130/0x280
[<ffffff80086508f8>] kernel_init+0xa0/0x100
[<ffffff8008082ee0>] ret_from_fork+0x10/0x30
SMP: stopping secondary CPUs
Kernel Offset: disabled
Memory Limit: 512 MB
---[ end Kernel panic - not syncing: Requested init /linuxrc failed (error -13).
制作命令
make_ext4fs -s -l ${ROOTFS_SIZE} -a system rootfs.img rootfs
猜测可能是库文件没有执行权限,挂载ext4文件系统到本地查看库文件权限:
simg2img rootfs.img rootfs.ext4
mkdir a
sudo mount -o loop rootfs.ext4 a
logread@logread:hissys$ ls a/lib -l
total 120
-rw-r--r-- 1 root root 120616 Sep 9 2019 ld-2.24.so
lrw-r--r-- 1 root root 10 Sep 9 2019 ld-linux-aarch64.so.1 -> ld-2.24.so
果然是库没有了执行权限,猜测是命令使用错误,发现参数使用错误:
logread@logread:hissys$ make_ext4fs
Expected filename after options
make_ext4fs [ -l <len> ] [ -j <journal size> ] [ -b <block_size> ]
[ -g <blocks per group> ] [ -i <inodes> ] [ -I <inode size> ]
[ -L <label> ] [ -f ] [ -a <android mountpoint> ]
[ -S file_contexts ] [ -C fs_config ] [ -T timestamp ]
[ -z | -s ] [ -w ] [ -c ] [ -J ] [ -o ] [ -v ] [ -B <block_list_file> ]
<filename> [<directory>]
-make_ext4fs -s -l ${ROOTFS_SIZE} -a system rootfs.img rootfs
+make_ext4fs -s -l ${ROOTFS_SIZE} -L rootfs rootfs.img rootfs
错把-a当作-L使用的问题,修改后库权限正确打印如下:
logread@logread:hissys$ ls a/lib -l
total 120
-rwxr-xr-x 1 root root 120616 Sep 9 2019 ld-2.24.so
lrwxrwxrwx 1 root root 10 Sep 9 2019 ld-linux-aarch64.so.1 -> ld-2.24.so
logread@logread:hissys$ ls a/lib64 -l
total 7108
-rwxr-xr-x 1 root root 14728 Sep 9 2019 libanl-2.24.so
lrwxrwxrwx 1 root root 14 Jun 6 2019 libanl.so.1 -> libanl-2.24.so