#1 27.10.2012 17:08:19

gen
Administrator
Зарегистрирован: 21.02.2010
Сообщений: 221
IP-адрес

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

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

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 фаил(по подобию как в семплах) и в мейках прописываешь путь, в мейке говоришь что нужно компилить это, в результате сборке появляется образ-прошивка. Тут как ?

#2 27.10.2012 17:14:56

Lupo Alberto
Administrator
Зарегистрирован: 04.07.2010
Сообщений: 11 183
IP-адрес

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

Quote by gen
1.1) initrd обязателен?

Нет.

#3 27.10.2012 17:17:52

yars
Administrator
Зарегистрирован: 23.03.2012
Сообщений: 9 369
IP-адрес

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

Quote by gen
1.2)  initrd    как собрать?

man mkinitrd

#4 27.10.2012 18:30:45

gen
Administrator
Зарегистрирован: 21.02.2010
Сообщений: 221
IP-адрес

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

насчет

3)

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

#5 27.10.2012 18:43:54

yars
Administrator
Зарегистрирован: 23.03.2012
Сообщений: 9 369
IP-адрес

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

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

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

#6 27.10.2012 19:37:46

Fat-Zer
Administrator
Зарегистрирован: 14.10.2010
Сообщений: 4 977
IP-адрес

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

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

в грубе 2 грамотно запустить то, что написано в /etc/default/grub. чтобы он сам его прописал
Quote by gen
1.1)  initrd    обязателен?
1.2)  initrd    как собрать?

нет.
способы сборки есть разные... отличаются зависимостью от дистра и разной степенью применения своих прямых рук...
самый простой это сунуть всё что надо в одну папку и закатать это в cpio архив
я в общем ни разу сам не собирал за ненадобностью, так что за подробностями прошу в гугл...
Quote by gen
2) Почему сейчас актуальные ядра уже >3 версий, а на новых дистрах линукса стоят двойки ?

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

с номерами версий это связано чуть меньше, чем ни как... в серверных версий всегда ядра отставали по версии где-то на 6-12 порядковых номеров
всё перечисленное, кроме планировщиков, идёт модулями. планировщик выбирается при загрузке и может быть изменён. единственная сопутствующая опция, которая ЕМНИП захардкожена, это CONFIG_HZ*
Quote by gen
3) где находится Init функция? То есть я хочу скомпилить ядро, подрубить его к грабу и запустить и чтобы после загрузки модулей всех в конце написалось HELLO WORLD! В коде ядра где эта функция(типо main). Вот например программировал для RTEMS там создаешь *.c фаил(по подобию как в семплах) и в мейках прописываешь путь, в мейке говоришь что нужно компилить это, в результате сборке появляется образ-прошивка. Тут как ?

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

#7 27.10.2012 19:53:37

mvt
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 6 467
IP-адрес

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

Quote by gen
1.1) initrd обязателен?

Нет.

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

#8 28.10.2012 05:34:09

gen
Administrator
Зарегистрирован: 21.02.2010
Сообщений: 221
IP-адрес

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

Quote by Fat-Zer
новых дистрах, это каких?

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

#9 28.10.2012 05:44:07

gen
Administrator
Зарегистрирован: 21.02.2010
Сообщений: 221
IP-адрес

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

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


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

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


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

#10 28.10.2012 07:06:23

Lupo Alberto
Administrator
Зарегистрирован: 04.07.2010
Сообщений: 11 183
IP-адрес

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

Возможно, вы уже читали, но мало ли, вдруг пригодится — http://www.ibm.com/developerworks/ru/library/l-linux_kernel_01/index.html
P.S. Это первая статья цикла статей «Разработка модулей ядра Linux», там их несколько десятков.

#11 28.10.2012 08:48:41

mvt
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 6 467
IP-адрес

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

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

#12 28.10.2012 09:05:34

yars
Administrator
Зарегистрирован: 23.03.2012
Сообщений: 9 369
IP-адрес

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

Quote by mvt
Само ядро будет больше по размеру, не?

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

#13 28.10.2012 09:09:41

mvt
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 6 467
IP-адрес

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

