Перейти к содержанию
    

Здравствуйте. Есть древняя плата на Arria V. Rootfs лежит в ОЗУ (initrd). Понадобилось добавить в ФС несколько пакетов

1. Распаковал ФС

2. Установил пакеты

3. Решил, заодно, перейти на Initramfs

4. Упаковал ФС (ниже кусок скрипта)

find $DISK | cpio -H newc -o | gzip -9 > tmp.cpio.gz 
mkimage -A arm -T ramdisk -C gzip -d tmp.cpio.gz initramfs-ext4.gz.uBoot
rm tmp.cpio.gz

5. В переменных окружения u-boot поменял только название полученного Initramfs файла.

При загрузке ФС поймал  Kernel panic

 

вот загрузка 

CPU   : Altera SOCFPGA Platform
BOARD : Altera SOCFPGA Arria V Board
I2C:   ready
DRAM:  1 GiB
MMC:   ALTERA DWMMC: 0
In:    serial
Out:   serial
Err:   serial
Net:   mii0
Hit any key to stop autoboot:  0
8462974 bytes read in 503 ms (16 MiB/s)
## Starting application at 0x3FF795C8 ...
## Application terminated, rc = 0x0
3851416 bytes read in 248 ms (14.8 MiB/s)
20293 bytes read in 20 ms (990.2 KiB/s)
41077938 bytes read in 2472 ms (15.8 MiB/s)
## Booting kernel from Legacy Image at 00007fc0 ...
   Image Name:   Linux-3.18.0
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3851352 Bytes = 3.7 MiB
   Load Address: 00008000
   Entry Point:  00008000
## Loading init Ramdisk from Legacy Image at 05000000 ...
   Image Name:   Rootfs ext4 ramdisk for ARM
   Image Type:   ARM Linux RAMDisk Image (gzip compressed)
   Data Size:    41077874 Bytes = 39.2 MiB
   Load Address: 00000000
   Entry Point:  00000000
## Flattened Device Tree blob at 00000100
   Booting using the fdt blob at 0x00000100
   XIP Kernel Image ... OK
OK
   reserving fdt memory region: addr=0 size=1000
   Loading Ramdisk to 0d8d3000, end 0ffffc72 ... OK
   Loading Device Tree to 03ff8000, end 03ffff44 ... OK

Здесь попытка запуска ФС

[    4.318812] NET: Registered protocol family 29
[    4.323254] can: raw protocol (rev 20120528)
[    4.327508] can: broadcast manager protocol (rev 20120528 t)
[    4.333158] can: netlink gateway (rev 20130117) max_hops=1
[    4.338803] 8021q: 802.1Q VLAN Support v1.8
[    4.343025] Key type dns_resolver registered
[    4.347341] ThumbEE CPU extension supported.
[    4.351615] Registering SWP/SWPB emulation handler
[    4.356497] dwc2 ffb40000.usb: Overcurrent change detected
[    4.362478] List of all partitions:
[    4.365962] b300        62521344 mmcblk0  driver: mmcblk
[    4.371312]   b301            1024 mmcblk0p1 d4e1deed-01
[    4.376612]   b302          131072 mmcblk0p2 d4e1deed-02
[    4.381938]   b303          131072 mmcblk0p3 d4e1deed-03
[    4.387237]   b304        62257152 mmcblk0p4 d4e1deed-04
[    4.392555] No filesystem could mount root, tried:  ext3 ext2 ext4 vfat ntfs
[    4.399636] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)
[    4.407864] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.18.0 #11
[    4.413868] [<c0016bac>] (unwind_backtrace) from [<c0012bf8>] (show_stack+0x20/0x24)
[    4.421586] [<c0012bf8>] (show_stack) from [<c0542aa4>] (dump_stack+0x90/0xa0)
[    4.428781] [<c0542aa4>] (dump_stack) from [<c0540b4c>] (panic+0xb0/0x210)
[    4.435629] [<c0540b4c>] (panic) from [<c074b394>] (mount_block_root+0x22c/0x240)
[    4.443080] [<c074b394>] (mount_block_root) from [<c074b5a4>] (mount_root+0x110/0x118)
[    4.450963] [<c074b5a4>] (mount_root) from [<c074b744>] (prepare_namespace+0x198/0x1dc)
[    4.458941] [<c074b744>] (prepare_namespace) from [<c074af58>] (kernel_init_freeable+0x250/0x260)
[    4.467776] [<c074af58>] (kernel_init_freeable) from [<c053f964>] (kernel_init+0x1c/0xf8)
[    4.475920] [<c053f964>] (kernel_init) from [<c000ecf8>] (ret_from_fork+0x14/0x20)

В чем может быть дело ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну, что, коллеги ? Есть идеи ? ) Или может кто поделится живим образом файловой системы для Arm32 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 19.08.2022 в 14:26, карамболь сказал:

В чем может быть дело ?

Не может смонтировать корневую файловую систему (rootfs). Далее читайте по ссылке https://unix.stackexchange.com/questions/414655/not-syncing-vfs-unable-to-mount-root-fs-on-unknown-block0-0 и гуглите на тему "VFS: Unable to mount root fs on unknown-block"

39 минут назад, карамболь сказал:

Ну, что, коллеги ? Есть идеи ? ) Или может кто поделится живим образом файловой системы для Arm32 ?

Идея одна: последовательно и пошагово разбираться в проблеме. Готовый образ вам не подойдёт, т.к. непонятно что у вас за ядро (конфигурация), что за система и т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

возможно что в ядре вкомпилена поддержка только initrd но не initramfs.

надо смотреть детально конфиг ядра.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 19.08.2022 в 14:26, карамболь сказал:
dwc2 ffb40000.usb: Overcurrent change detected

Ещё мне не нравится вот эта строчка из протокола загрузки. По-моему такого быть не должно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

31 minutes ago, krux said:

возможно что в ядре вкомпилена поддержка только initrd но не initramfs.

надо смотреть детально конфиг ядра.

а как эту опцию включить ? 

5 minutes ago, makc said:

Ещё мне не нравится вот эта строчка из протокола загрузки. По-моему такого быть не должно.

при нормальной загрузке с помощью initrd тоже такая строка. Работе не мешает. Плата старая, работает, как часы во множестве устройств

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 8/22/2022 at 11:01 AM, карамболь said:

а как эту опцию включить ? 

пересобрать ядро, предварительно скорректировав конфиг

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, krux said:

пересобрать ядро, предварительно скорректировав конфиг

CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=2
CONFIG_BLK_DEV_RAM_SIZE=8192

есть еще CONFIG_BLK_DEV_INITRD

CONFIG_BLK_DEV_INITRD  у меня в ядре не включено, при этом initrd грузится. Странно. Проблема в том, что изначально систему собирал другой человек

а, нет. Обманул. Включена CONFIG_BLK_DEV_INITRD  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 8/19/2022 at 2:26 PM, карамболь said:

-C gzip

"-C none" должно быть, т.е. образ не скомпрессированный, но содержит пожатый cpio.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

24 minutes ago, aaarrr said:

"-C none" должно быть, т.е. образ не скомпрессированный, но содержит пожатый cpio.

странно... я этим скриптом собираю Initramfs для ARM64 (ZynqUS) и это работает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

подсунул рабочий образ от 64-х разрядной FS

Starting init: /bin/sh exists but couldn't execute it (error -8)
[    7.207338] Kernel panic - not syncing: No working init found.  Try passing init= option to kernel.

 

Т.е. проблема, по все видимости, именно в сборке rootfs. С загрузчиком и ядром, скорее всего, проблем нет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

30 minutes ago, aaarrr said:

В случае initramfs не монтируется devtmpfs автоматом. Возможно, в этом дело.

насколько я понял, особой разницы, с точки зрения загрузчика и ядра нет между initramfs и Initrd. Ядро как то само понимает с чем имеет дело, а загрузчик просто копирует образ по конкретному адресу и передает управление ядру, указывая, где лежит Рутфс и dtb

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 minutes ago, карамболь said:

насколько я понял, особой разницы, с точки зрения загрузчика и ядра нет между initramfs и Initrd

С точки зрения ядра - есть. Специально посмотрел, когда-то наступил на те же грабли. Решением было добавление /init с таким содержимым:

!/bin/sh
# devtmpfs does not get automounted for initramfs
/bin/mount -t devtmpfs devtmpfs /dev
exec 0</dev/console
exec 1>/dev/console
exec 2>/dev/console
exec /sbin/init "$@"

и /dev/console (mknod /dev/console c 5 1)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, aaarrr said:

С точки зрения ядра - есть. Специально посмотрел, когда-то наступил на те же грабли. Решением было добавление /init с таким содержимым:

!/bin/sh
# devtmpfs does not get automounted for initramfs
/bin/mount -t devtmpfs devtmpfs /dev
exec 0</dev/console
exec 1>/dev/console
exec 2>/dev/console
exec /sbin/init "$@"

и /dev/console (mknod /dev/console c 5 1)

так у меня даже до вызова init не доходит

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...