Make headers install linux

Сборка ядра / make kernel

Хочу представить очень простой способ установки ядра linux:

если использовать стандартный конфиг (что и будет делаться ниже), то: /usr/src/linux - около 8 GB /lib/modules/ - около 2 GB

Новое ядро может понадобится для повышения функциональности или исправления ошибок (к примеру, я избавился от ошибки с xl2tpd — Failed to open /dev/pts/1: No such file or directory), НО! драйвера (такие как nvidia) надо будет ставить самому, не надеясь на систему!

1. Первым делом возьмём исходники ядра (http://kernel.org),

дальнейшие действия выполняем из под root (sudo su - , или просто su -)

2. cd /usr/src (место, предназначенное для ядра /usr/src/linux)

3. tar -xf (если пакет назывался linux-3.5.3.tar.bz2, то появится linux-3.5.3)

4. ln -s linux- linux

(по стандарту ядро должно быть в /usr/src/linux)
(если не стоит gcc, то ставим стандартными средствами)

6. нам нужен .config (можно сразу запустить make oldconfig, а можно взять старый конфиг, лежащий по адресу /boot/config- , и адаптировать к новому ядру, выполнив make oldconfig):

cp /boot/config- /usr/src/linux/.config make oldconfig (если новые опции нужны по умолчанию, то надо написать: yes "" | make oldconfig)

7. если есть желание что-то поменять, то надо выполнить make menuconfig (нужно доставить ncurses-devel), make xconfig или make gconfig (можно уточнить тип процессора или включить/выключить устройство).

8. если /boot/ монтируется отдельно, позаботимся о том чтобы /boot/ был примонтирован.

1. make -jN, где N - кол-во потоков, можно поставить по кол-ву ядер (долго выполняется). 2. make modules_install 3. make -jN install (долго выполняется). 4. make headers_install (если не знаешь что это, то оно не нужно, а ипользуется для сборки системных вещей таких как gcc, glibc)

10. на данный момент все нужные файлы в /boot/ и всё уже сделано, открываем конфиг загрузчика и проверяем настройки (должна появится новая секция для нового ядра, но если нет то можно дописать её по аналогии).

НО в если initrd не собран dracut, то у Вас получился очень большой файл загрузчика (100-200 MB), и если это Вас не устраивает, то стоит собрать всё с dracut.

Читайте также:  Контроль целостности файлов astra linux

11. ставим dracut и перезагружаемся (должно быть новое ядро).

12. проверяем версию ядра (uname -r) и, если всё в порядке, то запускаем dracut -H -f /boot/ (будет создано новый initrd, но только с тем, что надо для загрузки).

13. если всё в порядке, то стоит заблокировать обнавление ядра:

yum или dnf: добавти в нужный репозиторий строчку 'exclude=kernel*'. Обычно он в /etc/yum.repos.d/-update.repo zypper: zypper al kernel-desktop apt: apt-mark hold linux-image*
  • проверялось на ubuntu 12.04 и на CentOS 6.3 (на нем надо было сменить параметр default в загрузчике)
  • если смущает больщая папка /lib/modules/ , то можно пересобрать ядро с более точным выбором опций
cd /usr/src/linux make menuconfig make make modules_install # если есть модули собраные через dkms(пример для ядра 4.1.4): # dkms autoinstall -k 4.1.4 make install

дальше нужно обеспечить загрузку первого ядра

просмотр конфига: grub2-mkconfig выбор нужного ядра: grub2-set-default 'CentOS Linux 7 (Core), with Linux 4.1.4' 

Источник

Exporting kernel headers for use by userspace¶

The «make headers_install» command exports the kernel’s header files in a form suitable for use by userspace programs.

The linux kernel’s exported header files describe the API for user space programs attempting to use kernel services. These kernel header files are used by the system’s C library (such as glibc or uClibc) to define available system calls, as well as constants and structures to be used with these system calls. The C library’s header files include the kernel header files from the «linux» subdirectory. The system’s libc headers are usually installed at the default location /usr/include and the kernel headers in subdirectories under that (most notably /usr/include/linux and /usr/include/asm).

Kernel headers are backwards compatible, but not forwards compatible. This means that a program built against a C library using older kernel headers should run on a newer kernel (although it may not have access to new features), but a program built against newer kernel headers may not work on an older kernel.

The «make headers_install» command can be run in the top level directory of the kernel source code (or using a standard out-of-tree build). It takes two optional arguments:

make headers_install ARCH=i386 INSTALL_HDR_PATH=/usr

ARCH indicates which architecture to produce headers for, and defaults to the current architecture. The linux/asm directory of the exported kernel headers is platform-specific, to see a complete list of supported architectures use the command:

Читайте также:  Linux посмотреть модель видеокарты

INSTALL_HDR_PATH indicates where to install the headers. It defaults to «./usr».

An ‘include’ directory is automatically created inside INSTALL_HDR_PATH and headers are installed in ‘INSTALL_HDR_PATH/include’.

The kernel header export infrastructure is maintained by David Woodhouse .

Источник

Make headers install linux

Based on kernel version 3.16. Page generated on 2014-08-06 21:40 EST.

1 Exporting kernel headers for use by userspace 2 ============================================= 3  4 The "make headers_install" command exports the kernel's header files in a 5 form suitable for use by userspace programs. 6  7 The linux kernel's exported header files describe the API for user space 8 programs attempting to use kernel services. These kernel header files are 9 used by the system's C library (such as glibc or uClibc) to define available 10 system calls, as well as constants and structures to be used with these 11 system calls. The C library's header files include the kernel header files 12 from the "linux" subdirectory. The system's libc headers are usually 13 installed at the default location /usr/include and the kernel headers in 14 subdirectories under that (most notably /usr/include/linux and 15 /usr/include/asm). 16  17 Kernel headers are backwards compatible, but not forwards compatible. This 18 means that a program built against a C library using older kernel headers 19 should run on a newer kernel (although it may not have access to new 20 features), but a program built against newer kernel headers may not work on an 21 older kernel. 22  23 The "make headers_install" command can be run in the top level directory of the 24 kernel source code (or using a standard out-of-tree build). It takes two 25 optional arguments: 26  27  make headers_install ARCH=i386 INSTALL_HDR_PATH=/usr/include 28  29 ARCH indicates which architecture to produce headers for, and defaults to the 30 current architecture. The linux/asm directory of the exported kernel headers 31 is platform-specific, to see a complete list of supported architectures use 32 the command: 33  34  ls -d include/asm-* | sed 's/.*-//' 35  36 INSTALL_HDR_PATH indicates where to install the headers. It defaults to 37 "./usr/include". 38  39 The command "make headers_install_all" exports headers for all architectures 40 simultaneously. (This is mostly of interest to distribution maintainers, 41 who create an architecture-independent tarball from the resulting include 42 directory.) You also can use HDR_ARCH_LIST to specify list of architectures. 43 Remember to provide the appropriate linux/asm directory via "mv" or "ln -s" 44 before building a C library with headers exported this way. 45  46 The kernel header export infrastructure is maintained by David Woodhouse 47 .
  • Information is copyright its respective author.
  • All material is available from the Linux Kernel Source distributed under a GPL License.
  • Hosted by mjmwired.net.
Читайте также:  What is linux home partition

Источник

How to create Linux Kernel Headers from Linux Kernel Source?

I’m working with Tiny Core Linux and attempting to install Vmware Tools, which of course needs the Kernel Headers :-). It does not appear they have the Kernel Headers readily available in a package, but they do have the kernel source. As a result I downloaded that source, and I’m attempting to create headers from it, but I have no clue what I’m doing. In the googling I ran into, it sounded like:

Might do what I need it to do, and this is in fact a proper make target, but it errors out on me with the following:

tc@box:/usr/src/linux-3.16.6$ make headers_install CHK include/generated/uapi/linux/version.h HOSTCC arch/x86/tools/relocs_32.o In file included from arch/x86/tools/relocs_32.c:1:0: arch/x86/tools/relocs.h:17:32: fatal error: tools/le_byteshift.h: No such file or directory #include ^ compilation terminated. scripts/Makefile.host:134: recipe for target 'arch/x86/tools/relocs_32.o' failed make[1]: *** [arch/x86/tools/relocs_32.o] Error 1 arch/x86/Makefile:181: recipe for target 'archscripts' failed make: *** [archscripts] Error 2 

Am I on the right track here, and I’m just missing a dependency or something, or am I completely on the wrong track? Any pointers someone can give me on how to proceed next? It looks like «tools/le_byteshift.h» is somehow missing, but I’m not sure where to begin isolating what package that is even from to get this to work properly. How does one make the kernel headers from the source? Any pointers greatly appreciated!

Источник

Оцените статью
Adblock
detector