Все о Linux. LinuxRSP.Ru


Cвежие новости Linux и BSD, анонсы статей и книг прямо в почтовый ящик!
Подписаться письмом


 Сегодняшние новости:

25 лет исполнилось ядру Linux

Релиз KDevelop 5.0

Oracle открывает код JDK9 для ARM

Выпущен Timewarrior 1.0.0

Релиз Android 7.0

Percona Memory Engine для MongoDB на базе WiredTiger

PowerShell открыт и доступен для Linux

Форк TrueCrypt: VeraCrypt 1.18

Релиз Snapcraft 2.14

Релиз Go 1.7

Стабильный выпуск рабочего стола Lumina

Вышла первая версия аналога OpenCV - DCV 0.1

Выпуск минималистичной программы для мониторинга jsonmon 3

В MIT разработали новый язык программирования

Первый релиз Qt5Gtk2

Godot 2.1 - новая версия открытого игрового движка

Свободная цифровая станция звукозаписи: Ardour 5.0

Обновление SkypeWeb Plugin for Pidgin

Вышла версия 3.0 Android File Transfer для Linux (и для OS X)

Программный аналог MIDI-контроллера для создания музыки: Launchpadd v1.3

Mozilla спонсирует поддержку Python 3.5 в PyPy

Ef 0.08 - программа для моделирования динамики заряженных частиц

Обновление текстового редактора TEA до версии 42.0.0

Релиз OpenOrienteering Mapper 0.6.4

Вышли Guix и GuixSD 0.11

Релиз Opera 39

Выпуск LibreOffice 5.2

В OpenSSH обнаружены и устранены некоторые уязвимости

Эмулятор FCEUX 2.2.3

Компания Билайн переходит на российскую СУБД с открытым исходным кодом Tarantool

Google

 Новые статьи :

Утилиты для восстановления потерянных данных в Linux

Лучшие файловые менеджеры для Android

20 лучших бесплатных книг о Linux

Как сгенерировать открытый/закрытый SSH-ключ в Linux

Grive - клиент Google Drive для Linux с открытым исходным кодом

Протокол IPv6: варианты подключения

Сервер из образа: DHCP + TFTP + Initrd + OpenVZ

Обзор веб-панелей управления хостингом

Приёмы работы с Vim

Nginx как Reverse Proxy для сайта, использующего SSL

Разработка модулей ядра Linux

Мониторинг нагрузки http-сервера Apache 2

Перевод комментариев к файлу конфигурации Squid

Решение проблем при использовании "1c предприятие" 8.2 в Linux

Advanced Bash-Scripting Guide Искусство программирования на языке сценариев командной оболочки







Rambler's Top100





 
 

О компиляции ядра 2.6.0. Часть 1 + часть 2

В.А.Костромин оригинал

О компиляции ядра 2.6.0. Часть 1. Файл README

Всего несколько дней назад я закончил писать заметку о компиляции ядра, а тут вчера (18.12.2003 г.) Линусом Торвальдсом было выпущено ядро 2.6.0 и появился повод вернуться к этому вопросу еще раз (это даже не первый возврат к данной теме, учитывая, что о компиляции ядра я уже рассказывал в книге [1]).

Архив с исходными кодами ядра я скачал в тот же день, как увидел в Интернет объявление о выходе новой версии ядра. Архив это "весит" 32 475 Килобайт. Между прочим, объем исходных кодов ядра неуклонно растет, о чем свидетельствует следующая табличка:

Таблица 1.

Версия ядра Объем tar-bz2-архива Объем исходных кодов после разархивации
2.2.0 10 345 Kb нет данных
2.4.2 20 019 Kb 108 000 Kb
2.4.18 29 402 Kb 147 516 Kb
2.4.23 29 133 Kb 186 500 Kb
2.6.0 32 474 Kb 211 996 Kb

Скопировал я архив в тот же каталог /usr/src и разархивировал командой

[root]# tar xvfj kernel-2.6.0.tar.bz2

