
Исходный код ядра Linux 3.0.35 с акцентом на CVE-2019-10220, предоставляющий справочный материал для анализа уязвимостей и исследований по эксплуатации.
Linux kernel release 3.x http://kernel.org/
Это примечания к выпуску для Linux версии 3. Внимательно прочитайте их, поскольку они рассказывают, что это такое, объясняют, как установить ядро, и что делать, если что-то пошло не так.
ЧТО ТАКОЕ LINUX?
Linux — это клон операционной системы Unix, написанный с нуля Линусом Торвальдсом при помощи слабо связанной команды хакеров через Интернет. Он нацелен на соответствие POSIX и Single UNIX Specification.
Он имеет все функции, которые вы ожидаете от современной полноценной Unix, включая настоящую многозадачность, виртуальную память, разделяемые библиотеки, подкачку по требованию, исполняемые файлы с копированием при записи, правильное управление памятью и многоуровневую сеть, включая IPv4 и IPv6.
Он распространяется под лицензией GNU General Public License — подробнее см. в сопроводительном файле COPYING.
НА КАКОМ ОБОРУДОВАНИИ ОН РАБОТАЕТ?
Хотя первоначально разработанный для 32-битных x86-совместимых ПК (386 или выше), сегодня Linux также работает (как минимум) на архитектурах Compaq Alpha AXP, Sun SPARC и UltraSPARC, Motorola 68000, PowerPC, PowerPC64, ARM, Hitachi SuperH, Cell, IBM S/390, MIPS, HP PA-RISC, Intel IA-64, DEC VAX, AMD x86-64, AXIS CRIS, Xtensa, Tilera TILE, AVR32 и Renesas M32R.
Linux легко портируется на большинство 32- или 64-битных архитектур общего назначения, при условии наличия у них страничного блока управления памятью (PMMU) и порта компилятора GNU C (gcc) (часть набора компиляторов GNU, GCC). Linux также был портирован на ряд архитектур без PMMU, хотя функциональность при этом, очевидно, несколько ограничена. Linux также был портирован сам на себя. Теперь вы можете запускать ядро как приложение пользовательского пространства — это называется UserMode Linux (UML).
ДОКУМЕНТАЦИЯ:
В Интернете и в книгах доступно множество документации как в электронной форме, так и на бумаге, как специфичной для Linux, так и касающейся общих вопросов UNIX. Я рекомендую посмотреть подкаталоги документации на любом FTP-сайте Linux для книг LDP (Linux Documentation Project). Этот README не предназначен для документации по системе: существуют гораздо лучшие источники.
В подкаталоге Documentation/ есть различные файлы README: они обычно содержат специфичные для ядра заметки по установке некоторых драйверов, например. См. Documentation/00-INDEX для списка того, что содержится в каждом файле. Пожалуйста, прочитайте файл Changes, так как он содержит информацию о проблемах, которые могут возникнуть при обновлении вашего ядра.
Подкаталог Documentation/DocBook/ содержит несколько руководств для разработчиков и пользователей ядра. Эти руководства могут быть преобразованы в ряд форматов: PostScript (.ps), PDF, HTML и man-страницы, среди прочих. После установки команды "make psdocs", "make pdfdocs", "make htmldocs" или "make mandocs" преобразуют документацию в запрошенный формат.
УСТАНОВКА ИСХОДНОГО КОДА ЯДРА:
Если вы устанавливаете полные исходники, поместите tarball ядра в каталог, где у вас есть права (например, ваш домашний каталог), и распакуйте его:
gzip -cd linux-3.X.tar.gz | tar xvf -
или bzip2 -dc linux-3.X.tar.bz2 | tar xvf -
Замените "XX" номером версии последнего ядра.
НЕ используйте область /usr/src/linux! В этой области находится (обычно неполный) набор заголовочных файлов ядра, которые используются библиотечными заголовочными файлами. Они должны соответствовать библиотеке и не должны быть испорчены тем, что случилось с ядром сегодня.
Вы также можете обновляться между выпусками 3.x с помощью патчей. Патчи распространяются в традиционном gzip и новом формате bzip2. Чтобы установить с помощью патча, получите все новые файлы патчей, войдите в корневой каталог исходного кода ядра (linux-3.x) и выполните:
gzip -cd ../patch-3.x.gz | patch -p1
или bzip2 -dc ../patch-3.x.bz2 | patch -p1
(повторите xx для всех версий больше, чем версия вашего текущего дерева исходников, по порядку) и всё должно быть в порядке. Возможно, вы захотите удалить резервные файлы (xxx~ или xxx.orig) и убедиться, что нет неудачных патчей (xxx# или xxx.rej). Если они есть, значит, ошибка либо ваша, либо моя.
В отличие от патчей для ядер 3.x, патчи для ядер 3.x.y (также известные как -stable ядра) не являются инкрементальными, а применяются непосредственно к базовому ядру 3.x. Пожалуйста, прочитайте Documentation/applying-patches.txt для получения дополнительной информации.
Альтернативно, скрипт patch-kernel может быть использован для автоматизации этого процесса. Он определяет текущую версию ядра и применяет любые найденные патчи.
linux/scripts/patch-kernel linux
Первый аргумент в команде выше — это местоположение исходного кода ядра. Патчи применяются из текущего каталога, но альтернативный каталог может быть указан вторым аргументом.
Если вы обновляетесь между выпусками с помощью патчей стабильной серии (например, patch-3.x.y), обратите внимание, что эти «точечные выпуски» не являются инкрементальными и должны применяться к базовому дереву 3.x. Например, если ваше базовое ядро — 3.0, и вы хотите применить патч 3.0.3, вы не должны и, более того, не должны сначала применять патчи 3.0.1 и 3.0.2. Аналогично, если у вас работает ядро версии 3.0.2, и вы хотите перейти на 3.0.3, вы должны сначала откатить патч 3.0.2 (то есть patch -R) перед применением патча 3.0.3. Подробнее об этом можно прочитать в Documentation/applying-patches.txt
Убедитесь, что у вас нет устаревших .o файлов и зависимостей:
cd linux
make mrproper
Теперь у вас должны быть правильно установлены исходники.
ТРЕБОВАНИЯ К ПРОГРАММНОМУ ОБЕСПЕЧЕНИЮ
Компиляция и запуск ядер 3.x требует актуальных версий различных пакетов программного обеспечения. Обратитесь к Documentation/Changes за минимальными требуемыми номерами версий и инструкциями по получению обновлений для этих пакетов. Имейте в виду, что использование чрезмерно старых версий этих пакетов может вызвать косвенные ошибки, которые очень трудно отследить, поэтому не предполагайте, что вы можете просто обновить пакеты, когда очевидные проблемы возникнут во время сборки или работы.
КАТАЛОГ СБОРКИ для ядра:
При компиляции ядра все выходные файлы по умолчанию будут храниться вместе с исходным кодом ядра. Использование опции "make O=output/dir" позволяет указать альтернативное место для выходных файлов (включая .config). Пример: исходный код ядра: /usr/src/linux-3.N каталог сборки: /home/name/build/kernel
Для настройки и сборки ядра используйте: cd /usr/src/linux-3.N make O=/home/name/build/kernel menuconfig make O=/home/name/build/kernel sudo make O=/home/name/build/kernel modules_install install
Пожалуйста, обратите внимание: если используется опция 'O=output/dir', она должна использоваться для всех вызовов make.
КОНФИГУРАЦИЯ ядра:
Не пропускайте этот шаг, даже если вы обновляетесь только на одну минорную версию. В каждом выпуске добавляются новые опции конфигурации, и могут возникнуть странные проблемы, если файлы конфигурации не настроены должным образом. Если вы хотите перенести существующую конфигурацию в новую версию с минимальными усилиями, используйте "make oldconfig", который спросит вас только о новых параметрах.