ramfs ロードアドレス

ramfs ロードアドレス

SAMA5D27 SOM1 評価キットと一緒に initramfs を実行するのに少し問題があります。私は完全な機能を備えたinitramfsを持っています。まず、SDのファイルシステムで使用するときにLinuxが動作することを確認しました。

次のbootcmdを使用しました。

=> fatload mmc 0:1 0x24000000 uramdisk.img; fatload mmc 0:1 0x22000000 zImage; fatload mmc 0:1 0x21000000 board.dtb; bootz 0x22000000 0x24000000 0x21000000;"

その後、次のようにinitramfsを作成しようとしました。 initramfs用のカーネルを設定しました。

CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE="/media/sdc/at91/tmp/at91/initramfs.cpio"
CONFIG_RD_GZIP=y
CONFIG_RD_BZIP2=y
CONFIG_RD_LZMA=y
CONFIG_RD_XZ=y
CONFIG_RD_LZO=y
CONFIG_RD_LZ4=y

ramfsの作成:rootfsでcdし、次の操作を行います。

仮想ディスクを作成します。

# sudo find . | sudo cpio -H newc -o | gzip > ../uramdisk.cpio.gz
# mkimage -A arm -O linux -T ramdisk  -n "Label you want" -d ./ramdisk.img ./uramdisk.img

起動パラメータを変更します。

setenv bootcmd_boot2 "fatload mmc 0:1 0x23000000 uramdisk.img; fatload mmc 0:1 0x22000000 zImage; fatload mmc 0:1 0x21000000 board.dtb; bootz 0x22000000 0x24000000 0x21000000;"
setenv bootargs "console=ttyS0,115200 atmel.pm_modes=standby,ulp1"

それでも次のようになります。

  => boot
51725888 bytes read in 3093 ms (15.9 MiB/s)
3903560 bytes read in 243 ms (15.3 MiB/s)
26651 bytes read in 14 ms (1.8 MiB/s)
## Loading init Ramdisk from Legacy Image at 24000000 ...
   Image Name:   Label you want
   Image Type:   ARM Linux RAMDisk Image (uncompressed)
   Data Size:    51725824 Bytes = 49.3 MiB
   Load Address: 24000000
   Entry Point:  24000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 21000000
   Booting using the fdt blob at 0x21000000
   Loading Ramdisk to 24a00000, end 27b54600 ... OK
   Loading Device Tree to 249f6000, end 249ff81a ... OK

Starting kernel ...

Booting Linux on physical CPU 0x0
Linux version 4.7.10+ (user@user-VirtualBox) (gcc version 6.4.0 (Buildroot 2018.02-00001-g3ef3174) ) #6 Wed Nov 7 12:20:42 CST 2018
CPU: ARMv7 Processor [410fc051] revision 1 (ARMv7), cr=10c53c7d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine model: Atmel SAMA5D27 SOM1 EK
Memory policy: Data cache writeback
CPU: All CPU(s) started in SVC mode.
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 32512
Kernel command line: console=ttyS0,115200  atmel.pm_modes=standby,ulp1
PID hash table entries: 512 (order: -1, 2048 bytes)
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 69684K/131072K available (6298K kernel code, 183K rwdata, 1716K rodata, 1024K init, 147K bss, 61388K reserved, 0K cma-reserved)
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
    vmalloc : 0xc8800000 - 0xff800000   ( 880 MB)
    lowmem  : 0xc0000000 - 0xc8000000   ( 128 MB)
    modules : 0xbf000000 - 0xc0000000   (  16 MB)
      .text : 0xc0008000 - 0xc08d3a18   (9007 kB)
      .init : 0xc0900000 - 0xc0a00000   (1024 kB)
      .data : 0xc0a00000 - 0xc0a2dc20   ( 184 kB)
       .bss : 0xc0a2dc20 - 0xc0a52948   ( 148 kB)
...
mmcblk0: mmc0:0007 SS08G 7.21 GiB
 mmcblk0: p1 p2
**RAMDISK: Couldn't find valid RAM disk image starting at 0.
VFS: Cannot open root device "(null)" or unknown-block(0,0): error -6**
Please append a correct "root=" boot option; here are the available partitions:
0100            8536 ram0  (driver?)
b300         7563264 mmcblk0  driver: mmcblk
  b301          131072 mmcblk0p1 00070105-01
  b302          131072 mmcblk0p2 00070105-02
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
CPU: 0 PID: 1 Comm: swapper Not tainted 4.7.10+ #6
Hardware name: Atmel SAMA5
[<c010cb3c>] (unwind_backtrace) from [<c010a640>] (show_stack+0x10/0x14)
[<c010a640>] (show_stack) from [<c0165920>] (panic+0xc4/0x244)
[<c0165920>] (panic) from [<c09011c8>] (mount_block_root+0x1b0/0x280)
[<c09011c8>] (mount_block_root) from [<c09014a4>] (mount_root+0x120/0x128)
[<c09014a4>] (mount_root) from [<c0901628>] (prepare_namespace+0x17c/0x1c4)
[<c0901628>] (prepare_namespace) from [<c0900df0>] (kernel_init_freeable+0x1b0/0x1c0)
[<c0900df0>] (kernel_init_freeable) from [<c06354e4>] (kernel_init+0x8/0x110)
[<c06354e4>] (kernel_init) from [<c0107498>] (ret_from_fork+0x14/0x3c)
---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
random: nonblocking pool is initialized

128MByteのメモリ(1Gb)のみがあります。圧縮されていない場合でも、u-bootがロードするアドレスと同じramfsのロードアドレスを使用できないのでしょうか?

答え1

確かに確認する価値があるのは、ramfsのロードアドレスです。 zImageに部分的に過負荷がかかったようです。

カーネルサイズは25859560バイト= 0x018A 95E8です。 0x22000000でロードされ、0x238A 95E8で終了するため、ramfs AD 0x23000000のロードと重なります。

あなたのボードについてもっと知らない場合は、0x24000000でramdistをロードしようとしています。

答え2

解決策は次のとおりです。

  1. bootargsにroot = / dev / ramを追加する必要があります。
  2. cpioを生成するrootfsはinit(/ initに)を追加する必要があります。

(2)に関して、initが「/init」(通常/ sbin / init)にあるべき場所が見つからなかったことに注意してください。

関連情報