LINUX.ORG.RU

Библиотечные файлы в initrd.img


0

1

Здравствуйте!
Есть загрузочная флешка linux с ядром 3.10.12 и файлом initrd.img, сделанная так, чтобы постоянная файловая система не монтировалась, а работа велась в initrd, который крутится в оперативной памяти.
Файл initrd.img создавался давно (два-три года назад) для ядра версии 2.6.32.48.
В этом RAM диске есть папка /lib со следующим содержанием:

modules
ld-linux.so.2
libc.so.6
libdl.so.2     
libm-2.11.1.so  
libpthread-2.11.1.so  
librt-2.11.1.so  
libz.so.1        
libc-2.11.1.so 
libdl-2.11.1.so  
libgcc_s.so.1  
libm.so.6      
libpthread.so.0       
librt.so.1       
libz.so.1.2.3.3

В папку /lib/modules я устанавливаю модули своего нового ядра 3.10.12, а остальные библиотечные файлы лежат тут давно, с момента создания этого initrd.
Если эти файлы убрать из initrd, то я получаю kernel panic. Если оставить - то система запускается
Объясните мне пожалуйста, что это за библиотечные файлы в папке /lib, файла initrd.img? Имеют ли они отношение к конкретному ядру, или универсальны? Если они относятся к конкретному ядру, то где мне их взять после компиляции? Самостоятельный поиск в интернете результата не дал.
Заранее спасибо!

Эти файлы не имеют отношения к ядру, это именно библиотеки, необходимые для работы программ, которые находятся в initrd.

Обычно в initrd собирается минималистичное окружение на базу busybox, прежде чем задавать вопрос что такое busybox почитайте об этом в Internet, предоставляющее функционал для поиска и монтирования корневой файловой системы, возможно ещё некоторых действий, но в любом случае не для постоянной работы. Компоненты busybox предоставляют минимально необходимый функционал.

Но т.к. у вас в initrd, насколько я понимаю реальная рабочая система, а не просто прослойка для монтирования корня, то в /lib помещены необходимые библиотеки, а именно libc (glibc), реализация языка C и прочие библиотеки, имеющие к ней отношений и необходимые для работы программ в вашей initrd системе.

kostik87 ★★★★★
()
Ответ на: комментарий от UVV

Не знаю, использовался ли он для создания этого initrd, но это вполне вероятно, т.к. все делается для встраиваемого одноплатного компьютера

just_a_student
() автор топика
Ответ на: комментарий от just_a_student

Либо он, либо другой toolkit использовался. Если система работает, то зачем тебе их обновлять тогда?

UVV ★★★★★
()
Ответ на: комментарий от kostik87

Да, там busybox стоит.
Я просто думал, что busybox, содержит в себе сразу все что нужно для своей работы, включая библиотеки.
А почему тогда kernel panic возникает? Busybox ведь не критичная программа для работы ядра

just_a_student
() автор топика
Ответ на: комментарий от just_a_student

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

А если у вас используются и программы, функционал которых не предоставляет busybox и эти программы не собраны статически, то им нужны эти библиотеки, libc уж точно.

Ну а ошибка возникает, потому, что «падает» процесс с pid 0.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от UVV

Ну не все работает так как надо. Если конкретно: то попытка подключить модуль ядра с помощь insmod завершается ошибкой:

insmod: can't insert 'module.ko': Operation not permitted
При том что я разрешил подключение модулей при сборке. Думал что в этом проблема может быть

just_a_student
() автор топика
Ответ на: комментарий от kostik87

Самописный. Но не мной, а опытным программистом. На аналогичной системе со старым ядром 2.6.32.48 точно работал. Это драйвер
Но он был написан и скомпилирован тогда же, когда был создан этот initrd (года три назад). Возможно причина в несовместимости?
Просто insmod ругается так, будто ему в принципе запрещено загружать модули

just_a_student
() автор топика
Ответ на: комментарий от just_a_student

Та же самая ошибка будет возвращена, если при инициализации модуля будет возвращён не нулевой код ошибки.

А так, что же вы хотите, конечно со времён 2.6.32.48 много что поменялось, а вы хотите использовать модуль 3 годичной давности, если не больше на новом ядре.

Обращайтесь опять к опытному программисту, пусть он вносит правки в модуль. Ну либо сами разбирайтесь как включить отладку в ядре и смотрите какие возникают проблемы при инициализации модуля, затем правьте код модуля и собирайте его заново. Вы хоть модуль пересобрали под новое ядро или просто скопировали ?

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Скопировал. Думал что не так критична совместимость от версии к версии. Стыдно :)
Спасибо вам большое! Буду перекомпилировать и разбираться

just_a_student
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.