Появился подкаталог linux-2.6.0, в который я и перешел. Уже было ринулся компилировать новое ядро, руководствуясь своей книгой [1] и сделанными недавно заметками [2], но прочитал файлы README и ./Documentation/Changes и понял, что процедура компиляции этой версии ядра будет существенно отличаться от компиляции предыдущих версий. Пришлось заниматься переводом и внимательным изучением этих двух файлов. С изложения результатов этого изучения я и начну свои заметки. В этой части я расскажу что нашел полезного в файле README.

  1. В подкаталоге Documentation содержится масса документации по ядру и смежным вопросам. В файле ./Documentation/00-INDEX вы можете найти краткую справку о том, что содержится в каждом файле. В файлах и подкаталогах каталога Documentation/ обычно содержатся замечания по установке различных драйверов для данного конкретного варианта ядра. Обязательно прочитайте файл Changes, поскольку он содержит информацию о проблемах, которые могут возникнуть в процессе перехода на новую версию ядра.
  2. В подкаталоге Documentation/DocBook содержится несколько руководств для пользователей и разработчиков. Эти руководства можно преобразовать в форматы Postscript (.ps), PDF или HTML, для чего надо дать, соответственно, команды "make psdocs", "make pdfdocs" или "make htmldocs". Я решил получить эту документацию в формате html и выбрал последний вариант команды, однако в результате увидел следующее сообщение об ошибке:
    *** You need to install DocBook stylesheets ***
    make[1]: *** [Documentation/DocBook/wanbook.html] Ошибка 1
    make: *** [htmldocs] Ошибка 2
    
  3. Для того, чтобы скомпилировать и запустить ядро версии 2.6.xx, необходимо, чтобы в вашей системе были установлены достаточно актуальные версии нескольких программных пакетов. В файле ./Documentation/Changes приведены сведения о том, какие версии и каких именно пакетов необходимо иметь. Имейте в виду, что использование более старых версий может привести к появлению в ядре неявных ошибок, которые будет трудно выявить в последующем, но которые могут породить большие проблемы в процессе компиляции и эксплуатации нового ядра.
  4. Перед началом компиляции необходимо удостовериться, что не осталось старых вариантов объектных файлов (.o-файлы) и зависимостей, для чего выполнить команды:
    		cd linux
    		make mrproper
    
  5. НЕЛЬЗЯ использовать каталог /usr/src/linux для компиляции ядра! Этот каталог содержит (обычно неполный) набор заголовочных файлов ядра, которые используются библиотекой заголовочных файлов (by the library header files). Они должны соответствовать используемой в работающей системе библиотеке, поэтому не стоит вносить путаницу. Я сделал для себя вывод, что предпочтительнее создать символическую ссылку с именем linux, указывающую на каталог, соответствующий работающему ядру. На время компиляции эту ссылку следует перенаправить на каталог с исходными кодами ядра (например, linux-2.6.0, чтобы ... как бы чего не вышло!)
  6. По умолчанию файлы нового ядра при компиляции создаются в каталоге с исходными кодами. Но можно с помощью опции "make O=output/dir" указать другой каталог, куда будут размещаться все вновь создаваемые файлы (включая .config). Но имейте в виду: если опция 'O=output/dir' используется, она должна указываться при каждом вызове команды make.
  7. Эта конфигурации ядра является обязательным, даже если вы внесли самые малые изменения в исходные коды ядра! В каждый релиз ядра включаются новые опции конфигурации и если пропустить этап конфигурирования, в дальнейшем могут возникнуть самые разные проблемы. Если вы хотите уменьшить продолжительность этого этапа, вы можете использовать команду "make oldconfig", которая будет задавать вам только те вопросы, которые вновь появились. Следствие: если вы проводите повторную конфигурацию ядра с целью изменить значения только некоторых опций, нужно просто удалить соответствующие строки из файла .config, оставшегося от прошлой компиляции, и выполнить команду "make oldconfig".
  8. Замечания по выполнению конфигурирования ядра командой "make config":
    - включение в ядро драйверов, которые не являются необходимыми делает ядро больше и в некоторых случаях может порождать проблемы: опрос несуществующего контроллера может вызвать конфликты в работе других контроллеров;
    - компилируя ядро для типа процессора, более высокого, чем 386, может привести к тому, что ядро не будет работать на 386-ом процессоре. Ядро обнаружит это при загрузке и откажется работать.
    - ядро, скомпилированное с эмуляцией математического сопроцессора будет использовать этот сопроцессор, если обнаружит его: в этом случае режим эмуляции сопроцессора никогда не будет использован. Ядро в этом случае становится чуть больше, но зато будет работать на любых машинах, независимо от того, имеют они сопроцессор или нет.
    - включение опций, находящихся в стадии разработки и тестирования, обычно приводит к созданию ядра большего по размеру и более медленного (или того и другого вместе), а также может дать менее стабильное ядро. Так что вам, вероятно, лучше отвечать 'n' на те вопросы, которые имеют пометку "development", "experimental" или "debugging".
  9. Для конфигурирования ядра можно использовать альтернативные варианты команд:
    "make menuconfig" конфигурирование с помощью цветного текстового меню, списков выбора и диалогов.
    "make xconfig" конфигурирование в графическом режиме с использованием библиотеки Qt.
    "make gconfig" конфигурирование в графическом режиме с использованием библиотеки Gtk.
    "make oldconfig" используются ответы, записанные в существующем файле ./.config.
  10. Загляните в файл Makefile для того, чтобы задать некоторые опции, специфичные для вашего конкретного компьютера (например, режим SVGA и т.д.).
  11. Убедитесь, что у вас установлен компилятор gcc 2.95.3. Известно, что gcc 2.91.66 (egcs-1.1.2) и gcc 2.7.2.3 неправильно компилируют некоторые части ядра и *более не поддерживаются*. Не забудьте также обновить пакет binutils. Дополнительную информацию смотрите в файле ./Documentation/Changes.
  12. Для того, чтобы создать сжатый образ ядра, используйте команду "make bzImage". Если вы хотите создать загрузочный диск (без корневой файловой системы или LILO), вставьте гибкий диск в дисковод A: и выполните команду "make bzdisk".
  13. Чтобы выполнить инсталляцию ядра, вы должны иметь права суперпользователя, хотя все предыдущие операции можно выполнять от имени простого пользователя. Не используйте права бога всуе!
  14. Если вы сконфигурировали какие-либо части ядра в виде модулей, вы должны будете выполнить команду "make modules", а сразу вслед за ней - команду "make modules_install".
  15. Сохраните резервную копию старого ядра на случай, если что-либо пойдет не так. Не забудьте также сделать резервные копии модулей, соответствующих старому ядру. Если вы ставите ядро с тем же самым номером версии, что и у вашего работающего ядра, создайте резервную копию каталога модулей перед тем, как выполнять команду "make modules_install".
  16. Для того, чтобы загрузить новое ядро, вы должны скопировать образ ядра (после компиляции он находится в файле .../linux/arch/i386/boot/bzImage) туда, где располагаются другие загружаемые ядра.
    В некоторых случаях они размещаются на гибком диске, и в таком случае вы должны скопировать файл bzImage на (в) /dev/fd0, чтобы создать загрузочный диск.
  17. Если вы используете загрузчик LILO, то указание на образ загружаемого ядра должно быть прописано в файле /etc/lilo.conf. Образ ядра обычно располагается в одном из файлов /vmlinuz, /boot/vmlinuz, /bzImage или /boot/bzImage. Для того, чтобы использовать новое ядро, сохраните копию старого образа ядра и скопируйте новый образ поверх старого. Затем вы должны переустановить LILO, чтобы обновить карту загрузки (to update the loading map)!! Если вы этого не сделаете, вы не сможете загрузить новое ядро.
    Переустановка LILO выполняется путем запуска команды /sbin/lilo. Возможно, вы захотите предварительно откорректировать /etc/lilo.conf, для того, чтобы обеспечить возможность загрузки старого образа ядра (скажем, /vmlinux.old) на тот случай, если новое не будет работать. Подробнее смотрите документацию по LILO. После переустановки LILO все должно быть нормально. Перезагружайте систему и наслаждайтесь!
  18. Если вам вдруг потребуется поменять загрузочное устройство, видео-режим, размер виртуального диска и так далее в образе ядра, используйте программу 'rdev' или соответствующую опцию загрузчика LILO. Не требуется перекомпилировать ядро для изменения этих параметров.