Quote by mvt
Само ядро будет больше по размеру, не?

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

Вот видите. "каждому - своё". Советов здесь не может быть... Помните у Андрея: "Каждый выбирает по себе..." :)

#14 28.10.2012 09:22:40

Wehrmacht_Rover
Administrator
Зарегистрирован: 17.08.2012
Сообщений: 282
IP-адрес

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

Quote by gen
1.1)  initrd    обязателен?

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

#15 28.10.2012 10:17:11

Fat-Zer
Administrator
Зарегистрирован: 14.10.2010
Сообщений: 4 977
IP-адрес

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

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

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

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

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

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

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

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

#16 28.10.2012 10:21:59

mvt
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 6 467
IP-адрес

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

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

#17 28.10.2012 10:30:37

mvt
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 6 467
IP-адрес

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

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

#18 28.10.2012 10:44:01

gen
Administrator
Зарегистрирован: 21.02.2010
Сообщений: 221
IP-адрес

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

Quote by Fat-Zer
дистровотч с вами не согласен...

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

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

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

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

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

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


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

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

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

ок понял

#19 28.10.2012 11:44:14

Fat-Zer
Administrator
Зарегистрирован: 14.10.2010
Сообщений: 4 977
IP-адрес

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

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

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

подробнее не буду расписывать, дабы не врать... я это из любопытства когда-то читал, так что не очень уверен в своих знаниях...
Quote by 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]

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

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

#20 28.10.2012 12:02:37

mvt
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 6 467
IP-адрес

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


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

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

#21 03.11.2012 11:21:35

gen
Administrator
Зарегистрирован: 21.02.2010
Сообщений: 221
IP-адрес

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

все я понял. Короче в исходниках ядра папка init в ней main.c его рефакторить надо. Короче разобраться как свой загрузчик сделать еще, типа граба, тока с 1 функций загрузки ядра.
Блин, код вот сложный в ядре. Типо вот такого:

It is useful when implementing generic data structures in C. For example, the Linux kernel uses offsetof() to implement container_of(), which allows something like a mixin type to find the structure that contains it:[4]

#define container_of(ptr, type, member) ({ \
                const typeof( ((type *)0)->member ) *__mptr = (ptr); \
                (type *)( (char *)__mptr - offsetof(type,member) );})


Надо курить мануалы, которые на английском, то есть еще курить английский надо...

#22 03.11.2012 14:48:03

raven_cler
Administrator
Зарегистрирован: 10.01.2012
Сообщений: 263
IP-адрес

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

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

Что-то путаете. Даже в консервативной Slackware уже 3.2.7.
Quote by gen
1) Собрать ядро просто. Но как его грамотно подрубить к GRUB(конкретней последней Ubuntu) ?

Пример подключения ядра без initrd:
menuentry 'Funtoo' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-1e9d36d3-5418-46ee-bd97-b6a02b4f7ae6' {
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    linux /funtoo root=/dev/sda6 ro quiet ro vga = normal vt.default_utf8=1
}
Quote by gen
1.1) initrd обязателен?

Нет, если файловая система корневого раздела, и, ЕМНИП, драйвер харда подключены монолитно.
Quote by gen
ммм. инитрд... я попутал все в предназначениях видимо. в инитрд можно получается свое юзерприложение писать?

Можно. Обычно только busybox и insmod кладут вроде бы, но что-либо ещё тоже не возбраняется.
Quote by gen
1.2) initrd как собрать?

Тыц. http://www.opennet.ru/base/sys/initrd_intro.txt.html,

#23 03.11.2012 14:50:12

yars
Administrator
Зарегистрирован: 23.03.2012
Сообщений: 9 369
IP-адрес

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

Quote by raven_cler
Даже в консервативной Slackware уже 3.2.7.

3.2.29, вы хотели сказать?

#24 03.11.2012 15:37:53

raven_cler
Administrator
Зарегистрирован: 10.01.2012
Сообщений: 263
IP-адрес

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

Quote by yars
3.2.29, вы хотели сказать?
Тьху, спутал. Да, 3.2.29.

Board footer