DEBIAN попытка загрузки с CF на ARM-девайсе

12345

Доброй ночи, товарищи-линуксоиды!
Я установил DEBIAN на свой гаджет на базе процессора ARM. Гаджет имеет CF и SD-слот.
Ситуация следующая.
Когда я передаю загрузчику(HARET) параметр root=/dev/mmcblk ( SD-карта) всё загружается, а с /dev/hda ( CF-карта) нет.
По логу видно, что не находится устройство /dev/hda до момента монтирования каталога "/", и загрузка прекращается.
После полной загрузки системы устройство /dev/hda ядром определяется, но только после того, как произошло монтирование "/".
Как обойти этот баг, заставить загрузчик монтировать "/" после определения всех устройств?

Anturag

По логу видно, что не находится устройство /dev/hda до момента монтирования каталога "/"

Ядерный модуль CF лежит на rootfs, но не в ядре и не в initrd?

12345

Ядерный модуль CF лежит на rootfs, но не в ядре и не в initrd?
Ядро лежит вообще на другом разделе FAT и передается загрузчику.
initrd вообще не передаётся, т.к. этому загрузчику он по всей видимости не нужен.

Anturag

Не про ядро, а про модуль ядра спрашиваю. Если ядро дебиановское родное, то навряд ли в нём самом будет модуль твоего CF контроллера.

yolki

+1.
Ядру нужен драйвер для CF.
драйвер (модуль) либо должен быть в initrd либо вкомпилен в ядро.
загрузись с SD, посмотри какие модули загружены, посмотри что в initrd

12345

Не про ядро, а про модуль ядра спрашиваю. Если ядро дебиановское родное, то навряд ли в нём самом будет модуль твоего CF контроллера.
Но почему тогда в нём есть модули от SD-контроллера?
Модули лежат в rootfs на CF, но lsmod выдаёт малый список загруженных модулей (bluetooth, драйвер тачскина, звука , wi-fi и ipv6 т.е. получается основная часть встроена в ядро(включая драйвер CF).
initrd вообще не используется, конкретно /initrd пустой.

Plok2008

initrd вообще не используется, конкретно /initrd пустой.
initrd может находиться и в другом месте. Посмотри в параметрах загрузчика, что передаётся ядру. Может и в `cat /proc/cmdline` есть упоминание об initrd, но точно в этом не уверен.

conv3rsje

initrd вообще не используется, конкретно /initrd пустой.
если грузишься haret'ом то у тебя и ядро и инитрд скорее всего лежат снаружи от rootfs'а
там и смотри
ну и проверь в конфиге ядра что там включено, а что - нет
конфиг обычно где-то недалеко от ядра должен лежать

12345

если грузишься haret'ом то у тебя и ядро и инитрд скорее всего лежат снаружи от rootfs'а
там и смотри
ну и проверь в конфиге ядра что там включено, а что - нет
конфиг обычно где-то недалеко от ядра должен лежать
Естественно ядро лежит на другом разделе и передаётся haret-у, включая точку монтирования рутовой системы.

conv3rsje

Какое ядро? Стандартное debian-arm'овское или самодельное?
Вроде в дебовском должен быть initrd...
То что загрузчику initrd "не нужен", совсем не значит, что он не нужен системе.

12345

Какое ядро? Стандартное debian-arm'овское или самодельное?
Самодельное естественно.
Система же грузится без него, следовательно initrd не нужен.

yolki

покажи содержимое startup.txt от Haret-а
Я правильно понимаю, что при загрузке с SD-карты CF-слот работает и видится?
карточка видится в слоте? как отформатирована карта?
покажи таблицу разделов с обеих карт (SD и CF например так (это моя SD, к слову):

# fdisk /dev/sdd

Команда (m для справки): p

Диск /dev/sdd: 8017 МБ, 8017412096 байт
247 heads, 62 sectors/track, 1022 cylinders, всего 15659008 секторов
Units = секторы of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x01da9875

Устр-во Загр Начало Конец Блоки Id Система
/dev/sdd1 * 2048 4196351 2097152 6 FAT16
/dev/sdd2 4196352 15659007 5731328 83 Linux

Загрузившись с SD покажи lsmod, lsusb, dmesg, если есть что-то интересное - то и /var/log/messages покажи
покажи /proc/cmdline при загрузке с SD

12345

покажи содержимое startup.txt от Haret-а
# more /vfat/startup.txt 
set kernel "zImage"
set mtype "617"
set RAMADDR "0xa8000000"
set cmdline "mem=128M rootdelay=1 root=254:2 rw console=tty0"
boot

Я правильно понимаю, что при загрузке с SD-карты CF-слот работает и видится?
карточка видится в слоте? как отформатирована карта?
покажи таблицу разделов с обеих карт (SD и CF например так (это моя SD, к слову):
 # fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 2002 MB, 2002255872 bytes
255 heads, 63 sectors/track, 243 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x001122c7

Device Boot Start End Blocks Id System
/dev/mmcblk0p1 1 70 562243+ b W95 FAT32
/dev/mmcblk0p2 71 243 1389622+ 83 Linux

 # fdisk -l /dev/hda

Disk /dev/hda: 4009 MB, 4009549824 bytes
16 heads, 63 sectors/track, 7769 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Disk identifier: 0x90909090

Device Boot Start End Blocks Id System
/dev/hda1 1 3884 1957504+ b W95 FAT32
/dev/hda2 3885 7769 1958040 83 Linux

Загрузившись с SD покажи lsmod, lsusb, dmesg, если есть что-то интересное - то и /var/log/messages покажи
# lsmod
Module Size Used by
rfcomm 35484 0
l2cap 20644 5 rfcomm
bluetooth 49476 4 rfcomm,l2cap
ipv6 242588 12
ts_adc 5924 0
acx 185296 1

# lsusb
Bus 001 Device 001: ID 0000:0000

покажи /proc/cmdline при загрузке с SD
# ls /proc/cmdline 
/proc/cmdline

-переименовать в txt

Anturag

Отлично.
Теперь телепатически возможно выяснить, что ядро недебиановское, а с loox720.admitech.pl
Про /proc/cmdline порадовал, спасибо :)
Замени cmdline в загрузчике на
 set cmdline "mem=128M rootdelay=3 root=/dev/hda2 rw console=tty0"

rootwait в 2.6.21 ещё не было, хм.

12345

Замени cmdline в загрузчике на
Уже пробовал и 10 и 100 ставить и все возможные комбинации с rootdelay и root - не помогло.
Тут проблема в чём-то другом.
Конкретно, при загрузке определяется pcmcia, mmsblk, далее распознаются разделы на SD-карте, но не определяется hda.
hda определяется только после того как rootfs будет примонтирован на этапе загрузки.

tokuchu

set cmdline "mem=128M rootdelay=1 root=254:2 rw console=tty0"
А чего у тебя тут девайс указан не по имени, а числами? Может hda2 тоже надо числами попробовать написать?

12345

А чего у тебя тут девайс указан не по имени, а числами? Может hda2 тоже надо числами попробовать написать?
Да я пробовал уже как в разных мануалах написано, конкретно root=3:2 - один фиг не может примонтиролвать "/".

Anturag

Уже пробовал и 10 и 100 ставить и все возможные комбинации с rootdelay и root - не помогло.

Скорее всего, тебе с твоим ядром не получится сделать, то что хочешь. Оно у тебя очень старое, и с тех пор было достаточно много изменений в ide-cs.
Проблема у тебя в том, что в твоей некрофильской версии ядра probe IDE'шных портов не происходит из ide-cs сразу же, а только после монтирования rootfs:

...
VFS: Mounted root (reiserfs filesystem).
Freeing init memory: 96K
Probing IDE interface ide0...
...

Пофикшено в 2.6.27 через использование ide_port_scan в idecs_register.
На сегодняшний день ide-cs никто не использует, а используют pata_pcmcia.

yolki

нужно было cat /proc/cmdline :)
а так, всё по делу сказали ;)

