МЕТОДИКА КОНФИГУРАЦИИ ИЗ СТАРОЙ В НОВУЮ ВЕРСИЮ ЯДРА ОС LINUX
© Грушицын А.С.*
Московский авиационный институт (национальный исследовательский университет), г. Москва
Одними из основных аспектов преподавания в высшей школе являются концентрация внимания учащихся в процессе обучения и проблема заинтересованности преподаваемым предметом [1-4]. В данной статье рассматриваются методика сборки операционной системы Linux.
Ключевые слова операционная система, Linux, конфигурация ядра.
Ядро операционной системы Linux постоянно развивается, и с каждой новой версией в конфигурационный файл включаются новые опции и параметры, у которых со временем разработчики могут менять даже наименование. Способ экспорта старой конфигурации в текущую нецелесообразен, так как для этих параметров современное ядро не найдет соответствия в старой конфигурации. Оно примет значения по умолчанию. В результате окажется, что вновь собранное ядро осталось без какого-либо драйвера или в него включены какие-то функционалы, так как мы экспортировали неправильно конфигурацию. Более корректный способ экспорта предыдущей конфигурации в текущую версию ядра - «oldconfig» (рис. 1).
mail linux # ср ../Iinux-3.15/-config . mail linux # make oldconfigl
Рис. 1
При таком способе экспорта, для всех параметров новой версии ядра, если не будет найдено соответствие в старой конфигурации, то пользователю будут задаваться вопросы в диалоговом режиме. Все значения, которые известны и определены, ядро примет по имеющейся конфигурации. Если какой-то параметр не определен в старой конфигурации или не существует, то он будет задан. При, достаточно регулярном обновлении ядра, будет примерно 10-20 вопросов (рис. 2).
В основном вопросы касаются поддержки нового оборудования, т.е. ядро включает драйверы нового оборудования. Чаще всего приходится отвечать на них просто по умолчанию. Таким образом, корректно импортируется старая конфигурация в новое ядро. Полученное ядро разворачивается в каталоге - /usr/src/ и создается ссылка с именем Linux на него. Внутри этого каталога (если ядро новое и предыдущей конфигурации нет), чаще всего
* Старший преподаватель.
требуется запустить команду - make menuconfig. Если предыдущая конфигурация уже была, то просто копируем файл config из файлового дерева предыдущей версии ядра в текущую и запускаем «make oldconfig». Когда конфигурация готова, мы можем переходить к компиляции и сборке ядра, что выполняется утилитой «make» (maillinux # make). По умолчанию, утилита make скомпилирует и собирает ядро из исходных кодов (рис. 3).
* Compile-time checks and compiler options
«
Enable _deprecated logic (enable_.varn_deprecated) [N/y/?] n
Enable __must_check logic (ENABLE_MUST_CHECK) [Y/n/?] y Warn for stack frames larger than (needs gcc 4.4) (frame_,\iarn) [1024] 1024 Strip assembler-generated symbols during link (STRIP__ASM_SYMS) [N/y/?] n Enable unused/obsolete exported symbols (UNUSED_SYMBOLS) [N/y/?] n Debug Filesystem (DEBUG_FS) [N/y/?] n
Run make header s_check' when building vmlinux (HEADERS_CHECK) [N/y/?] n Enable full Section mismatch analysis (DEBUG_SECTiON_MISNATCH) [N/y/?] n Compile the kernel with frame pointers (FRAME_POINTER) [Y/n/?] y Magic SysRq key (MAGIC_SYSRQ) [Y/n/?] y
Enable magic SysRq key functions by default (MAGIC_SYSRQ_DEFAULT_ENABLE) [0x1] 0x1 Kernel debugging (DEBUG_KERNEl) [N/y/?] n ft
* Memory Debugging
slub debugging on by default (slub_debug_on) [N/y/"'] n Enable slub performance statistics (slub_stats) [N/y/''] n
- Debug Lockups and Hangs
Panic on Oops (PANIC_ON_OOPS) [N/y/?] n panic timeout (PANIC_TIMEOUT) [0] 0
* Lock Debugging (spinlocks, mutexes, etc...) Stack backtrace support (STACKTRACE) [N/y/?] (NEW)
* RCU Debugging
ft
RCU debugging: sparse-based checks for pointer usage (SPARSE_RCu_POINTER) [N/y/?] n
RCU CPU stall timeout in seconds (RCU_CPU_STALL_TIMEOUT) [21] 21
*
- Tracers
Tracers (FTRACE) [N/y/?] n
ft Runtime Testing
*
Perform an atomic64_t self-test at boot (AT0MIC64_SELFTEST) [N/y/?] n
Test functions located in the string_helpers module at runtime (TEST_STRING_HELPERS) [I
Test kstrto*() family of functions at runtime (TEST_KSTRTOX) [N/m/y] n
Perform selftest on resizable hash table (TEST_RHASHTABLE) [N/y/?] (NEW)
Remote debugging over FireWire early on boot (PRO\aDE_OHCI1394_DMA_INIT) [N/y/?] n
Enable debugging of DMA-API usage (DMA_API_DEBUG) [n/y/?] n
Test module loading with 'hello rarld' module (TEST_MODULE) [N/m/?] n </m/y] n
Puc. 2
По умолчанию, ядро располагается в каталоге «boot» (mail ~ # 1s /boot). Каталог boot и его содержимое необходимы только при старте системы. После старта системы, образ ядра не нужен. Для того, чтобы его смонтировать, набираем команду - mail ~ # mount /boot. В каталоге boot могут лежать несколько образов ядра. Сами образы ядра в Linux принято именовать по имени «vmlinuz» и указывать имя версии (рис. 4).
mail linux ff make
scri pts/kconfi g/conf
■si lentoldconfig Kconfig
SYSTBL arch/x86/syscalls/../include/generated/asm/sysc.
SYSHDR arch/x86/syscalls/../include/generated/uapi/asm
SYSHDR arch/x86/syscalls/../include/generated/uapi/asm
SYSHDR arch/x86/syscalls/../include/generated/uapi/asm
HOSTCC arch/x86/tools/relocs_32.o
HOSTCC arch/x86/tools/relocs_64.o
HOSTCC arch/x86/tools/relocs_common.о
HOSTLD arch/x86/tools/re1ocs
CHK include/config/kernel.release
UPD include/config/kernel.release
WRAP arch/x86/include/generated/asm/clkdev.h
WRAP arch/х8б/i nclude/generated/asm/cputime.h
WRAP arch/x86/include/generated/asm/early_ioremap.h
WRAP arch/х8б/i nclude/generated/asm/mcs_spi nlock.h
WRAP arch/x86/i nclude/generated/asm/scatter1i st.h
CHK i nclude/generated/uapi/11nux/version.h
UPD i nclude/generated/uapi/li nux/version.h
CHK include/generated/utsrelease.h
UPD include/generated/utsrelease.h
CC kernel/bounds.s
GEN include/qenerated/bounds.h
CC arch/x86/kernel/asm-offsets.s
GEN i nclude/generated/asm-offsets.h
CALL scripts/checksyscalls.sh
CC scripts/mod/empty.о
HOSTCC scripts/mod/mk_eIfconfig
MKELF scripts/mod/elfconfig.h
CC scripts/mod/devicetable-offsets.s
GEN scri pts/mod/devi cetable-offsets.h
HOSTCC scripts/mod/file2alias.o
HOSTCC scripts/mod/modpost.o
HOSTCC scripts/mod/sumversion.o
HOSTLD scripts/mod/modpost
HOSTCC scri pts/kal1syms
HOSTCC scripts/pnmtologo
HOSTCC scripts/conmakenash
HOSTCC scripts/sortextable
CC i nit/main, о
CHK include/generated/compile.h
UPD include/generated/compile.h
CC init/version.o
CC init/do_mounts.o
CC init/do_mounts_rd.o
Рис. 3: CC - компиляция, LD - сборка модулей
Using username 'vsop'.
Using keyboard-interactive authentication. Password:
vsopWmai1 - $ su -
Пароль:
mail ~ # Is /boot
mail ~ If mount /boot
mail ~ II Is /boot
boot.0800 config-3.15
config initramfs-genkernel-x86-3.14
config-3.14.7 initramfs-genkernel-x86-3.15
mail - # Is -1 /boot
итого 13138
-rw-r--r-- 1 root root 512 июн 17 17:38 lrwxrwxrwx 1 root root 17 okt 16 15:24 -rw-r--r-- 1 root root 71324 июн 17 16:06 -rw-r—r— 1 root root 72222 июн 17 19:10 -rw-r--r-- 1 root root 1312300 июн 17 16:15 -rw-r--r-- 1 root root 1312260 июн 17 19:12 lrwxrwxrwx 1 root root 36 okt 16 15:25
drwx------ 2 root root 12288 июн 11 15:41
lrwxrwxrwx 1 root root 21 okt 16 15:25 -rw-r--r-- 1 root root 1661952 июн 17 16:06 -rw-r-~r-- 1 root root 1677848 июн 17 19:10 lrwxrwxrwx 1 root root 18 okt 16 15:25 -rw-r--r-- 1 root root 3610688 июн 17 16:07 -rw-г--г-- 1 root root 3655856 июн 17 19:11 mail - # |
initramfs.img System.map-3.14.7 vmlinuz-3.14.7 7 lost+found System.map-3.15 vmlinuz-3.15 0 System.map vmlinuz
boot.0800
config -> /boot/config-3.15 config-3.14.7 config-3.15
initramfs-genkernel-x86-3.14.7 initramfs-genkernel-x86-3.15.0
initramfs.img -> /boot/initramfs-genkernel-x86-3.15.0 lost+found
System.map -> /boot/System.map-3.15
System.map-3.14.7
System.map-3.15
vmlinuz -> /boot/vmlinuz-3.15
vmlinuz-3.14.7
Ш11ШВВЗ
Рис. 4
Как правило, чтобы снова создать дефолтное ядро, нужно сделать на него ссылку и оно будет загружаться по умолчанию. По умолчанию будет загружаться ядро 3.15. В этом же каталоге может лежать файл system.map -вспомогательный файл, он генерируется по умолчанию, используется ядром системы и содержит символьную таблицу адресов функции ядра. Предназначен этот файл, главным образом, для откладки в аварийной ситуации и генерируется автоматически. При необходимости, его можно собрать самому при помощи команды «ln» (mail ~ # ln) и он будет собран автоматически. У каждого ядра свой system.map и, по умолчанию, на дефолтное ядро делается символьная ссылка с именем system.map. Конфигурационный файл у каждой версии ядра свой. Еще один файл, который раньше был не обязателен, а сейчас, чаще всего, нужен, это initRAMFS / initrd (расшифровывается InitRAMDisk). До 2012 года можно было обходиться без этого файла. В 2012 году был выпущен менеджер устройств - udev 181. В целях упрощения загрузки ядра, старта системы, выхода системы из сна, этот менеджер устройств был упрощен, начиная с версии 181. И теперь, по умолчанию, если у нас каталог usr монтируется в отдельный дисковой раздел без initRAMFS, то система не запустится. InitRAMFS - это стартовый образ файловой системы, который, при старте системы создается в памяти. Эта начальная стартовая система содержит информацию о модулях ядра и утилиты для работы с файловой системой, в том числе, утилита fsc для проверки целостности файловой системы. Эта утилита необходима, потому что модуль ядра и, в частности, драйвер дисковой системы, может находиться на диске. И для того, чтобы его загрузить, предварительно требуется смонтировать дисковые системы. Для того чтобы получить доступ к диску, необходимо загрузить модель. Для того чтобы загрузить модуль, необходимо смонтировать диск. В результате, данных принятых соглашений по упрощению, сейчас отдельно смонтированный каталог usr при старте системы, без этого начального образа не смонтируется. Именно для этого и делается initRAMFS, тогда старт происходит и монтируется любая файловая система без проблем. InitRAMFS на производительность и на безопасность системы не влияет. Как только система стартовала, этот начальный образ системы будет смонтирован в штатные жесткие диски. Не стоит избегать, также, каталога usr в отдельном дисковом разделе. Расположение каталога usr в корне и в корневой файловой системе чревато массой неприятностей. Поэтому с initRAMFS лучше примириться и научиться с ней работать.
Список литературы:
1. Нефедова И.В. Методика конфигурации ядра Linux // Современные образовательные технологии в мировом учебно-воспитательном пространстве. - 2015. - № 2. - С. 49-53.
2. Балдина А.Д., Нефедова И.В. Применение сетей Петри в моделировании динамических систем // Будущее Науки-2014: сб. науч. ст. 2-й Меж-дунар. молодежи. науч. конф. - Курск: ЗАО «Университетская книга», 2014. -С. 79-81.
3. Лунгу К.Н., Макаров, Е.В. Нефедова И.В. Основы проектирования учебно-методического комплекса по математике для студентов технических специальностей // Наука и современность. - 2014. - № 27. - С. 70-74.
4. Макаров Е.В., Монахов И.А., Нефедова И.В. Двуосное растяжение пластины с круговым отверстием // Вестник российского университета дружбы народов. Серия: Инженерные исследования. - М.: Изд-во: Российский университет дружбы народов, 2015. - № 1. - С. 100-105. - ISSN: 2312-8143.