|
initfamfs - busybox - kernel, порочный круг при сборке |
|
|
|
Dec 5 2013, 10:42
|
Знающий
   
Группа: Участник
Сообщений: 881
Регистрация: 21-03-10
Из: _// \\_
Пользователь №: 56 107

|
Вот какая загвоздка. Имеем линукс для платформы c6x, который собираем с rootfs в варианте min-root, который по сути содержит 1) busybox, 2) mtd-utils, 3) libc. При сборке с нуля возникает такая проблема. Чтобы собрать cpio образ rootfs, нужно в него положить все бинарники, то есть, в том числе, busybox, libc*.so и пр. Чтобы собрать busybox нужно иметь собранное ядро. А когда ядро собирается в конфигурации с initramfs, то конфгурационный скрипт дописывает в ($BLD)/.config строчку CONFIG_INITRAMFS_SOURCE=<путь к cpio>. Ну и вот при первой сборке никакого cpio то и нет еще. Получается порочный круг, и вообще гладко ничего собрать нельзя.
Пока что изворачивались тем, что подкладывали вначале какой-нибудь левый min-root-c6x.cpio, чтобы пройти цепочку и собрать настоящий rootfs, но это все в ручном режиме, противоречить идее make.
Может быть есть более прямой способ сборки? Например, меня бы устроил вариант, когда сначала ядро собирается само по себе, а потом отдельным таргетом к нему пришивается initramfs, и я могу управлять моментом этого пришивания - после сборки busybox, mtf-utils,... -> rootfs. Но уж как-то странно, что это надо прописывать через .config. Изменил .config, пересобирай снова все ядро...
|
|
|
|
|
 |
Ответов
|
Dec 12 2013, 21:22
|
Знающий
   
Группа: Участник
Сообщений: 881
Регистрация: 21-03-10
Из: _// \\_
Пользователь №: 56 107

