LINUX.ORG.RU

модули или ядро впервую очередь?

 


0

3

кто как и где пишет. вобщем решил спросить лучше тех кто знает, то есть Вас.

что вперед надо компилить ядро или модули? что вперед устанавливать ядро или модули? где -то пишут что модули в наши дни вообще не надо компилить отдельной командой

make modules
говорят, что когда
make -j
то модули уже скомпилятся. кто-то пишет, что надо
make -j
make modules
make install
make modules_install
кто -то пишет, что нет, надо:
make -j
make modules
make modules_install
make install
другие:
make modules
make -j
make modules_install
make install

скажите как правильно... но пожалуйста аргументируйте


Ответ на: комментарий от anonymous

извините, у меня нет деслексии, так выходит когда быстро набираю

anonymous
()
Ответ на: комментарий от linuxpc

скоро на LORe ядро никто не собирет

Зачем собирать ядро? Что это даёт?

i-rinat ★★★★★
()
Ответ на: комментарий от linuxpc

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

anonymous
()

Для начала, давай узнаем, какой у тебя дистрибутив Linux. Допустим это Ubuntu Linux.

Когда компилятор компилирует что-нибудь, он использует системные библиотеки. Они находятся в /usr/lib. Часть библиотек находится просто в /lib, это самые основные библиотеки ОС. Ты можешь зайти в эту директорию и посмотреть на них. Например libjpeg.so.62. Что означает .so? Это расширение, дающее понять, что это - файл библиотеки. То же самое, что и .dll в ОС Windows. Но что же это за .62 такое?

В операционную систему может быть установлено две libjpeg. Например версия .62 и .8. Между двумя этими версиями была сломана совместимость (изменился так называемый ABI). Поэтому часть программ использует одну библиотеку, а часть - другую.

Так вот. Рядом с файлом libjpeg.so.62 находится файл libjpeg.so. Этот файл является символьной ссылкой на файл libjpeg.so.62. А вернее, на одну из этих библиотек: .8 или .62. Когда компилятор компилирует какую-нибудь программу, эта ссылка помогает ему понять, какую именно библиотеку использовать.

Вот только файлов с расширением .so без числа после него, в Ubuntu нет по умолчанию. Сразу после установки, эти файлы отсутствуют. Чтобы они появились, нужно установить пакет libjpeg-dev. В этом пакете находится эта символьная ссылка, а также заголовочные файлы /usr/include/что-нибудь. Без них компиляция тоже работать не будет.

И вот знаешь, таких пакетов -dev существует много. И если ты собираешься что-нибудь компилировать, то их надо установить.

Моей первой скомпилированной программой была Pidgin. Я скачал исходный код, выполнил команду ./configure, и узнал, что в моей системе нет libpurple. Я удивился, так как эта библиотека в моей системе была (и предыдущая версия Pidgin, установленная в систему, ей пользовалась). Тогда я установил пакет libpurple-dev, и компиляция пошла дальше. Однако в процессе компиляции было много ошибок. Например «не найдена библиотека libpng», хотя, как ты уже догадался, она была в системе. Тогда я установил libpng-dev. И так было 10 раз, с 10 пакетами, пока всё наконец-то не скомпилировалось.

Оказывается, этого можно было избежать, если выполнить в консоли это: sudo apt-get build-dep pidgin. Эта команда устанавливает все библиотеки-зависимости для сборки pidgin, а также, если по какой-то причине не установлен компилятор, то также устанавливает и его. г В твоём случае, надо выполнить команду sudo apt-get build-dep linux-image. Я могу написать название пакета с ошибкой, так что проверь меня, поищи, как называется пакет с ядром, например в менеджере пакетов Synaptic.

Также должен быть включен этот репозиторий: https://askubuntu.com/questions/158871/how-do-i-enable-the-source-code-reposi...

Также, когда ты выполняешь команды apt-get, то САМА ПРОГРАММА даёт подсказки. Например «эти зависимости больше не используются, и поэтому их можно удалить».

ZenitharChampion ★★★★★
()
Последнее исправление: ZenitharChampion (всего исправлений: 2)
Ответ на: комментарий от anonymous

Патчи на ядро опять же, последнее время количество патчей сократилось к минимуму. UKMS там и всё такое.

anonymous
()

Когда зависимости для сборки ядра будут установлены, давай приступим собственно к компиляции ядра.

Я уже увидел, что ты скачал исходные коды ядра Linux версии 5.0.7. Скопируй их в директорию /usr/src:

cd Загрузки
sudo mv linux-5.0.7.tar.xz /usr/src

Как ты видишь, я использовал команду «переместить» вместо команды «копировать» (cp). Просто у меня на жёстком диске осталось мало места, и поэтому иметь 70 мегабайт в папке с загрузками я не хочу. Кстати, для компилирования ядра должно быть много свободного места. Например 2 гигабайта, но лучше больше.

Давай распакуем архив с исходными кодами ядра:

sudo tar xf linux-5.0.7.tar.xz

Мы используем sudo перед вводом команды, потому что в директорию /usr/src запрещена запись пользователю, но разрешена администратору. Это можно поправить командой chown. А ещё я хочу сказать, что, когда ты пишешь длинные названия файлов, то в консоли есть возможность автодополнения. Просто нажми на клавишу Tab, и название файла будет дописано само. Например, если ты уже написал первые две буквы. А если файлов, начинающихся так же, в папке (директории) несколько, то ничего не произойдёт. На второе нажатие, нам покажут варианты.

Теперь давай зайдём в эту папку (директорию):

cd linux-5.0.7

Нам выше советовали выполнить команду make mrproper. Я никогда её не запускал, но давай доверимся умным людям выше, и выполним её.

Теперь нам надо создать файл настроек. Лучше всего это делать, взяв за основу старый файл настроек:

zcat /proc/config.gz > .config

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

cp /proc/config.gz . 
gzip -d config.gz 
mv config .config

В общем, старый файл настроек (конфигурационный файл) скопирован куда нужно. Теперь можно выполнить команду make oldconfig, которая проверит старый файл настроек, и задаст пользователю вопросы. Например вопрос «Слушай, пользователь. Тут появилась новая возможность в ядре. Включать?».

Команда make oldconfig сложная. Зададут много вопросов, при помощи клавиши / (рядом с правым шифтом, на ней ещё нарисован знак вопроса) можно получить справку по пункту, который ты будешь включать или выключать.

Вопросов очень много. И поэтому на пятидесятом я психанул, и просто оставил всё по умолчанию. Зажал клавишу Enter, чтобы включать только рекомендуемые варианты ответов.

Когда конфигурационный файл ядра будет готов, ты можешь сделать его резервную копию:

cp .config /home/username/config-5.0.7

Также ты можешь выполнить команду make menuconfig, чтобы изменить настройки при помощи псевдографического интерфейса. Если команда не сработала, доустанови пакет libncurses5-dev.

Наконец, можно начать компилирование ядра Linux. Это делается командой make. Если ты запустишь диспетчер задач (или выполнишь команду top, которая является диспетчером задач для командной строки), то ты можешь увидеть, что для компиляции используется только одно ядро процессора. Чтобы использовать два, нужно запускать make с параметром -j2. Рекомендуется использовать количество потоков, равное количеству ядер процессора, плюс один. Например, если ядра два, то make -j3. Но это лишь в общем случае. Для некоторых процессоров, оптимальнее другое значение. Например у меня - процессор Intel с технологией Hyper Threading. 2 физических ядра, 4 виртуальных ядра. При компиляции, нужно указывать -j2, а не -j4. То есть, количество реальных ядер.

Когда всё будет скомпилировано, нужно выполнить команду make modules_install install (опять же, с sudo). Файлы нового ядра будут установлены в /boot и /lib/modules.

Теперь нужно отредактировать файл /boot/grub2/grub.cfg, чтобы добавить туда новый пункт загрузки - новое ядро. Старое удалять пока не надо - вдруг новое ядро не загрузится, вдруг что-нибудь пойдёт не так?

А когда всё будет работать, как надо, то в директории /usr/src нужно сделать символьную ссылку /sur/src/linux, которая ведёт в директорию с новыми исходными кодами ядра:

cd /usr/src
ln -s linux-5.0.7 linux

В противном случае, не удастся установка проприетарного драйвера NVIDIA.

Если будет ошибка «Файл существует», то значит, ещё остался файл символьной ссылки, ведущей на исходные коды ядра старой версии. Убедиться в этом можно, выполнив команду file linux.

 file linux
linux: symbolic link to `linux-4.4.7-ubuntu'

Просто удаляем этот файл командой rm. rm linux. И создаём новый.

ZenitharChampion ★★★★★
()
Последнее исправление: ZenitharChampion (всего исправлений: 3)

говорят, что когда

make -j
то модули уже скомпилятся

тебе нагло пи**ят. -jx это количество потоков в которое ты собрался компилять.

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

это я понимаю... дело в том, что пишут,что make, когда его запускаешь в сборке ядра, уже скомпилит ядро и модули. поэтому не надо делать make modules. так пишут.

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

Не в курсе как в других дистрах, в генте я до сих пор заставляю компилить модули руками)

 
make install modules_install

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

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

fakeroot make-kpkg -j 5 --initrd --append-to-version=-custom kernel_image kernel_headers
надо включить заголовки ядра . я честно не понял, можно ли использовать dpkg вместо kpkg. можно? будет работать? как вообще прочитать это строку?fakeroot make-kpkg -j 5 --initrd --append-to-version=-custom kernel_image kernel_headers

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

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

linuxpc
() автор топика
Последнее исправление: linuxpc (всего исправлений: 1)
Ответ на: комментарий от linuxpc

Да, компилятся они сами. А инсталятся уже руками. А то я тебя тут с просонья в заблуждение ввожу)

Сначала я компилирую ядро с модулями (make), а уже только потом устанавливаю их в систему (make install modules_install)

xaTa ★★★
()
Ответ на: комментарий от xaTa
fakeroot make-kpkg -j 5 --initrd --append-to-version=-custom kernel_image kernel_headers

я под рутом. думаю что fakeroot не нужен .так? можете сказать что делает строка написанная выше? можно ли использовать dpkg вместо kpkg? что --custom , что делает эта команда?

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

Почитай документацию: https://wiki.debian.org/ru/Make-Kpkg

make-kpkg - это инструмент сборки deb пакетов с ядром в Debian.

Если тебе нужно просто ядро собрать, то эта команда не нужна, а если deb пакет с ядром, модулями и отдельно linux-headers, то нужна.

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

Собирать ядро можно и одной командой make -jN, но может возникнуть необходимость собрать только ядро или собрать только модули, а точнее, допустим ты собрал ядро и модули, но забыл собрать ещё один нужный модуль, если все его зависимости включены, то можно заново запустить конфигуратор ядра, включить нужную опцию и затем выполнить:

make modules
make modules_install
и модуль будет дособран.

anonymous
()

make -j
make install
make modules_install

Всё. Откуда ты взял make modules - совершенно не ясно.

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

Если делать

make bzImage
make modules

Сходи в гугл и почитай.

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

не работает без загаловок ядра. даже предупреджение при компиляции ядра выскакивает об этом. в документации и написанно fakeroot make-kpkg -j 5 --initrd --append-to-version=-custom kernel_image kernel_headers

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

не работает без загаловок ядра. даже предупреджение при компиляции ядра выскакивает об этом.

Ять, какое предупреждение?

Ты понимаешь, что linux-headers-версия-ядра - это лишь файлы «выдранные» из директории, в которой происходила сборка ядра. И они тебе нужны только для сборки сторонних модулей, например модуля Nvidia.

Поэтому у тебя /lib/modules/версия_ядра/build указывает на /usr/src/linux-headers-версия_ядра. Т.е. это символьная ссылка.

Есть другие linux-headers - общие файлы, находящиеся в /usr/include, но это тоже часть исходных кодов ядра. Они нужны для сборки прочих программ.

Так про какие linux-headers ты говоришь?

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

linux-headers видимо про них. я еще не разобрался толком. поэтому спрашиваю. факт то что ядро собранное make -j6 не будет стартовать, а будет жаловаться warning .... на то что заголовки ядра не будут найдены. я поэтому тут вас неделю прошу объяснить что к чему. вы же устроили массово балаган.

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

включать монолитом или модулем усмысле?
зависит от цели
легкое ядро - отдельно. чтоы везде грузилось- жирным монолитом

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

ну раз уж в Debian разбираетесь,то подскажите make-kpkg kernel_image можно заменить на make-dpkg kernel_image. может где и давали ответ, но я пропустил.

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

Ну dpkg это низкоуровневый менеджер пакетов. kpkg -это также низкоуровневый менеджер, но более старый. ну а почему тогда не заменить старый на новый make-kpkg на make-dpkg

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

Чесно я хз. Вангую что этой командой ты просто запакуеш собраное ядро в deb.

Если нужно ядро без обновлений то хардкорно make && make install modules_install

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

так не будет работать на Ubuntu. я не знаю почему. предполагать не буду, тут это опасно делать. закидают дерьмом.

linuxpc
() автор топика

модули или ядро впервую очередь?

Ядро и модули.

пожалуйста аргументируйте

https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Kernel

Ъ:

Compiling and installing
With the configuration now done, it is time to compile and install the kernel. Exit the configuration and start the compilation process:

#make && make modules_install

*Note
It is possible to enable parallel builds using make -jX with X being an integer number of parallel tasks that the build process is allowed to launch. This is similar to the instructions about /etc/portage/make.conf earlier, with the MAKEOPTS variable.

When the kernel has finished compiling, copy the kernel image to /boot/. This is handled by the make install command:

#make install

This will copy the kernel image into /boot/ together with the System.map file and the kernel configuration file.

На русском: https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Kernel/ru

anonymous
()

кто-то пишет, что надо

Твоя проблема в том, что берёшь данные из плохих источников. Вот хорошие источники:

1. Я;

2. Официальная документация твоего дистрибутива;

3. Официальный багтрекер твоего дистрибутива.

И да, когда говоришь «кто-то пишет», то кидай ссылку. Не нужно жадничать информацией о расположении граблей в интернете. Скоро эта проблема, конечно, решится сама собой (1 ноября 2019?), но пока этого нет, то делись, уж будь добр. Ты не обязан, конечно, но должен. Успехов.

anonymous
()
Ответ на: комментарий от linuxpc

Работать будет. А вот стоит или не стоит это делать это уже другой вопрос.

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

Вот есть такое: https://debian-handbook.info/browse/ru-RU/stable/sect.kernel-compilation.html

там вам нужно 8.10.3. и 8.10.4. то есть создать конфигурацию на основе старой и собрать пакеты. Имено собирать пакеты и устанавливать их, а не делать «make install» правильный подход в дистрибутивах с пакетным менеджером.

Потом пакеты устанавливаете, убеждаетесь, что у вас есть initrd(initramfs) для ядра, что в grub'е для вашего ядра соответствующий initrd и пробуете загрузить систему. Если загрузка не проходит, пишете все команды, которые делали и на каком этапе зависает и с какими сообщениями.

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

Да, «make-kpkg» неделимая устаревшая команда.

Откуда вы вот это берёте?

kpkg -это также низкоуровневый менеджер, но более старый.

Не было в дебиане никаких kpkg менеджеров пакетов. Не как не пойму, или вы по диагонали всё читаете, или просто очень толсто троллите.

mky ★★★★★
()
Последнее исправление: mky (всего исправлений: 1)
Ответ на: комментарий от LongLiveUbuntu

то что я еба....ко, мне простительно, а вот тебе, то что ты ебань...о ,вообще не простительно.

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

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

Deleted
()
Ответ на: комментарий от mky

делаю от рута

 make-kpkg --initrd --revision=111 kernel_image
когда делаю
 make-kpkg --initrd --revision=111 kernel_headers
выходит вот это сообщение
 This is kernel package version 13.018.
rm -rf /usr/src/linux/debian/linux-headers-5.0.7
install -p -d -o root -g root  -m  755 /usr/src/linux/debian/linux-headers-5.0.7/usr/src/linux-headers-5.0.7
install -p -d -o root -g root  -m  755 /usr/src/linux/debian/linux-headers-5.0.7/usr/share/doc/linux-headers-5.0.7/examples
install -p -d -o root -g root  -m  755 /usr/src/linux/debian/linux-headers-5.0.7/etc/kernel/header_postinst.d
install -p -d -o root -g root  -m  755 /usr/src/linux/debian/linux-headers-5.0.7/etc/kernel/header_preinst.d
install -p -d -o root -g root  -m  755 /usr/src/linux/debian/linux-headers-5.0.7/etc/kernel/header_postrm.d
install -p -d -o root -g root  -m  755 /usr/src/linux/debian/linux-headers-5.0.7/etc/kernel/header_prerm.d
install -p -d -o root -g root  -m  755 /usr/src/linux/debian/linux-headers-5.0.7/usr/src/linux-headers-5.0.7/arch/x86
install -p -d -o root -g root  -m  755 /usr/src/linux/debian/linux-headers-5.0.7/usr/src/linux-headers-5.0.7/arch/x86/kernel/
install -p    -o root -g root  -m  644 debian/changelog                /usr/src/linux/debian/linux-headers-5.0.7/usr/share/doc/linux-headers-5.0.7/changelog.Debian
install -p    -o root -g root  -m  644 ./debian/pkg/headers/README    /usr/src/linux/debian/linux-headers-5.0.7/usr/share/doc/linux-headers-5.0.7/debian.README
install -p    -o root -g root  -m  644 .config  	                /usr/src/linux/debian/linux-headers-5.0.7/usr/share/doc/linux-headers-5.0.7/config-5.0.7
test ! -f debian/stamp/conf/vars                || \
          install -p    -o root -g root  -m  644 debian/stamp/conf/vars  	/usr/src/linux/debian/linux-headers-5.0.7/usr/share/doc/linux-headers-5.0.7/conf.vars
install -p    -o root -g root  -m  644 CREDITS                         /usr/src/linux/debian/linux-headers-5.0.7/usr/share/doc/linux-headers-5.0.7/
install -p    -o root -g root  -m  644 MAINTAINERS                     /usr/src/linux/debian/linux-headers-5.0.7/usr/share/doc/linux-headers-5.0.7/
install -p    -o root -g root  -m  644 REPORTING-BUGS                  /usr/src/linux/debian/linux-headers-5.0.7/usr/share/doc/linux-headers-5.0.7/
install: cannot stat 'REPORTING-BUGS': No such file or directory
debian/ruleset/targets/headers.mk:40: recipe for target 'debian/stamp/install/linux-headers-5.0.7' failed
make[1]: *** [debian/stamp/install/linux-headers-5.0.7] Error 1
make[1]: Leaving directory '/usr/src/linux-5.0.7'
debian/ruleset/local.mk:102: recipe for target 'kernel_headers' failed
make: *** [kernel_headers] Error 2

linuxpc
() автор топика
Последнее исправление: linuxpc (всего исправлений: 1)
Ответ на: комментарий от linuxpc

говорят что решение этой проблемы

Решается путем редактирования файла /usr/share/kernel-package/ruleset/targets/headers.mk
Изменив строку 
$(install_file) REPORTING-BUGS $(DOCDIR)/
на условную конструкцию
КОД: ВЫДЕЛИТЬ ВСЁ

	test ! -f REPORTING-BUGS                        || \
	   $(install_file) REPORTING-BUGS            $(DOCDIR)/


испытываю

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

Да просто создай пустой файл с таким именем в корне исходников. Файл в каком-то из недавних релизов ядра удалили, а make-kpkg заброшен, поэтому его никто не обновляет.

i-rinat ★★★★★
()
Ответ на: комментарий от linuxpc

install -p -o root -g root -m 644 REPORTING-BUGS /usr/src/linux/debian/linux-headers-5.0.7/usr/share/doc/linux-headers-5.0.7/ install: cannot stat ‘REPORTING-BUGS’: No such file or directory

с каким именем?

Сам-то как думаешь?

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

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

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

Не, никто больше такоей хернёй заниматься не будет, инфа соточка.

make-kpkg

Кроме того, ручками всё прекрасно собирается и работает — видимо на скрипты для калек спрос не велик.

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

Кто-то понял, зачем вообще он пытается собрать ядро, и почему не воспользовался хомячковой инструкцией вроде этой?

Deleted
()
Ответ на: комментарий от linuxpc

Ты всё ещё уверен что оно тебе действительно надо? Может лучше воздухом подышать, весна всё же.

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