реклама на сайте
подробности

 
 
> initfamfs - busybox - kernel, порочный круг при сборке
Hoodwin
сообщение Dec 5 2013, 10:42
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 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, пересобирай снова все ядро...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Hoodwin
сообщение Dec 12 2013, 21:22
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 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, но в целом они работоспособные. И я не склонен считать их "криворукими китайцами", которые не знают как должен выглядеть правильный порядок сборки ядра.
Go to the top of the page
 
+Quote Post
sasamy
сообщение Dec 12 2013, 22:26
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 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#n172
http://git.buildroot.net/buildroot/tree/fs...nitramfs.mk#n10
http://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
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 22:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01514 секунд с 7
ELECTRONIX ©2004-2016