Это все, что я нашел полезного в файле README. Постараюсь учесть все эти рекомендации в дальнейшем, а пока давайте почитаем еще файл Documentation/Changes.

О компиляции ядра 2.6.0. Часть 2. Файл Changes.

В этой части я рассмотрю содержание файла Documentation/Changes, поставляемого с исходными кодами ядра версии 2.6.0. Первое, на что я обратил внимание, - это то, что этот документ предполагает, что ваша система уже работает под управлением как минимум ядра 2.4.x. Если это не так, то рекомендуется просмотреть файл Changes, поставляемый с ядрами 2.4.x для получения дополнительной информации: большая часть этой информации не повторяется здесь.

В самом начале файла Changes написано, что имеется уже и русский перевод этого файла, размещающийся по адресу http://oblom.rnc.ru/linux/kernel/Changes.ru. Поскольку в тот момент, когда я первый раз читал файл Changes, у меня не было доступа к Интернет, я не смог сразу проверить, так ли это на самом деле. А когда я все же добрался до Интернета, оказалось, что сайта http://oblom.rnc.ru/ не существует в природе. Видимо, какой-то из наших дуболомов решил устроить облом всем интересующимся новым ядром и сообщил о том, что вот, дескать, имеется русский перевод, включите ссылку в ваш текст. Такие вот гады водятся в земле нашей!

