Ядро не підтримує режим компіляції PIC?


14

Я намагався скомпілювати останнє ядро ​​Linux v4.8.9 на Ubuntu 16.10, і ця помилка постійно з’являється після того, як я зробив .config за замовчуванням, змінив його з menuconfig і запустив make make сам. Я також запустив зробити mrproper, як тільки я відкрутив файл. Це вихід відразу після запуску make:

scripts/kconfig/conf  --silentoldconfig Kconfig
  SYSTBL  arch/x86/entry/syscalls/../../include/generated/asm/syscalls_32.h
  SYSHDR  arch/x86/entry/syscalls/../../include/generated/asm/unistd_32_ia32.h
  SYSHDR  arch/x86/entry/syscalls/../../include/generated/asm/unistd_64_x32.h
  SYSTBL  arch/x86/entry/syscalls/../../include/generated/asm/syscalls_64.h
  SYSHDR  arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_32.h
  SYSHDR  arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_64.h
  SYSHDR  arch/x86/entry/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/mm-arch-hooks.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
kernel/bounds.c:1:0: error: code model kernel does not support PIC mode
 /*

Kbuild:45: recipe for target 'kernel/bounds.s' failed
make[1]: *** [kernel/bounds.s] Error 1
Makefile:1015: recipe for target 'prepare0' failed
make: *** [prepare0] Error 2

Я також намагався компілювати параметр -no-pie після команди make, але він створює набір нових помилок, постійно кажучи, що "відсутні цілі". У мене є версія gcc 6.2.0. У мене також встановлено gcc-5, тому що я на початку припускав, що це може бути тому, що gcc був занадто новим, але така ж проблема зберігається і в gcc-5. Хтось із списків розсилки чи іншого форуму зазначив, що проблему було вирішено безпосередньо клонуванням від git, але це також не допомогло в моєму сценарії.

Мені цікаво, якщо хтось інший зіткнувся з цією проблемою, і якщо так, то яке можливе виправлення може бути?

ПРИМІТКА. Я запускаю Ubuntu у Virtualbox на Mac, якщо це може бути можливим джерелом проблем.

Відповіді:


14

Проблема полягає у встановленні gcc, у версіях gcc 6+ PIE (виконувані незалежно від позиції) увімкнено за замовчуванням. Тож для компіляції потрібно відключити її. Навіть gcc 5 має проблему. Це відома помилка для gcc. Помилка посилання .

Поки немає офіційного виправлення з боку gcc, тож вирішення проблеми - це виправлення Makefile джерела ядра.

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

Повідомте мене, якщо у вас виникли труднощі з установкою виправлення.


Я повна linux noob, як би я пішов про встановлення виправлення на даному веб-сайті? Я припускаю, що я копіюю і вставляю якусь частину у файл і виконую команду?
Джон Лонг

1
На жаль, у мене не вистачає точок повторень, щоб зробити оновлення, але я задав той самий питання, на який ви щойно відповіли на Superuser, і я хотів би запитати, чи не віддасте перевагу, я пов’язую цю відповідь з питанням про суперпопулярність і позначте її як відповідь чи ви самі міг відповісти на це суперпользователь. Просто хочете переконатись, що надаєте кредит там, де належить кредит!
Джон Лонг

1
Привіт, Нінетедо, будь ласка, переконайтесь, що ви скопіювали його правильно та скопіювали лише з "З" на "2.8.1".
Радість

1
@Joy У мене була така ж помилка: патч-файл Makefile Hunk # 1 ЗНАНИЛО на 608. 1 з 1
парки НЕПОСТАВЛЕНО

1
патч не працює для версій 2.6.x (я намагався в 2.6.39), отримуючи це у моєму файлі відхилення патча - pastebin.com/Pmdv1MTT будь-які ідеї?
SatheeshJM

8

Відкрийте Makefile, знайдіть CFLAGS_EXTRA і додайте до нього наступний варіант -fno-pie

У мене була лінія:

EXTRA_CFLAGS += $(CFLAGS_EXTRA)

Я змінив це на:

EXTRA_CFLAGS += $(CFLAGS_EXTRA) -fno-pie

Для побудови ядра 4, вище прапор: KBUILD_CFLAGS.

І вона знову почала складатись.


Це добре працює
King Stone
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.