Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Сборка ядра Ubuntu  (Прочитано 3501 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн mustang92

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Сборка ядра Ubuntu
« : 03 Апреля 2015, 14:22:17 »
Добрый день.

Решил расширить свой кругозор в ubuntu, поэтому занялся сборкой ядра.
Все свои действия провожу в VirtualBox в домашней директории.

Делаю следующим образом:
1. Качаю "чистое" ядро 3.18 (без патчей с kernel.org)
2. Качаю патч pf-kernel для этой версии и патч с kernel.org
3. Ставлю сначала патч pf-kernel
- patch -p1 -t -i patch-3.18-pf1
4. Ставлю патч для моей версии
- patch -p1 -t -i patch-3.18.10
5. make defconfig
6. fakeroot make-kpkg -j 5 --initrd --append-to-version=-custom kernel_image kernel_headers #-j 5
7. Получаю ошибку
exec make kpkg_version=12.036+nmu3 -f /usr/share/kernel-package/ruleset/minimal.mk debian APPEND_TO_VERSION=-custom  INITRD=YES
====== making target debian/stamp/conf/minimal_debian [new prereqs: ]======
This is kernel package version 12.036+nmu3.
test -d debian             || mkdir debian
test ! -e stamp-building || rm -f stamp-building
install -p -m 755 /usr/share/kernel-package/rules debian/rules
for file in ChangeLog  Control  Control.bin86 config templates.in rules; do                                      \
            cp -f  /usr/share/kernel-package/$file ./debian/;                               \
        done
for dir  in Config docs examples ruleset scripts pkg po;  do                                      \
          cp -af /usr/share/kernel-package/$dir  ./debian/;                                 \
        done
test -f debian/control || sed         -e 's/=V/3.18.0-pf1-custom/g'  \
                -e 's/=D/3.18.0-pf1-custom-10.00.Custom/g'         -e 's/=A/amd64/g'  \
        -e 's/=SA//g'  \
        -e 's/=I//g'                    \
        -e 's/=CV/3.18/g'                \
        -e 's/=M/Unknown Kernel Package Maintainer <unknown@unconfigured.in.etc.kernel-pkg.conf>/g'                \
        -e 's/=ST/linux/g'      -e 's/=B/x86_64/g'    \
                  /usr/share/kernel-package/Control > debian/control
test -f debian/changelog ||  sed -e 's/=V/3.18.0-pf1-custom/g'       \
            -e 's/=D/3.18.0-pf1-custom-10.00.Custom/g'        -e 's/=A/amd64/g'       \
            -e 's/=ST/linux/g'     -e 's/=B/x86_64/g'         \
            -e 's/=M/Unknown Kernel Package Maintainer <unknown@unconfigured.in.etc.kernel-pkg.conf>/g'                            \
             /usr/share/kernel-package/changelog > debian/changelog
chmod 0644 debian/control debian/changelog
test -d ./debian/stamp || mkdir debian/stamp
make -f debian/rules debian/stamp/conf/kernel-conf
make[1]: Вход в каталог `/home/ema/linux-3.18'
====== making target debian/stamp/conf/kernel-conf [new prereqs: ]======
make EXTRAVERSION=-pf1-custom   ARCH=x86_64 \
                    oldconfig;
make[2]: Вход в каталог `/home/ema/linux-3.18'
scripts/kconfig/conf --oldconfig Kconfig
#
# configuration written to .config
#
make[2]: Выход из каталога `/home/ema/linux-3.18'
make EXTRAVERSION=-pf1-custom   ARCH=x86_64 prepare
make[2]: Вход в каталог `/home/ema/linux-3.18'
scripts/kconfig/conf --silentoldconfig Kconfig
make[2]: Выход из каталога `/home/ema/linux-3.18'
make[2]: Вход в каталог `/home/ema/linux-3.18'
  SYSTBL  arch/x86/syscalls/../include/generated/asm/syscalls_32.h
  SYSHDR  arch/x86/syscalls/../include/generated/asm/unistd_32_ia32.h
  SYSHDR  arch/x86/syscalls/../include/generated/asm/unistd_64_x32.h
  SYSTBL  arch/x86/syscalls/../include/generated/asm/syscalls_64.h
  SYSHDR  arch/x86/syscalls/../include/generated/uapi/asm/unistd_32.h
  SYSHDR  arch/x86/syscalls/../include/generated/uapi/asm/unistd_64.h
  SYSHDR  arch/x86/syscalls/../include/generated/uapi/asm/unistd_x32.h
  HOSTCC  arch/x86/tools/relocs_32.o
  HOSTCC  arch/x86/tools/relocs_64.o
  HOSTCC  arch/x86/tools/relocs_common.o
  HOSTLD  arch/x86/tools/relocs
  CHK     include/config/kernel.release
  UPD     include/config/kernel.release
  WRAP    arch/x86/include/generated/asm/clkdev.h
  WRAP    arch/x86/include/generated/asm/cputime.h
  WRAP    arch/x86/include/generated/asm/dma-contiguous.h
  WRAP    arch/x86/include/generated/asm/early_ioremap.h
  WRAP    arch/x86/include/generated/asm/mcs_spinlock.h
  WRAP    arch/x86/include/generated/asm/scatterlist.h
  CHK     include/generated/uapi/linux/version.h
  UPD     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
  UPD     include/generated/utsrelease.h
  CC      kernel/bounds.s
  GEN     include/generated/bounds.h
  CC      arch/x86/kernel/asm-offsets.s
In file included from include/linux/ktime.h:24:0,
                 from include/linux/timer.h:5,
                 from include/linux/workqueue.h:8,
                 from include/linux/srcu.h:34,
                 from include/linux/notifier.h:15,
                 from include/linux/memory_hotplug.h:6,
                 from include/linux/mmzone.h:793,
                 from include/linux/gfp.h:5,
                 from include/linux/slab.h:14,
                 from include/linux/crypto.h:24,
                 from arch/x86/kernel/asm-offsets.c:8:
include/linux/time.h:115:20: error: redefinition of ‘timeval_valid’
 static inline bool timeval_valid(const struct timeval *tv)
                    ^
include/linux/time.h:102:20: note: previous definition of ‘timeval_valid’ was here
 static inline bool timeval_valid(const struct timeval *tv)
                    ^
In file included from include/linux/fs.h:262:0,
                 from include/linux/cgroup.h:20,
                 from include/linux/memcontrol.h:22,
                 from include/linux/swap.h:8,
                 from include/linux/suspend.h:4,
                 from arch/x86/kernel/asm-offsets.c:12:
include/linux/quota.h:363:8: error: redefinition of ‘struct qc_dqblk’
 struct qc_dqblk {
        ^
include/linux/quota.h:320:8: note: originally defined here
 struct qc_dqblk {
        ^
make[3]: *** [arch/x86/kernel/asm-offsets.s] Ошибка 1
make[2]: *** [prepare0] Ошибка 2
make[2]: Выход из каталога `/home/ema/linux-3.18'
make[1]: *** [debian/stamp/conf/kernel-conf] Ошибка 2
make[1]: Выход из каталога `/home/ema/linux-3.18'
make: *** [debian/stamp/conf/minimal_debian] Ошибка 2
Failed to create a ./debian directory: Нет такого файла или каталога at /usr/bin/make-kpkg line 984.

Где я допустил ошибку, подскажите, пожалуйста.
Заранее спасибо.

Оффлайн v!tax

  • Старожил
  • *
  • Сообщений: 4154
  • Gentoo x64 bspwm
    • Просмотр профиля
Re: Сборка ядра Ubuntu
« Ответ #1 : 03 Апреля 2015, 14:42:43 »
без патчей попробуй +
make menuconfig
без подсовывания старых конфигов(на чистом)
« Последнее редактирование: 03 Апреля 2015, 14:47:28 от ShaBang »
господь ведет твою руку, сын мой....

Оффлайн mustang92

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Сборка ядра Ubuntu
« Ответ #2 : 03 Апреля 2015, 15:40:14 »
Да, видимо проблема крылась в слиянии двух патчей.
Когда пробую собрать "чистое" ядро - все хорошо.
Когда пробую собрать ядро после первого патча - тоже все хорошо.

Оффлайн v!tax

  • Старожил
  • *
  • Сообщений: 4154
  • Gentoo x64 bspwm
    • Просмотр профиля
Re: Сборка ядра Ubuntu
« Ответ #3 : 03 Апреля 2015, 15:44:23 »
а после 2?
патч точно для твоей версии?
господь ведет твою руку, сын мой....

Оффлайн mustang92

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Сборка ядра Ubuntu
« Ответ #4 : 03 Апреля 2015, 20:10:10 »
Поспешил я с выводами. Сборка не доходит до конца.
эрэм эрэф /home/ema/del/linux-3.18/debian/linux-image-3.18.0-pf1-custom/usr/lib/debug
test ! -f tools/lguest/lguest ||      \
    install -p    -o root -g root  -m  644 tools/lguest/lguest /home/ema/del/linux-3.18/debian/linux-image-3.18.0-pf1-custom/lib/modules/3.18.0-pf1-custom/lguest
test ! -f /home/ema/del/linux-3.18/debian/linux-image-3.18.0-pf1-custom/lib/modules/3.18.0-pf1-custom/lguest ||    \
    chmod 755 /home/ema/del/linux-3.18/debian/linux-image-3.18.0-pf1-custom/lib/modules/3.18.0-pf1-custom/lguest
test ! -e /home/ema/del/linux-3.18/debian/linux-image-3.18.0-pf1-custom/lib/modules/3.18.0-pf1-custom/source ||   \
   mv /home/ema/del/linux-3.18/debian/linux-image-3.18.0-pf1-custom/lib/modules/3.18.0-pf1-custom/source ./debian/source-link
test ! -e /home/ema/del/linux-3.18/debian/linux-image-3.18.0-pf1-custom/lib/modules/3.18.0-pf1-custom/build ||   \
   mv /home/ema/del/linux-3.18/debian/linux-image-3.18.0-pf1-custom/lib/modules/3.18.0-pf1-custom/build ./debian/build-link
test ! -e ./debian/source-link ||        \
   mv ./debian/source-link /home/ema/del/linux-3.18/debian/linux-image-3.18.0-pf1-custom/lib/modules/3.18.0-pf1-custom/source
test ! -e  ./debian/build-link ||        \
   mv  ./debian/build-link /home/ema/del/linux-3.18/debian/linux-image-3.18.0-pf1-custom/lib/modules/3.18.0-pf1-custom/build
/sbin/depmod -q -FSystem.map -b /home/ema/del/linux-3.18/debian/linux-image-3.18.0-pf1-custom 3.18.0-pf1-custom;
restore_upstream_debianization
test ! -f scripts/package/builddeb.kpkg-dist || mv -f scripts/package/builddeb.kpkg-dist scripts/package/builddeb
test ! -f scripts/package/Makefile.kpkg-dist || mv -f scripts/package/Makefile.kpkg-dist scripts/package/Makefile
/usr/bin/make EXTRAVERSION=-pf1-custom INSTALL_MOD_PATH=/home/ema/del/linux-3.18/debian/linux-image-3.18.0-pf1-custom      \
INSTALL_FW_PATH=/home/ema/del/linux-3.18/debian/linux-image-3.18.0-pf1-custom/lib/firmware/3.18.0-pf1-custom  \
INSTALL_PATH=/home/ema/del/linux-3.18/debian/linux-image-3.18.0-pf1-custom//boot  install
make[2]: Вход в каталог `/home/ema/del/linux-3.18'
scripts/kconfig/conf --silentoldconfig Kconfig
make[2]: Выход из каталога `/home/ema/del/linux-3.18'
make[2]: Вход в каталог `/home/ema/del/linux-3.18'
sh ./arch/x86/boot/install.sh 3.18.0-pf1-custom arch/x86/boot/bzImage \
System.map "/home/ema/del/linux-3.18/debian/linux-image-3.18.0-pf1-custom//boot"
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 3.18.0-pf1-custom /home/ema/del/linux-3.18/debian/linux-image-3.18.0-pf1-custom//boot/vmlinuz-3.18.0-pf1-custom
/etc/kernel/postinst.d/apt-auto-removal: 84: /etc/kernel/postinst.d/apt-auto-removal: cannot create /etc/apt/apt.conf.d//01autoremove-kernels.dpkg-new: Permission denied
run-parts: /etc/kernel/postinst.d/apt-auto-removal exited with return code 2
make[3]: *** [install] Ошибка 1
make[2]: *** [install] Ошибка 2
make[2]: Выход из каталога `/home/ema/del/linux-3.18'
make[1]: *** [debian/stamp/install/linux-image-3.18.0-pf1-custom] Ошибка 2
make[1]: Выход из каталога `/home/ema/del/linux-3.18'
make: *** [kernel_image] Ошибка 2

1. Применял патч pf-kernel
2. make menuconfig -> тут же сохранял
3. Долгий процесс сборки, после чего вышеописанные ошибки.

Видно, что не хватает прав. Может ли fakeroot повлиять на это?! Еще хочу заметить, что делаю все операции под обычным пользователем.

Как с этим можно бороться?! Заранее спасибо.
« Последнее редактирование: 03 Апреля 2015, 20:45:46 от mustang92 »

Оффлайн mkudritsky

  • Любитель
  • *
  • Сообщений: 58
    • Просмотр профиля
Re: Сборка ядра Ubuntu
« Ответ #5 : 04 Апреля 2015, 08:53:47 »
На мой взгляд собирать новое ядро лучше всего под root Ну, для малоопытного юзера.
Соответственно, в Ubuntu надо использовать sudo перед всеми командами компиляции ядра.

Где-то в 2002-2004 году я собирал ядро RadHat, а позднее Fedora.
Помнится, там ничего сложного не было - был целый файл хэлпа Kernel-HOWTO.
Собирал я ядро для того, чтобы заработал SCSI адаптер Tekram 390C.
Универсальное ядро его не знало, а дрова представляли собой вставку кода на языке C в тексты ядра (указывалось куда и в какой файл делать вставки).

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

Дело в том, что сейчас ядра обновляются 1-2 раза в месяц. И что теперь, два раза в месяц новое ядро собирать??? :)
Это муторно и долго!
А модуль один раз собрал и далее он будет работать, несмотря на обновления ядра.

P.S. 1. Я сейчас тоже вспоминаю Linux и пытаюсь понять архитектуру Ubutnu - пытаюсь для тренировки собрать модуль Winmodem с драйверами hsfmodem. Пока безуспешно, потому что драйвера имеют пропиетарную часть и разрабатывались только до ядер 2.36.* включительно. А потом поддержка Выньмодемов в Linux прекратилась за потерей актуальности.
Но кому-то удалось собрать драйвера для Ubuntu 11.04, а кому-то для Knoppix с kernel 3.4.*
Но мне вот для Runtu 14.04.1 LITE kernel 3.13 собрать дрова пока не удается...
2. Мой опыт 2002-2007 годов говорит о том, что получайнику собрать эффективное ядро Linux довольно трудно. У меня почему-то новые ядра получались и больше по размерам, и менее быстрыми, чем универсальное ядро. Хотя и выкидывал из них в конфигурации все-все лишнее...
И я пытался врубаться, форумы и статьи читал. Но все равно, своей работой был не доволен.
Ну а потом мы выкинули SCSI Tekram 390C и прикупили какой-то из Adaptec-ов и я про сборку ядер забыл - пользовался универсальными ядрами.
« Последнее редактирование: 04 Апреля 2015, 09:13:42 от mkudritsky »

Оффлайн Pilot6

  • Старожил
  • *
  • Сообщений: 14037
  • Xubuntu 18.04
    • Просмотр профиля
Re: Сборка ядра Ubuntu
« Ответ #6 : 04 Апреля 2015, 11:02:51 »
mustang92,
А зачем собирать менлайновое ядро для Ubuntu? Правильный способ - собирать ядра ubuntu, если нужны туда патчи.
И проблема у вас не в конфигах, а в патче, который не подходит.
« Последнее редактирование: 04 Апреля 2015, 11:18:47 от Pilot6 »
Я в личке не консультирую. Вопросы задавайте на форуме.

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 3266
    • Просмотр профиля
Re: Сборка ядра Ubuntu
« Ответ #7 : 04 Апреля 2015, 13:06:32 »
Я тоже компилирую ядро, но нет надобности делать это с выходом
каждого нового. Это надо делать тогда, когда в новом есть
требующаяся функциональность, отсутствующая в текущем.
И собирать ядро надо из дистрибутивного linux-kernel,
а его установить, как обычно, командой apt-get. Это даже
не просто правильное, а единственно правильное решение.
Мороки со сборкой ядра немного, единственно что надо в новое
дерево ядра скопировать старый .config, а потом после
make oldconfigответить на вопросы. Вот если ядро давно не компилировалось,
то как раз вопросов может быть много.
А компилирование и установка труда не составляют.
Пётр.

Оффлайн mustang92

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Сборка ядра Ubuntu
« Ответ #8 : 04 Апреля 2015, 14:15:12 »
Я в самом налаче этой темы писал, зачем я это делаю:
- для общего развития
- для расширения кругозора

Проблема решилась запуском всех команд из под root (sudo -s). Только вот применение второго патча все равно выдает ту же ошибку.

Оффлайн Pilot6

  • Старожил
  • *
  • Сообщений: 14037
  • Xubuntu 18.04
    • Просмотр профиля
Re: Сборка ядра Ubuntu
« Ответ #9 : 04 Апреля 2015, 20:32:30 »
mustang92,
sudo использовать не правильно. Для этого есть fakeroot, если собирать дебианским способом.
Если обычным, то тоже не нужно. А ошибка никуда не денется. От способа сборки не зависит.
Я в личке не консультирую. Вопросы задавайте на форуме.

Оффлайн svtv1

  • Забанен
  • Старожил
  • *
  • Сообщений: 2652
  • Это Я
    • Просмотр профиля
Re: Сборка ядра Ubuntu
« Ответ #10 : 04 Апреля 2015, 20:55:28 »
[удалено модератором]

На форуме ЗАПРЕЩЕНО
2.3. Флудить и заниматься флеймом, а так же оставлять сообщения, не относящиеся к теме обсуждения.

Устное предупреждение.


--andrew_bye
« Последнее редактирование: 04 Апреля 2015, 22:07:41 от andrew_bye »
"Если достаточно долго сидеть возле реки - мимо проплывет труп твоего врага"

Оффлайн mustang92

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Сборка ядра Ubuntu
« Ответ #11 : 04 Апреля 2015, 23:23:03 »
mustang92,
sudo использовать не правильно. Для этого есть fakeroot, если собирать дебианским способом.
Если обычным, то тоже не нужно. А ошибка никуда не денется. От способа сборки не зависит.

Когда делал без sudo, то выдавались ошибки прав и файлы .deb не создавались. Когда же сделал все под sudo, то все заработало, ошибок не было, файлы .deb появились. Сейчас сижу на обновленном ядре, полет нормальный.

 

Страница сгенерирована за 0.019 секунд. Запросов: 19.