Привет всем!Вот тут какая штука в моём Debian : когда я компилировал ядро 2.4.18 то оно
спокойно запускалось без поддержки всяких RAM дисков Compresed ROM`ов и initrd и всё было чудесно...
...но как только я закачал ядро 2.6.8 и откомпилировал, то после переза
грузки возникла ошибка типа:
VFS: Cannot open root device "301" or unknown-block(3,1)
в итоге выяснилось что по умолчанию в .config размер RAM диска 4096 кбайт а
размер initrd после выполнения mkinitrd 4126 кбайт, в итоге просто не
хватало места для загрузки образа... потом исправил я на 8192 - всё пошло,
но теперь останавливается на том что там проблемы с монтированием devfs и корневой файловой системы... пошарился по мануалкам, нашол initrd.txt -
почитал - с трудом понимаю зачем вобще придумали initrd вобще...Можэт хто знает - подскажите как жэ мне всётаки избавится от загрузи
с initrd а сделать так как это было в 2.4.8. Можэт там и есть какаято выгода при загрузке системы но я пытаюсь собрать систему на сервак который
практически никогда не выключается... и не хочу использовать готовое ядро
потому шо там подключается много лишних модулей...Заранее благодарю за помощь!
Система не запускается т.к. не все нужные устройства включены в конфиге ядра.
Скорей всего initd тут не при чем.
Вообще наверно всетаки есть смысл использовать именно готовое ядро, входящее в состав дебиана, а "ненужные модули" во первых можно запретить грузить, а во вторых они занимают всего несколько десятков килобайт как правило.
Initd нужно чтобы динамически подгружать нужные для старта системы модули. Например если модули находятся на оборудовании, драйверы к которому скомпилированы как модули и не включены в состав самого ядра. Все драйверы в ядро включать-будет жрать память и размер его будет "хороший".
>Система не запускается т.к. не все нужные устройства включены в конфиге ядра.
>
>Скорей всего initd тут не при чем.
>Вообще наверно всетаки есть смысл использовать именно готовое ядро, входящее в состав
>дебиана, а "ненужные модули" во первых можно запретить грузить, а во
>вторых они занимают всего несколько десятков килобайт как правило.
>Initd нужно чтобы динамически подгружать нужные для старта системы модули. Например если
>модули находятся на оборудовании, драйверы к которому скомпилированы как модули и
>не включены в состав самого ядра. Все драйверы в ядро включать-будет
>жрать память и размер его будет "хороший".а как запретить грузить модули которые скомпилированы в ядро типа agpgart, scsi (у мя IDE), и всякое такое...
... кстати я пробовал компилировать с исходным .config, там прописан конфиг ядра которое у меня работало после установки с диска. Результат тот жє самый... как я понял из initrd.txt из доков по ядру, этот ИНИТРД нада настраивать ещё какимто способом...
>... кстати я пробовал компилировать с исходным .config, там прописан конфиг ядра
>которое у меня работало после установки с диска. Результат тот жє
>самый... как я понял из initrd.txt из доков по ядру, этот
>ИНИТРД нада настраивать ещё какимто способом...Нужно упаковать образ инитд для того чтобы работало ядро.
Вообще смотри ман, я не помню.
Я не специалист в линухе, но для тех кто в танке -
1. передать в загрузчике для инитрд инфу о рутовой партиции: append="root=/dev/{ДИСК}"
2. чтобы вырубить инитрд я просто не прописывал в загрузчике строчку initrd=/... и на удивление ядро не возражает и грузится нормально.Вроде это все есть в манах, но если я не прав, то пусть товарищи линухоиды меня поправят.
я, конечно, благодарю Вас за советы, по крайней мере понимаеш шо хто нибудь в конце концов да поможет :)... но вот шо я вам скажу: чё я тока не пробовал
и прописывал initrd= и не прописывал
и делал mkinitrd -o /boot/initrd.img, initrd=/boot/initrd.img и не делал
и писал append = "root=/dev/hda1"и не писал
... я за этим делом двое суток не спал :/потом понял шо причина в размере рам-диска: было 4096К а нада >4126К. Исправил - пошло, но до определённого момента инициализации рутовой ФС.
по этому я словил себя на мысли что я не хочу использовать ИНИТРДвычитал в конце концов шо есть такая штука как append = "noinitrd"
вроди должно было помочь, но всё было без изменений...потом я ужэ начал извращацца и полез в исходники...
залез в /usr/src/kernel-source-2.6.8/init/do_mounts_initrd.c
и нашол там вот это: static int __initdata mount_initrd = 1;заменил его на static int __initdata mount_initrd = 0;
перекомпилил ядро и... всё заработало :)
... я не знаю можэт у меня в системе изначально шото не то но результат
был только после этого. Вот такие вот дилы. Щяс вроди всё намана.