12345

Скорее всего, тебе с твоим ядром не получится сделать, то что хочешь. Оно у тебя очень старое, и с тех пор было достаточно много изменений в ide-cs
Пофикшено в 2.6.27 через использование ide_port_scan в idecs_register.
На сегодняшний день ide-cs никто не использует, а используют pata_pcmcia.
Я правильно понимаю, что мне поможет только сборка нового ядра не старее 2.6.27?
В интернете наткнулся на ту же проблему с флешками Transcend с обеими драйверами но для ядра 2.26.20, поможет ли мне этот патч или этот для второго драйвера?
Я так понимаю, что проблема касается определённых видов CF. Может проще будет вообще флешку поменять на Кингстон какой-нибудь

Anturag

 
Я правильно понимаю, что мне поможет только сборка нового ядра не старее 2.6.27?
Всё несколько сложнее.
Я не выкачивал ядро, которое ты компилировал, так как поляки-затейники положили его в svn, я на такие извращения не готов. Поэтому я не могу с уверенностью сказать, в каком состоянии ide-cs.c в твоём ядре, но мне кажется, что нужно "дотягивание" минимум до коммита 792a1a98560a2, который в 2.6.26-rc6.
Уверен, что тянуть придётся не один этот файл, а ещё и ide-probe.c и другие, так что лёгкое напряжение тут обеспечено.
Правильный путь, а именно перетянуть изменения поляков по поддержке loox на современное ядро, будет явно дольше. Как минимум mach-* часть, считай, надо будет переписывать заново, а если у них ещё и кривые наколеночные дрова, то развлечение затянется надолго. Но развлечение это, впрочем, находит себе любителей :)
Я так понимаю, что проблема касается определённых видов CF.

Это не имеет отношения к проблеме, которую обсуждаем.
Оставить комментарий
Имя или ник:
Комментарий: