LinuxForum.Fans
Тема

тест ядра после сборки

Автор: gen 24 сообщений 13591 просмотров
#282463

Есть вопросы:
1) Собрать ядро просто. Но как его грамотно подрубить к GRUB(конкретней последней Ubuntu) ?
http://forum.ubuntu.ru/index.php?topic=74165.0
мне кажется ключевой тут является конфигурация

text
menuentry "Ubuntu, Linux 2.6.32-020632rc6-generic" {
        recordfail=1
        if [ -n ${have_grubenv} ]; then save_env recordfail; fi
    set quiet=1
    insmod ext2
    set root=(hd0,5)
    search --no-floppy --fs-uuid --set 0e717c2a-24bd-4abe-acfe-ecf98fc814f8
    linux    /boot/vmlinuz-2.6.32-020632rc6-generic root=UUID=0e717c2a-24bd-4abe-acfe-ecf98fc814f8 ro   quiet splash
    initrd    /boot/initrd.img-2.6.32-020632rc6-generic
}

1.1) initrd обязателен?
1.2) initrd как собрать?
2) Почему сейчас актуальные ядра уже >3 версий, а на новых дистрах линукса стоят двойки ?
3) где находится Init функция? То есть я хочу скомпилить ядро, подрубить его к грабу и запустить и чтобы после загрузки модулей всех в конце написалось HELLO WORLD! В коде ядра где эта функция(типо main). Вот например программировал для RTEMS там создаешь *.c фаил(по подобию как в семплах) и в мейках прописываешь путь, в мейке говоришь что нужно компилить это, в результате сборке появляется образ-прошивка. Тут как ?

#282466
"gen" написал:
1.1) initrd обязателен?

Нет.

#282467
"gen" написал:
1.2)  initrd    как собрать?

man mkinitrd

#282476

насчет

3)

или тут имеется ввиду что нужно модуль написать самому и включить его в список последним?

#282479
"gen" написал:
или тут имеется ввиду что нужно модуль написать самому и включить его в список последним?

Ну, что-то типа этого, но я, разумеется, не специалист, тем более, в ядерном кодинге. Да, пишете ядерный модуль, куда-нибудь в init-скрипты вписываете вызов своего модуля, он выводит Hello, world...
Ну, а насчет 2) - насколько я понимаю, наконец-то произошло разделение ядер на десктопные и серверные. Разница в подходе к тем и другим слишком велика - тут и планировщики задач нужны разные, и состав файловых систем, поддержка оборудования... да много всего.

#282484
"gen" написал:
1) Собрать ядро просто. Но как его грамотно подрубить к GRUB(конкретней последней Ubuntu) ?

в грубе 2 грамотно запустить то, что написано в /etc/default/grub. чтобы он сам его прописал

"gen" написал:
1.1)  initrd    обязателен?
1.2)  initrd    как собрать?

нет.
способы сборки есть разные... отличаются зависимостью от дистра и разной степенью применения своих прямых рук...
самый простой это сунуть всё что надо в одну папку и закатать это в cpio архив
я в общем ни разу сам не собирал за ненадобностью, так что за подробностями прошу в гугл...

"gen" написал:
2) Почему сейчас актуальные ядра уже >3 версий, а на новых дистрах линукса стоят двойки ?

новых дистрах, это каких?

"yars" написал:
Ну, а насчет 2) - насколько я понимаю, наконец-то произошло разделение ядер на десктопные и серверные. Разница в подходе к тем и другим слишком велика - тут и планировщики задач нужны разные, и состав файловых систем, поддержка оборудования... да много всего.

с номерами версий это связано чуть меньше, чем ни как... в серверных версий всегда ядра отставали по версии где-то на 6-12 порядковых номеров
всё перечисленное, кроме планировщиков, идёт модулями. планировщик выбирается при загрузке и может быть изменён. единственная сопутствующая опция, которая ЕМНИП захардкожена, это CONFIG_HZ*

"gen" написал:
3) где находится Init функция? То есть я хочу скомпилить ядро, подрубить его к грабу и запустить и чтобы после загрузки модулей всех в конце написалось HELLO WORLD! В коде ядра где эта функция(типо main). Вот например программировал для RTEMS там создаешь *.c фаил(по подобию как в семплах) и в мейках прописываешь путь, в мейке говоришь что нужно компилить это, в результате сборке появляется образ-прошивка. Тут как ?

init выполняется уже в юзерспейсе... а именно просто запускает то, что ядру передали в параметре init или же просто /bin/init
о начальной загрузке написано в толстых букварях по ядру, прошу в приклеенный раздел в шапке. от себя могу порекомендовать Бовет&Чезатти - ядро linux.
ИМХО самое разумное написать модуль... подробности есть в тех же букварях

#282486
Lupo Alberto написал:
[quote="gen"]1.1) initrd обязателен?

Нет.[/quote]
Ну Вы совсем... Привыкли там у себя в gentoo :)
Не, ну, конечно, собирайте всё :) Это - убунта. Давайте всё впихнём на все случаи жизни :) Для себя - да. Но! нужно знать все железки (хотя бы). А тогда, это уже НЕ убунта...
gen
А если просто пересобрать (ну, там выкинуть лишнее), initrd не трогать, а пусть будет... А цель махинации?

#282520
"Fat-Zer" написал:
новых дистрах, это каких?

ну например в последней вышедшей убунте, там двойка. Точно сказать не скажу, не помню.

#282522
"Fat-Zer" написал:
init выполняется уже в юзерспейсе... а именно просто запускает то, что ядру передали в параметре init или же просто /bin/init
о начальной загрузке написано в толстых букварях по ядру, прошу в приклеенный раздел в шапке. от себя могу порекомендовать Бовет&Чезатти - ядро linux.
ИМХО самое разумное написать модуль... подробности есть в тех же букварях

Ничего не понял, тему в шапке посмотрю. Хотя отыскание ответа на вопрос может затянуться)
то есть как я понимаю в /bin/init запихать прогу? Получается нужно 1 образ ОС, и образ проги самой еще. А все втолкнуть в один образ нельзя? в АРМы же люди образ как монолит наверняка грузят.

"mvt" написал:
gen
А если просто пересобрать (ну, там выкинуть лишнее),  initrd не трогать, а пусть будет... А цель махинации?

цель собрать свое ядро, написать свои мелку прогу. Потом разбираться в свойствах ядра(мне на практике больше нравится), апи и тд.
В конечном итоге куплю отладочную плату на арме(когда с начальным стартом разберусь) и считай буду писать свои прошивки для армов. Драва уже есть, свои писать не надо) жизнь малина.
Могу конечно на других ОС это сделать, например на ртемсе том же. Но вот хочу работать с линуксом и все!

#282548

gen
initrd - это минимизация самого ядра. Это- создание условий для его работы. Если Вы туда вставите всё, что необходимо для данной, конкретной конструкции - он Вам сто лет не нужен. Но это - будет Ваша железка. Можно по другому (часто применяется в слаке). Воткните в ядро всё, что теоретически может пригодится. Тогда всё будет работать и без initrd. Но. Само ядро будет больше по размеру, не?

#282552
"mvt" написал:
Само ядро будет больше по размеру, не?

Конечно. В Slackware есть ядра одной версии, но собранные по-разному: с поддержкой SMP и без нее, так называемое generic-ядро с минимальным набором необходимого для работы, требующее наличия initrd, и huge-ядро, содержащее как можно больше модулей, не требующее initrd. Последнее удобно использовать в процессе установки системы и при восстановительных работах, хотя никто не запрещает использовать это ядро и в повседневной работе. Но я себе ядро пересобрал - generic+initrd замедляет загрузку на несколько секунд, а huge - большое, в нем дофига ненужного мне :)

#282554
yars написал:
[quote="mvt"]Само ядро будет больше по размеру, не?

Конечно. В Slackware есть ядра одной версии, но собранные по-разному: с поддержкой SMP и без нее, так называемое generic-ядро с минимальным набором необходимого для работы, требующее наличия initrd, и huge-ядро, содержащее как можно больше модулей, не требующее initrd. Последнее удобно использовать в процессе установки системы и при восстановительных работах, хотя никто не запрещает использовать это ядро и в повседневной работе. Но я себе ядро пересобрал - generic+initrd замедляет загрузку на несколько секунд, а huge - большое, в нем дофига ненужного мне :)[/quote]
Вот видите. "каждому - своё". Советов здесь не может быть... Помните у Андрея: "Каждый выбирает по себе..." :)

#282556
"gen" написал:
1.1)  initrd    обязателен?

Нет, если поддержка корневой ФС вкомпилирована в ядро.

#282563
"gen" написал:
ну например в последней вышедшей убунте, там двойка. Точно сказать не скажу, не помню.

дистровотч с вами не согласен...

"gen" написал:
то есть как я понимаю в  /bin/init запихать прогу? Получается нужно 1 образ ОС, и образ проги самой еще. А все втолкнуть в один образ нельзя? в АРМы же люди образ как монолит наверняка грузят.

в кратце порядок загрузки:
0. старт загрузчика, загрузка образа ядра в память, передача ему управления.
1. собственно загрузка ядра: самоинициализация и прочие умные вещи. знать полезно и интересно, но грязными ручонками туда лучше не лезть...
2. инициализация драйверов, вкомпиленных в ядро. для каждого модуля выполняется его module_init() функция. напиши свой модуль, вкомпиль в ядро и делай что хочешь...
3. старт инита(находится в юзерспейсе). сам инит это просто программа. может находится как в инитрд так и на диске, ядру в общем то всё равно... сама функциональность инита обычно состоит в запуске скриптов инициализации.

суть в том, что 99,999% задач решаются настройкой/правкой/написанием этих самых скриптов... в редких случаях заменой init'а... и лезть куда-то в ядро совершенно не надо. Задачу при которой это понадобится придумать довольно сложно...

"gen" написал:
цель собрать свое ядро, написать свои мелку прогу.

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

"gen" написал:
В конечном итоге куплю отладочную плату на арме(когда с начальным стартом разберусь) и считай буду писать свои прошивки для армов. Драва уже есть, свои писать не надо)  жизнь малина.

это называется «собирать linux», а не «писать прошивку» =))

#282565

Fat-Zer
Так, строго говорить, между 0 и 1 - initrd. Нет? Или Вы за самодостаточное ядро?

#282567

gen
Ну да, собрали. Кажется, что не грузится. Хуже, когда когда грузится и что-то отвалилось. Ну да, было. Соберите ещё раз. Смотрите, что забыли... Фигня, выйдет :)

#282570
"Fat-Zer" написал:
дистровотч с вами не согласен...

хмм... хорошо если так. Тогда логика хоть прослеживается. Завтра уточню почему мне привиделась двойка.

ок, буду комментировать, если неправ, правьте.

"Fat-Zer" написал:
0. старт загрузчика, загрузка образа ядра в память, передача ему управления.

ну да, grub это и делает как я понимаю. Грузится в рам образ ОС и проц начинает выполнять инструкции образа ядра.

"Fat-Zer" написал:
1. собственно загрузка ядра: самоинициализация и прочие умные вещи. знать полезно и интересно, но грязными ручонками туда лучше не лезть...
2. инициализация драйверов, вкомпиленных в ядро. для каждого модуля выполняется его module_init() функция. напиши свой модуль, вкомпиль в ядро и делай что хочешь...

1 пункт скорее всего что-то типо инициализации уровней шин и девайсов наверно, хотя хз. Надо залезть будет)
2 видимо каждому уровню определен свой адрес и они начинают инициализацию своих прайвет структур наверо, ну типо описателей драйвера. С модулями все понятно. Только про юзерспейс ты раньше верно подметил. Делать свой хеллоуворлд в модуле и запускать в момент загрузки их всех, как-то не по-христиански мне кажется.