Но это эмоции, а мне так или иначе пришлось продолжать читать английский вариант. Настоящая страница представляет собой достаточно полное изложение содержания файла Documentation/Changes, во всяком случае я постарался привести здесь все ценное, что есть в этом файле.

  1. Во-первых, снова напоминается, что ваша система должна уже работать на ядре версии 2.4.х. Кроме того, должны быть установлены как минимум следующие версии перечисленных ниже программ (в файле Documentation/Changes сказано, как можно определить номер установленной у вас версии, а также дана ссылка на местоположение требуемой версии каждого пакета):

    Таблица 2. Минимальные требования по наличию пакетов в системе.

    Пакет Требуемая версия Команда для определения номера установленной версии Адрес местонахождения нужной версии
    Gnu C 2.95.3 # gcc --version gcc-2.95.3.tar.gz
    Gnu make 3.78 # make --version make-3.78.1.tar.gz
    binutils 2.12 # ld -v binutils
    util-linux 2.10o # fdformat --version util-linux
    module-init-tools 0.9.10 # depmod -V module-init-tools
    e2fsprogs 1.29 # tune2fs e2fsprogs-1.29.tar.gz
    jfsutils 1.1.3 # fsck.jfs -V jfs
    reiserfsprogs 3.6.3 # reiserfsck -V 2>&1|grep reiserfsprogs reiserfsprogs-3.6.3.tar.gz
    xfsprogs 2.1.0 # xfs_db -V xfsprogs-2.1.0.src.tar.gz
    pcmcia-cs 3.1.21 # cardmgr -V pcmcia-cs-3.1.21.tar.gz
    quota-tools 3.09 # quota -V linuxquota
    PPP 2.4.0 # pppd --version ppp-2.4.0.tar.gz
    isdn4k-utils 3.1pre1 # isdnctrl 2>&1|grep version isdn4k-utils.v3.1pre1.tar.gz
    nfs-utils 1.0.5 # showmount --version nfs-utils, nfs-utils
    procps 3.1.13 # ps --version procps
    oprofile 0.5.3 # oprofiled --version OProfile, OProfile
    Очевидно, что не все эти программы абсолютно необходимы в любой системе - если у вас нет, например, устройств PCMCIA (PC Card), то вам нет нужды заботиться о наличии и версии пакета pcmcia-cs.
  2. Требование относительно использования компилятора gcc версии 2.95.x (x >= 3) выдвинуто для достижения абсолютной стабильности ядра. Вы можете использовать gcc 3.0.x, если хотите, хотя при этом могут возникнуть проблемы из-за того, что процесс компиляции ядра с этими продуктами не был достаточно тщательно протестирован. Версия gcc 2.96 от Red Hat тоже может использоваться, но вы должны применять gcc-2.96-74 или более поздние. Имейте в виду, что версия gcc-2.96-54 не создает корректного ядра.
    Что касается опций оптимизации, то будет неразумным задавать что-либо большее, чем -O2. Если вы используете gcc-2.95.x или более поздние версии, не используйте -fstrict-aliasing.
  3. Новые версии пакета util-linux обеспечивают поддержку дисков большего объема, поддержку новых опций команды mount, распознают больше поддерживаемых типов разделов диска, включают команду fdformat, которая работает также и с ядрами серии 2.4, и другие улучшения. Вероятно вам стоит установить обновленную версию этого пакета.
  4. В ядро теперь входит новый загрузчик модулей, которому требуется для работы пакет module-init-tools. Новый загрузчик модулей обратно совместим с ядрами серии 2.4.x.
  5. Эти изменения в структуре каталога /lib/modules требуют также, чтобы был обновлен пакет mkinitrd. (А в таблице 2 пакет mkinitrd почему-то не указан!) Пакет можно найти по следующей ссылке: Mkinitrd
  6. В последних версиях пакета e2fsprogs устранены несколько ошибок в программах fsck и debugfs. Очевидно, что обновление этого пакета является неплохой идеей.
  7. В файле Documentation/Changes рекомендуется также обновить следующие пакеты:
    • Powertweak Этот пакет обеспечивает получение информации об аппаратном обеспечении и ядре Linux и может использоваться для настройки ядра и аппаратуры для достижения максимальной производительности и для просмотра установок аппаратуры и ядра. Если вы используете версию 0.1.17 этого пакета или более раннюю, вы должны обновить ее до версии 0.99.0 или более высокой. Использование старых версий может привести к проблемам при использовании разделяемой памяти.
    • Ksymoops Если случится непредвиденное и ваше новое ядро "упадет", вам потребуется версия 2.4 программы ksymoops для того, чтобы декодировать отчет; за более подробной информацией обратитесь к файлу REPORTING-BUGS в корневом каталоге исходных кодов ядра.
  8. Архитектурные изменения
    • Файловая система DevFS сейчас включена в состав ядра. О деталях вы можете узнать из текстов, приведенных в Documentation/filesystems/devfs/*.
    • Реализована поддержка 32-bit UID. Пользуйтесь!
    • Документация к функциям переносится во встроенную документацию, реализованную в виде специальным образом отформатированных комментариев, размещаемых вместе с их определениями в исходных кодах ядра. Эти комментарии с помощью специальных SGML-шаблонов (templates), размещаемых в каталоге Documentation/DocBook, могут быть преобразованы в DocBook-файлы, которые затем могут конвертироваться посредством DocBook-стилей (DocBook stylesheets) в форматы PostScript, HTML, PDF и некоторые другие. Для того, чтобы конвертировать из формата DocBook в выбранный вами формат, вы должны установить пакет Jade, а также соответствующий выбранному формату DocBook Stylesheets.
    • Поддержка устройств PCMCIA (PC Card) теперь частично реализована в основном коде ядра. Обратите на это внимание, когда будете перекомпилировать ваше ядро ;-).
      И не забудьте поставить последний релиз пакета pcmcia-cs.
    • Intel P6 (IA32) microcode. В ядро был добавлен драйвер, который позволяет обновлять микрокод Intel IA32.
  9. Сетевая поддержка
    • Функции IP-файерволлинга и код NAT были снова переписаны заново. Новое программное обеспечение сетевой фильтрации (включая обратно совместимые модули ipfwadm и ipchains) в настоящее время распространяются отдельно. Если вам небходимы развитые средства сетевого конфигурирования, вам стоит рассмотреть возможность использования сетевых инструментов из пакета ip-route2.
      Необходимые пакеты вы можете найти по следующим ссылкам: iptables-1.2.tar.bz2, iptables-1.2.tar.bz2, iptables-1.2.tar.bz2, Ip-route2.
    • Драйвер PPP был реструктурирован с целью поддержки множественных соединений (multilink) и для обеспечения возможности соединения по разным видам каналов (over diverse media layers). Если вы используете PPP, обновите pppd по меньшей мере до версии 2.4.0.
      Если вы не используете devfs, вы должны создать файл устройства /dev/ppp, что делается от имени root-а командой :
      mknod /dev/ppp c 108 0
      
      Если вы решили обеспечить поддержку ppp в виде модуля, вы должны вписать следующие строки в файл /etc/modules.conf:
      alias char-major-108	ppp_generic
      alias /dev/ppp		ppp_generic
      alias tty-ldisc-3	ppp_async
      alias tty-ldisc-14	ppp_synctty
      alias ppp-compress-21	bsd_comp
      alias ppp-compress-24	ppp_deflate
      alias ppp-compress-26	ppp_deflate
      
      Если вы используете devfsd и поддержка ppp реализована в виде модуля, вы должны иметь следующую строку в файле /etc/devfsd.conf:
      LOOKUP	PPP	MODLOAD
      
    • Isdn4k-utils. Из-за изменения в длине поля телефонного номера утилита isdn4k-utils должны быть перекомпилирована или (что предпочтительнее) обновлена.
    • NFS-utils. В ядрах версии 2.4 и более ранних nfs-сервер должен был знать о всех клиентах, которые могли иметь доступ к файлам посредством протокола NFS. Эту информацию ядро могло получить от демона "mountd" в тот момент, когда клиент монтировал файловую систему, либо от "exportfs" на этапе старта системы. exportfs получал информацию об активных клиентах из /var/lib/nfs/rmtab.
      Такой подход довольно ненадежен, поскольку зависит от корректности rmtab, что не всегда обеспечивается. Даже если система работает хорошо, rmtab имеет тот недостаток, что содержит массу устаревших записей, которые никогда не удаляются.
      В версии 2.6 появилась опция, в соответствии с которой ядро сообщает демону mountd о том, что он получен запрос от неизвестного хоста, и mountd может дать ядру соответствующую информацию об экспортируемых ресурсах. Таким образом устраняется зависимость от rmtab и ядру теперь необходимо знать только об активных в данный момент клиентах.
      Чтобы задействовать эти новые возможности, вы должны до запуска exportfs или mountd выполнить команду:
        mount -t nfsd nfsd /proc/fs/nfs
      
      Рекомендуется чтобы все NFS-сервисы были защищены со стороны Интернет файерволами.

В отличие от исходных кодов ядра версии 2.4.х я не обнаружил в каталоге Documentation файла Configure.help, содержащего подсказки к опциям конфигурации ядра. В книге [1] я рекомендовал распечатать этот файл и использовать его как подсказку на этапе конфигурирования ядра. Как следует из приведенного выше объяснения теперь комментарии встроены в ядро и чтобы их распечатать, надо еще предварительно установить пакеты Jade и DocBook Stylesheets. А иначе придется пользоваться только встроенной подсказкой.

Ну что ж, пора переходить к практическим действиям: Часть 3. Процесс конфигурации нового ядра. (в процессе написания)

Список литературы и ссылки.

  1. В.А.Костромин, "Linux для пользователя", изд. БХВ-Петербург, 2002 год, серия "Самоучитель", 650 стр.
  2. "Второй этюд о компиляции ядра из исходных кодов."

      

Связь | О проекте LinuxRSP | Реклама | О Linux
© 1999-2017 LinuxRSP