|
TarbalНу и как этот текст помогает решить исходную проблему, описанную вначале темы? Напомню, с помощью CONFIG_INITRAMFS_SOURCE уже готовый архив cpio линкуется к ядру, и становится встроенным массивом данных, начиная с __initramfs_start и до __initramfs_end. Вот кусок из init/initramfs.c: Код static int __init populate_rootfs(void) { char *err = unpack_to_rootfs(__initramfs_start, __initramfs_end - __initramfs_start); Так вот, мне для тестовой системы нужен rootfs с busybox И еще кучей драйверов и софта, а make их собирается делать после сборки ядра, и возникает порочный круг. Порочный круг дает два эффекта: 1) При сборке системы с нуля оно не может собрать ядро. 2) При внесении изменений в состав rootfs они попадают в загрузочный образ ядра только со второго раза. И вот никто в двух словах не может объяснить, как это победить на уровне makefile, а не придумывать разные ручные хаки. Например, если бы можно было rootfs пришивать в конец ядра, а не влинковывать, то можно было бы делать ядро отдельно, а ядро с образом rootfs - отдельно, и проблема бы ушла, но такого, похоже, нет. Нынешние Makrefile-ы писаны людьми, которые вообще портировали линукс на платформу c6x. Я их кое где поправил, чтобы собиралось мое ядро, а не только для TI-ных EVM, но в целом они работоспособные. И я не склонен считать их "криворукими китайцами", которые не знают как должен выглядеть правильный порядок сборки ядра.
|
|
|
|
|
Dec 12 2013, 22:26
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(Hoodwin @ Dec 13 2013, 01:22)  И вот никто в двух словах не может объяснить, как это победить на уровне makefile, а не придумывать разные ручные хаки. То что вы описывали Цитата А было бы удобнее так: 1) Собрать ядро 2) Собрать BB 3) собрать прочие файлы для наполнения initramfs 4) сделать образ rootfs 5) Прилинковать образ initramfs к ядру. в нормальных системах сборки именно так и работает - что тут еще объяснять ? http://git.buildroot.net/buildroot/tree/linux/linux.mk#n172http://git.buildroot.net/buildroot/tree/fs...nitramfs.mk#n10http://git.buildroot.net/buildroot/tree/linux/linux.mk#n312"rebuild" в данном случае означает простую линковку с образом настоящей корневой вместо фейковой - полной пересборки ядра не происходит на последнем этапе. Цитата Например, если бы можно было rootfs пришивать в конец ядра, а не влинковывать и это тоже далется по щелчку пальца - вы же не читаете что вам пишут Dron_Gus: Цитата Если что-то не очень кастрированнное, то ему можно отдельно подпихнуть два образа - ядра и initramfs. А еще можно склеить их вместе с помошью mkimage. стоит погуглить mkimage multi image - куча ссылок как их создавать http://www.isysop.com/unpacking-and-repack...t-uimage-files/осталось посмотреть на параметр ядра http://lxr.free-electrons.com/source/Docum...eters.txt#L1206и что произойдет если вместо рамдиска ядро обнаружит там initramfs http://lxr.free-electrons.com/source/Docum...tramfs.txt#L217Цитата И я не склонен считать их "криворукими китайцами", которые не знают как должен выглядеть правильный порядок сборки ядра. Чтобы правильно сделать - это же думать надо, а они делают "лишь бы что-то работало". Видел я техасовские SDK для их давинчей, ерунда полная - набор кривых make-файлов, такое ощущение что их писали школьники - настолько примитивно сделано.
Сообщение отредактировал sasamy - Dec 12 2013, 23:29
|
|
|
|
Сообщений в этой теме
Hoodwin initfamfs - busybox - kernel Dec 5 2013, 10:42 Dron_Gus Зачем busybox'у собранное ядро? Dec 5 2013, 14:27 Hoodwin Вот это еще одна загадка, на которую я пока не име... Dec 5 2013, 15:37 sasamy Цитата(Hoodwin @ Dec 5 2013, 14:42) Может... Dec 5 2013, 18:55 Hoodwin 1) Вообще то там чаще индусы попадаются
2) makefi... Dec 5 2013, 19:38 sasamy Цитата(Hoodwin @ Dec 5 2013, 23:38) 3) Кр... Dec 5 2013, 19:50 Hoodwin Ну, допустим. Тогда объясните на пальцах, как прав... Dec 5 2013, 20:07 sasamy Цитата(Hoodwin @ Dec 6 2013, 00:07) Ну, д... Dec 5 2013, 20:27 Tarbal Цитата(Hoodwin @ Dec 6 2013, 00:07) Ну, д... Dec 12 2013, 13:45 Hoodwin Ну не выходит то, что при сборке с нуля ядра со вс... Dec 5 2013, 20:45 sasamy Цитата(Hoodwin @ Dec 6 2013, 00:45) Вы мн... Dec 5 2013, 20:53 Hoodwin Так вот засада то в том, что для линковки ядра с н... Dec 5 2013, 21:03 sasamy Цитата(Hoodwin @ Dec 6 2013, 01:03) Так в... Dec 5 2013, 21:14 Dron_Gus Что у Вас за загрузчик? Если что-то не очень кастр... Dec 6 2013, 07:44 Hoodwin U-Boot 2012.04.01 (Feb 07 2013 - 18:10:09) Dec 6 2013, 09:09 Dron_Gus Цитата(Hoodwin @ Dec 6 2013, 13:09) U-Boo... Dec 6 2013, 14:56 krux почитайте
http://www.linuxfromscratch.org/lfs/vie... Dec 6 2013, 17:37 Hoodwin ну то, что это самодельный дистрибутив, оно понятн... Dec 6 2013, 19:46 Hoodwin Есть у меня такая книжка. Правда издания 2006 года... Dec 12 2013, 14:37 Tarbal Цитата(Hoodwin @ Dec 12 2013, 18:37) Есть... Dec 12 2013, 20:26 Hoodwin sasamy
1) У меня проблема в том, что образ ядра г... Dec 13 2013, 06:02 sasamy Цитата(Hoodwin @ Dec 13 2013, 10:02) 1) У... Dec 13 2013, 07:01 Hoodwin sasamy
ЦитатаУ вас проблема со чтением
Цитата
ini... Dec 13 2013, 09:45 sasamy ЦитатаКонкретно про filename прочитал тут:
с наск... Dec 13 2013, 10:23 Dron_Gus Цитата(Hoodwin @ Dec 13 2013, 13:45) Я не... Dec 16 2013, 07:01 Hoodwin Да проверю, конечно. Просто сейчас текучки много, ... Dec 16 2013, 12:08 Dron_Gus Цитата(Hoodwin @ Dec 16 2013, 16:08) Да п... Dec 18 2013, 06:53 Hoodwin А, ну я там подписал в комментарии "бред... Dec 19 2013, 07:57 Hoodwin Вот я смотрю в своем ядре (2.6.34), тэги для рамди... Dec 19 2013, 17:00 Dron_Gus Вполне может быть, что и не прижилось. Я работаю в... Dec 20 2013, 09:30 Hoodwin Ладно, пока решил перенести код с армов, там вполн... Dec 20 2013, 12:42
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|