"Fat-Zer" написал:
3. старт инита(находится в юзерспейсе). сам инит это просто программа. может находится как в инитрд так и на диске, ядру в общем то всё равно... сама функциональность инита обычно состоит в запуске скриптов инициализации.

ммм. инитрд... я попутал все в предназначениях видимо. в инитрд можно получается свое юзерприложение писать? я думал он тупо для создания временной ФС,чтобы модули ядра прогрузились благополучно.

Fat-Zer, ладно спасибо. Ну то есть если я напиши мини-программу и запихну ее bin/init и в грабе для загрузки нового ядра пропишу конфиг для загрузки этого инита(пока не представляю как граб настроить так, буду читать!), то все должно заработать?

"Fat-Zer" написал:
опять же, возьми любой достаточно толстый букварь... что и как там расписано, а уж хеллоу ворлды по модулю ядра сплошь и рядом валяются...

ок понял

#282576
"mvt" написал:
Так, строго говорить, между 0 и 1 - initrd. Нет? Или Вы за самодостаточное ядро?

до (3) дочитать стоит... инитрд на/перед ним... смотря что под этим подразумевать...
боюсь соврать, но может конечно ещё загрузчик занимается загрузкой образа в память, но это уже другая история...

1 пункт скорее всего что-то типо инициализации уровней шин и девайсов наверно, хотя не знаю. Надо залезть будет)
2 видимо каждому уровню определен свой адрес и они начинают инициализацию своих прайвет структур наверо, ну типо описателей драйвера. С модулями все понятно. Только про юзерспейс ты раньше верно подметил. Делать свой хеллоуворлд в модуле и запускать в момент загрузки их всех, как-то не по-христиански мне кажется.

подробнее не буду расписывать, дабы не врать... я это из любопытства когда-то читал, так что не очень уверен в своих знаниях...

"gen" написал:
ммм. инитрд... я попутал все в предназначениях видимо. в инитрд можно получается свое юзерприложение писать? я думал он тупо для создания временной ФС,чтобы модули ядра прогрузились благополучно.

конечно можно... инитрд это простой cpio архив(возможно пожатый чем-либо), обычный образ файловой системы грубо говоря. туда можно запихнуть что угодно... обычно кроме загрузки модулей он ещё, например, инициализирует raid/lvm... да и модули ядра думаете кто думаете грузит? само ядро не такое умное, чтобы ещё и модули выбирать/грузить... там обычный(немного облегчённый) удав сидит...
[console]alexander@debian-vm:/tmp/initrd$ gzip -dc /boot/initrd.img-2.6.32-5-amd64 |cpio -i
alexander@debian-vm:/tmp/initrd$ ls
bin conf etc init lib lib64 sbin scripts
[/console]

"gen" написал:
Fat-Zer, ладно спасибо. Ну то есть если я напиши мини-программу и запихну ее bin/init и в грабе для загрузки  нового ядра пропишу конфиг для загрузки этого инита(пока не представляю как граб настроить так, буду читать!), то все должно заработать?

для начала попробуй просто дописать к опциям ядра init=/bin/bash — посмотришь на результат... (желательно, на ядре без initrd)

#282578
Fat-Zer написал:

до (3) дочитать стоит... инитрд на/перед ним... смотря что под этим подразумевать...
боюсь соврать, но может конечно ещё загрузчик занимается загрузкой образа в память, но это уже другая история...

Да не. Вот Вы тянете вторую стадию загрузчика. Да хоть, что выбрать? Какую fs? Какие драйверы? Ядро там в пустоте, пока Вы не подтянете initrd. Не, конечно всё можно встроить в ядро - всё там будет. Но этот вопрос вроде обсудили, не?

Войдите или зарегистрируйтесь, чтобы ответить.