LINUX.ORG.RU

Конфигурация ядра

 ,


4

0

Добрый день. В сентябре впервые установил дженту. Разумеется ядро собирал с помощью инструмента genkernel all. Хочу пересобрать ядро для своей конфигурации ПК. Поэтому прошу накидать по этой теме материaл для обучения, кроме вики дженту. Желательно на русском. Спасибо за любую помощь.


genkernel --menuconfig

А что по поводу опций - тут подсказать не могу - слишком их много. То руководство, по которому я учился их выбирать - слишком уж устарело http://www.unix-lab.org/posts/kernel-v3/

Самый правильный способ - долго и нудно читать справку в menuconfig о каждой опции и решать, нужна она или нет.

BattleCoder ★★★★★
()

make localyesconfig или localmodconfig

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

anonymous
()

При текущей конфигурации заставь работать все нужные устройства(это нужно что бы корректно подгрузились модули), далее сделай make localyesconfig. Так ты получишь готовый конфиг для твоего устройства. Потом доконфигурь с помощью make nconfig/menuconfig.

Способ далеко не самый лучший, но работает на 100%.

exepush
()

genkernel all - значит собрать ядро, модули и initrd. А не собрать ядро со всеми включенными опциями.

cli
()

Заходишь в /usr/src/linux (это симлинк, проверь с помощью ls -l), или в каталог конкретной версии сорцов ядра в /usr/src.

Далее можешь запустить make menuconfig (есть и другие интерактивные фронтенды для конфигурирования).

Далее тебе понадобится включить набор драйверов под твою платформу, в этом тебе поможет lspci -k, а также поиск строк в make menuconfig по хоткею «/».

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

На самом деле, чтобы получить минимально загружаемое и юзабельное ядро, в стандартном конфиге обычно надо изменить лишь около десятка строчек. Вот пример тех параметров, которые я изменяю в своем ядре https://gitlab.com/chaser/kernel-configs/tree/andromeda

За genkernel не расскажу, я отдельно собираю ядро, и отдельно с помощью dracut - initramfs.

Chaser_Andrey ★★★★★
()

1. Забекапь куда-то текущий конфиг. Распакуй ядро (если ты его скачал). Убедись, что симлинк /usr/src/linux указывает на твое новое ядро, которое ты конфигуришь - это нужно некоторым программам, например, драйверам.

2.

$ make defconfig
$ make menuconfig


3. Установи local version. Например '-v01'. Это чтоб ты мог делать несколько версий конфигурации (при одной версии ядра) и они не конфликтовали друг с другом.

4. Ходишь по пунктам и меняешь следуя правилам:
a) только включай; ничего не отключай, ничего не оптимизируй. Оптимизировать будешь только когда все заработает.
б) включай только если точно знаешь что тебе это нужно и знаешь как проверить работоспособность этого после перезагрузки.
в) Включай вкомпиливая в ядро (не модулем). На самом деле там есть какие-то исключения, по-моему звуковуха и/или I2C. После перезагрузки проверишь, если не работает - сделай модулем

5. Начни с того, что установи нужную архитектуру (32/64) и правильный процессор

6. lspci, lsusb в помощь. Там проходишь по устройствам, смотришь чтобы были включены соотв. модули. Если сомневаешься - вбивай устройство (с чипом) в google, дописывай «Linux» и ищи какой модуль нужен.

7. По видео, аудио, i2c - обязательно прочитай gentoo wiki.

8. Обязательно вкомпилить (не модулем) файловую систему корня (и boot, если ты по какоим-то соображениям вынес на отдельную партицию). Притом не включай дополнительные фичи этой фс в ядре: там чтобы их включить, нужно соотв. сделать tune2fs, подправить fstab. Короче, оно тебе пока не надо.

9. Обязательно включи Magic SysRq key. Это Ctrl+Sjift+SysRq+.... Надеюсь, ты про это знаешь.

10. Остальное - смотришь по wiki. Если не знаешь что смотреть - расслабься, оно тебе не нужно.

11.
$ make bzImage modules
$ make modules_install install

12. Поправь соотв. образом конфиг загрузчика, перегрузись, загрузись с новым ядром.

13. Может понадобиться перекомпилить модули ядра, которые устанавливал отдельно от ядра. Самое частое - драйвер видяхи. После этого перегрузись (можно, конечно, modprobe, но, пока не почувствуешь уверенность - перегрузись)

14. С помощью lsmod и lspci -k проверяешь что все нужные модули подгузились. Но так много не проверишь, проще реально посмотреть все ли работает.

15. Парсишь лог на предмет ошибок и варнингов, по желанию устраняешь. В И-нете все гуглится.

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

Зачем? Достаточно просто make же.

Хм. Не знал. Всегда так делал.
Век живи век учись

Kroz ★★★★★
()

Спасибо всем за наводки! Еще такой вопрос интересует. Можно ли поэксперементировать с сабжем в виртуалке? В какой виртуалке это можно сделать.

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

и отдельно с помощью dracut - initramfs.

а зачем он нужен-то почти в 2016 году, если раздел не зашифрован и не черти-где?

kep
()

virtualbox

Решил поэкспериментировать в виртуальной коробке. И тут началась неразбериха с версией ядра у меня в системе. Коробка упорно не хотела ставиться из-за того что не было симлинка на ядро, а так же ругалась на отсутствия файла .config в /usr/src/linux.

eselect kernel list

Available kernel symlink targets:
  [1]   linux-4.1.12-gentoo

вижу что ничего не выбрано, далее

uname -r

4.0.5-gentoo

Порылся на формах и пришел к выводу, что когда устанавливал новое ядро, ссылка на ядро не установилась. Решил пересобрать ядро с флагом symlink. Запустил сборку ядра genkernel all.

После этого ссылка на ядро установилась и .config появился где надо. Коробка так же установилась, но появилась новая проблема с коробкой :(

Kernel driver not installed (rc=-1908)

The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing

'/sbin/vboxconfig'

as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.

where: suplibOsInit what: 3 VERR_VM_DRIVER_NOT_INSTALLED (-1908) - The support driver is not installed. On linux, open returned ENOENT. 

Пытаюсь подгрузить необходимые модули, но не удается.

modprobe vboxdrv
modprobe: FATAL: Module vboxdrv not found.

eselect kernel list

Available kernel symlink targets:
  [1]   linux-4.1.12-gentoo *

uname -r

4.0.5-gentoo

Подскажите что тут не так?

lukman
() автор топика
Ответ на: virtualbox от lukman

1. симлинк можно было поставить, не пересобирая пакет. Это /usr/src/kernel-version -> /usr/src/linux
2. после пересборки ядра надо пересобирать модули
emerge -pv @module-rebuild
подразумевается, что нужно собрать virtualbox-modules
3. новое ядро собрано, но загружено старое, перед загрузкой модуля надо сделать рестарт

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

Решил проблему. Спасибо.

root #grub2-mkconfig -o /boot/grub/grub.cfg

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