Система:
# cat /etc/redhat-release CentOS release 6.5 (Final)
Текущее ядро:
# uname -r 2.6.32-431.29.2.el6.i686
Ядро 3.10 было выбрано, т.к. оно используется в CentOS 7. См. также тут>>>.
Содержание
1. Зависимости
Для сборки и компиляции ядра 3.10 нам понадобятся:
- GCC последней версии;
- пакет Ncurses;
- обновление всех текущих пакетов до последней версии;
Устанавливаем зависимости, если их нет, и обновляем остальные пакеты:
# yum install gcc ncurses ncurses-devel
# yum -y update
2. Загрузка исходных кодов
Качаем исходники ядра с сайта https://www.kernel.org:
# cd /tmp # wget https://www.kernel.org/pub/linux/kernel/v3.0/linux-3.10.tar.bz2
Распаковываем архив в каталог /usr/src
:
# tar xfp linux-3.10.tar.bz2 -C /usr/src/
По завершению – меняем каталог:
# cd /usr/src/linux-3.10/
3. Конфигурирование ядра
Что бы создать новую конфигурацию – выполняем:
# make menuconfig
При использовании Putty – переключите кодировку в UTF-8
.
Что бы использовать конфигурацию старого ядра – выполните:
# make oldconfig
Во время настройки будут выдаваться запросы на указание настроек, которых нет в 2.6, и которые появились в 3.10 (и их будет много).
Что бы создать конфигурацию, основываясь на настройках по-умолчанию – выполняем:
# make defconfig *** Default configuration is based on 'i386_defconfig' # # configuration written to .config #
4. Сборка ядра
Теперь пора запустить сборку ядра:
# make scripts/kconfig/conf --silentoldconfig Kconfig SYSHDR arch/x86/syscalls/../include/generated/uapi/asm/unistd_32.h SYSHDR arch/x86/syscalls/../include/generated/uapi/asm/unistd_64.h ...
Пока ядро собирается – можно порассматривать создаваемые объектные файлы:
# objdump -h drivers/acpi/acpica/evhandler.o drivers/acpi/acpica/evhandler.o: file format elf32-i386 Sections: Idx Name Size VMA LMA File off Algn 0 .text 00000307 00000000 00000000 00000034 2**2 CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE 1 .data 00000004 00000000 00000000 0000033c 2**2 CONTENTS, ALLOC, LOAD, DATA 2 .bss 00000000 00000000 00000000 00000340 2**2 ALLOC 3 .rodata 0000000a 00000000 00000000 00000340 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 4 .comment 0000002d 00000000 00000000 0000034a 2**0 CONTENTS, READONLY 5 .note.GNU-stack 00000000 00000000 00000000 00000377 2**0 CONTENTS, READONLY
# readelf -h drivers/acpi/acpica/evhandler.o ELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: REL (Relocatable file) Machine: Intel 80386 Version: 0x1 Entry point address: 0x0 Start of program headers: 0 (bytes into file) Start of section headers: 968 (bytes into file) Flags: 0x0 Size of this header: 52 (bytes) Size of program headers: 0 (bytes) Number of program headers: 0 Size of section headers: 40 (bytes) Number of section headers: 11 Section header string table index: 8
# nm drivers/acpi/acpica/evhandler.o 00000000 r _acpi_module_name U acpi_ev_attach_region U acpi_ev_cmos_region_setup U acpi_ev_default_region_setup U acpi_ev_detach_region 00000000 T acpi_ev_has_default_handler 0000021e t acpi_ev_install_handler 000002a0 T acpi_ev_install_region_handlers 0000002f T acpi_ev_install_space_handler U acpi_ev_io_space_region_setup U acpi_ev_pci_bar_region_setup U acpi_ev_pci_config_region_setup U acpi_ev_system_memory_region_setup U acpi_ex_cmos_space_handler U acpi_ex_data_table_space_handler U acpi_ex_pci_bar_space_handler U acpi_ex_pci_config_space_handler U acpi_ex_system_io_space_handler U acpi_ex_system_memory_space_handler 00000000 D acpi_gbl_default_address_spaces U acpi_gbl_root_node U acpi_ns_attach_object U acpi_ns_get_attached_object U acpi_ns_validate_handle U acpi_ns_walk_namespace U acpi_ut_acquire_mutex U acpi_ut_create_internal_object_dbg U acpi_ut_release_mutex U acpi_ut_remove_reference
В процессе сборки есть обозначения:
CC net/ipv4/netfilter/ipt_REJECT.o CC net/ipv4/netfilter/ipt_ULOG.o LD net/ipv4/netfilter/built-in.o CC [M] net/ipv4/netfilter/nf_nat_l3proto_ipv4.o CC [M] net/ipv4/netfilter/nf_nat_proto_icmp.o LD [M] net/ipv4/netfilter/nf_nat_ipv4.o
СС
– C compiler, при компиляции объекта;
LD
– линкер;
[M]
– модуль ядра.
Сборка завершена:
... Setup is 13340 bytes (padded to 13824 bytes). System is 5319 kB CRC 82fb4151 Kernel: arch/x86/boot/bzImage is ready (#1) Building modules, stage 2. MODPOST 10 modules CC net/ipv4/netfilter/ipt_MASQUERADE.mod.o LD [M] net/ipv4/netfilter/ipt_MASQUERADE.ko CC net/ipv4/netfilter/iptable_nat.mod.o LD [M] net/ipv4/netfilter/iptable_nat.ko CC net/ipv4/netfilter/nf_nat_ipv4.mod.o LD [M] net/ipv4/netfilter/nf_nat_ipv4.ko CC net/netfilter/nf_nat.mod.o LD [M] net/netfilter/nf_nat.ko CC net/netfilter/nf_nat_ftp.mod.o LD [M] net/netfilter/nf_nat_ftp.ko CC net/netfilter/nf_nat_irc.mod.o LD [M] net/netfilter/nf_nat_irc.ko CC net/netfilter/nf_nat_sip.mod.o LD [M] net/netfilter/nf_nat_sip.ko CC net/netfilter/xt_LOG.mod.o LD [M] net/netfilter/xt_LOG.ko CC net/netfilter/xt_mark.mod.o LD [M] net/netfilter/xt_mark.ko CC net/netfilter/xt_nat.mod.o LD [M] net/netfilter/xt_nat.ko
Сборка заняла около 50 минут.
5. Установка ядра и модулей
Выполняем установку. Тут файл будет помещён каталог в /boot
, и внесены изменения в /boot/grub/grub.conf
:
# make modules_install install
На ошибки вида:
ERROR: modinfo: could not find module dm_region_hash ERROR: modinfo: could not find module dm_log ERROR: modinfo: could not find module dm_mod
пока не обращаем внимания.
Проверяем установку:
# ls -l /boot/ | tail -n 4 -rwxr-xr-x. 1 root root 4006368 Jun 19 23:16 vmlinuz-2.6.32-431.20.3.el6.i686 -rwxr-xr-x. 1 root root 4006304 Sep 9 23:38 vmlinuz-2.6.32-431.29.2.el6.i686 -rwxr-xr-x. 1 root root 4002656 Nov 22 2013 vmlinuz-2.6.32-431.el6.i686 -rw-r--r--. 1 root root 5459776 Oct 22 18:38 vmlinuz-3.10.0
# cat /boot/grub/grub.conf | grep "3.10" title CentOS (3.10.0) kernel /vmlinuz-3.10.0 ro root=/dev/mapper/vg_mainhome-lv_root rd_NO_LUKS rd_LVM_LV=vg_mainhome/lv_root rd_LVM_LV=vg_mainhome/lv_swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM LANG=en_US.UTF-8 rhgb quiet initrd /initramfs-3.10.0.img
Перезапускаем машину:
# shutdown -r now Broadcast message from root@main-home (/dev/pts/2) at 18:42 ... The system is going down for reboot NOW!
В меню GRUB есть новое ядро:
После загрузки проверяем:
# uname -r 3.10.0
Смотрим dmesg
на предмет ошибок, и проверяем версию там:
# cat /var/log/dmesg | grep "Linux version" [ 0.000000] Linux version 3.10.0 (root@main-home) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Wed Oct 22 18:29:38 EEST 2014
Готово.
Очень полезные ссылки при сборке и настройке ядра:
http://cateee.net
http://www.linux.org