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)에 있어야 하는 위치를 찾지 못했다는 점에 유의해야 합니다.

관련 정보