- Установка Linux-2.4.19
- Установка заголовочных файлов ядра
- Пояснения команд
- Почему мы копируем заголовки ядра, а не создаем для них символические ссылки?
- Содержимое Linux
- Файлы поддержки
- Описания
- Ядро Linux
- linux kernel headers
- Зависимости Linux
- Как установить заголовочные файлы ядра в Linux
- Установка заголовочных файлов ядра в Debian, Ubuntu или Linux Mint
- Установка заголовочных файлов ядра в Fedora, CentOS или RHEL
- Удаление неиспользуемых ядер в Linux
- Что такое «неиспользуемые» ядра и почему они накапливаются в системе?
- Удаление ядер с помощью системы управления пакетами
- Удаление сразу нескольких ядер
- Использование специализированных утилит — скрипт purge-old-kernels
- [тупой вопрос] Зачем нужен linux-headers?
Установка Linux-2.4.19
Установка заголовочных файлов ядра
На данном этапе мы не будем компилировать ядро — мы сделаем это после установки всех пакетов. Однако, в связи с тем, что некоторые пакеты требуют заголовочных файлов ядра, мы распакуем ядро, настроим его и скопируем заголовки туда, где их будут искать пакеты при компиляции.
Скопируем заголовки ядра, выполнив следующие команды:
Пояснения команд
ln -s /static/bin/pwd /bin/pwd: В исходных кодах ядра путь к программе pwd прописан как /bin/pwd, поэтому создадим временную символическую ссылку, а в конце удалим ее.
make mrproper: Выполнение данной команды обеспечивает чистое дерево исходников ядра. Команда разработчиков ядра рекомендует выполнять эту команду перед каждой компиляцией ядра, даже если вы только что распаковали исходные коды из tar-архива.
make include/linux/version.h и make symlinks: Создадим файл include/linux/version.h file и символическую ссылку include/asm для конкретной платформы.
mkdir /usr/include/asm , cp include/asm/* /usr/include/asm и cp -R include/asm-generic /usr/include: Эти команды копируют заголовочные файлы ядра ассемблера для конкретной платформы в /usr/include/asm и /usr/include/asm-generic.
cp -R include/linux /usr/include: Эта команда копирует кросс-платформенные файлы заголовков в /usr/include.
touch /usr/include/linux/autoconf.h: Создаем пустой файл autoconf.h. Так как на данном этапе мы не конфигурируем ядро, необходимо вручную создать этот файл для некоторых заголовочных файлов ядра, использующих его, чтобы избежать ошибок при компиляции.
Почему мы копируем заголовки ядра, а не создаем для них символические ссылки?
Раньше было принято создавать символические ссылки директорий /usr/include/ на /usr/src/linux/include/ . Однако, это была плохая идея, как объясняет Линус Торвальдс в списке рассылки ядра Linux (Linux Kernel Mailing List, отрывок):
Наиболее важная часть сообщения Линуса заключается в том, что файлы заголовков должны быть именно теми, с которыми компилировался пакет glibc. Это те заголовки, которые следует использовать в будущем при компиляции других пакетов, т.к. именно они соответствуют файлам библиотек объектного кода. Копируя заголовки, мы удостоверяемся, что они останутся доступными, если позже мы решим обновить ядро.
Заметьте, что нет ничего страшного в том, что исходные коды ядра находятся в директории /usr/src/linux. Главное, чтобы у вас не было символических ссылок /usr/include/ .
Содержимое Linux
Последняя проверка: версия 2.4.18.
Файлы поддержки
Ядро Linuxи и его заголовочные файлы
Описания
Ядро Linux
Ядро — основа любой системы Linux. Когда компьютер включается и загружает Linux, первое, что загружается — ядро. Ядро инициализирует аппаратные компоненты системы: последовательные и параллельные порты, звуковые и сетевые карты, контроллеры IDE и SCSI и многое другое. In a nutshell the kernel makes the hardware available so that the software can run.
linux kernel headers
Это файлы, которые мы копируем в /usr/include/ в 5-й главе. Они должны соответствовать тем, с которым был скомпилирован glibc, и поэтому не должны быть заменены при смене ядра. Они имеют ключевое значение для компиляции многих программ.
Зависимости Linux
Последняя проверка: версия 2.4.17.
Bash: sh
Binutils: ar, as, ld, nm, objcopy
Fileutils: cp, ln, mkdir, mv, rm, touch
Findutils: find, xargs
Gcc: cc1, collect2, cpp0, gcc
Grep: grep
Gzip: gzip
Make: make
Gawk: awk
Modutils: depmod, genksyms
Net-tools: dnsdomainname, hostname
Sed: sed
Sh-utils: basename, date, expr, pwd, stty, uname, whoami, yes
Textutils: cat, md5sum, sort, tail
Источник
Как установить заголовочные файлы ядра в Linux
Когда вы компилируете драйвер устройства как модуль ядра, вам необходимы установленные заголовочные файлы ядра. Также они требуются, если вы собираете пользовательское приложение, которое взаимодействует напрямую с ядром. При установке заголовочных файлов ядра, необходимо убедиться, что их версия совпадает с версией ядра установленного в системе.
Если версия вашего ядра не менялась после установки дистрибутива, или вы обновляли его с использованием системного менеджера пакетов (то есть apt-get, aptitude или yum) из системных репозиториев, то заголовочные файлы вы также можете установить с помощью пакетного менеджера. Однако если вы скачивали исходный код ядра и компилировали его самостоятельно, то заголовочные файлы необходимо устанавливать с помощью команды make.
Здесь мы предполагаем, что ваше ядро установлено из основного системного репозитория вашего дистрибутива, и вы хотите установить соответствующие заголовочные файлы ядра.
Установка заголовочных файлов ядра в Debian, Ubuntu или Linux Mint
Если вы не компилировали ядро вручную, то можете установить соответствующие заголовочные файлы ядра с помощью команды apt-get.
Сначала проверьте, не установлены ли уже требуемые заголовочные файлы с помощью команды:
Теперь установите заголовочные файлы, как показано ниже.
Проверьте, что установка прошла успешно.
По умолчанию в Debian, Ubuntu или Linux Mint заголовочные файлы находятся в /usr/src.
Установка заголовочных файлов ядра в Fedora, CentOS или RHEL
Если вы не обновляли ядро вручную, то можете установить соответствующие заголовочные файлы ядра с помощью команды yum.
Сначала проверьте, не установлены ли уже требуемые заголовочные файлы. По умолчанию заголовочные файлы ядра расположены в /usr/src/kernels/.
Если подходящих заголовочных файлов не установлено, вы можете установить их с помощью команды yum. Она автоматически найдет подходящий пакет.
Если заголовочные файлы ядра, установленные с помощью вышеприведенной команды, не соответствуют установленному в системе ядре, значит оно устарело. В этом случае обновите ядро системы до последней версии с помощью приведенной ниже команды. После обновления необходимо перезагрузить систему.
Теперь проверьте, что установлены заголовочные файлы соответствующей версии с помощью команды:
Источник
Удаление неиспользуемых ядер в Linux
Довольно часто некоторые начинающие (и наблюдательные) пользователи Linux-систем замечают, что со временем на системных разделах заметно уменьшается объём свободного дискового пространства. Причём такие изменения происходят совсем не от установки дополнительного программного обеспечения (ПО). А в результате обновлений системы. Малоопытные пользователи сетуют: ситуация, схожая с тем, как в системах Windows. Новые обновления занимают значительный объём свободного места на системном разделе. Однако, всё совершенно не так, как в Windows. И главной особенностью является то, что в отличие от Windows, ситуацию можно и нужно исправить. Причём абсолютно корректно, полностью вернув утраченное свободное место.
Что такое «неиспользуемые» ядра и почему они накапливаются в системе?
Для системного ядра Linux, как и для других поддерживаемых пакетов системы разработчиками выпускаются обновления. Для ядер это особенно критично. Поскольку это напрямую влияет на безопасность и стабильность работы всей системы. Именно поэтому и именно для системного ядра обновления выпускаются регулярно.
Но дело ещё и в том, что когда для системы выпускается новая версия Linux-ядра. То оно (новое ядро) будет установлено как отдельное независимое ядро. В процесс его установки также входит автоматическая настройка загрузчика GRUB. Для того, чтобы свежеустановленное ядро загружалось им по-умолчанию. При этом, как правило, старые ядра не удаляются. Это сделано для того, чтобы как можно в более полной степени следовать концепции «Unix Way». Которая, в частности, предполагает предотвращение всяческой самодеятельности, дабы не навредить системе. В случае с установкой новых версий ядер, старые не удаляются, чтобы дать возможность пользователю их использовать. Если с новым ядром возникнут какие-либо неполадки.
Стоит заметить, что в зависимости от «комплектности» ядер, они могут, занимать свыше 300 мегабайт дискового пространства. Нетрудно представить, какой объём в таком случае занимают несколько неиспользуемых старых ядер.
В данной статье будут рассмотрены способы очистки системы от неиспользуемых ядер на примере дистрибутивов Ubuntu. Так, например, для этих систем (как впрочем и для большинства других Linux-дистрибутивов) ядро представляет собой набор из следующих пакетов:
- linux-headers-[версия] – заголовочные файлы ядра;
- linux-image-[версия] – бинарный образ ядра;
- linux-extra-[версия] – дополнительные внешние модули ядра для расширения функционала.
При установке и удалении перечисленных пакетов также выполняются и служебные скрипты для настройки системного загрузчика. Это необходимо для очистки его конфигурации (или для добавления в неё) в соответствии с установленными (или удаляемыми) в системе ядрами.
Удаление ядер с помощью системы управления пакетами
Для начала необходимо разобраться, есть ли в системе неиспользуемые ядра и сколько их. Также, первым делом, нужно определить, какое ядро является основным:
Как можно видеть, в качестве основного ядра (то, которое загружает загрузчик GRUB по-умолчанию) является версия 4.18.0-18.
Теперь можно выяснить, какие ещё ядра присутствуют в системе. На примере Ubuntu для этого используется команды менеджера пакетов dpkg:
Для первой команды вывод может быть примерно таким:
Похожий вывод даст вторая команда, но с тем лишь отличием, что в наименовании пакетов будет указано «linux-headers». Как можно видеть, кроме основного ядра версии 4.18.* в системе присутствуют также ядра из семейства версии 4.15 — 43, 46 и 47. От первых двух не мешало бы избавиться, высвободив таким образом значительный объём дискового пространства. А вот ядро 4.15.0-47 рекомендуется оставить как резервное. Это обычная практика в Linux-системах — иметь на борту альтернативное ядро предыдущей версии со стабильными проверенной конфигурацией и набором модулей.
Следует не забывать, выполнять вышеприведённые команды для пакетов linux-extra – они также могут присутствовать в системе. Но гораздо реже, поскольку данные пакеты чаще всего устанавливаются вручную.
Теперь, когда решено удалить неиспользуемые ядра версий 4.15.0-43 и 4.15.0-46, можно воспользоваться командами системы управления пакетами (СУП) для используемого дистрибутива. В данном случае, для Ubuntu, следует выполнить следующие команды:
Во время удаления этих пакетов конфигурация загрузчика GRUB будет автоматически перенастроена, ничего вручную для этого делать не нужно. Следует отметить, что в системе также могут присутствовать версии ядер без «generic» в наименовании пакетов. Если такие ядра не нужны, то и их также рекомендуется удалить. Изменения для GRUB можно заметить при следующей перезагрузке системы. В меню загрузчика (если в его конфигурации включен вывод меню выбора) будут отсутствовать пункты для соответствующих удалённых ядер.
Удаление сразу нескольких ядер
Нередко старых ядер накапливается довольно много. И при их удалении одной командой apt-get purge не совсем удобно перечислять наименования пакетов всех ядер. Чтобы сделать команду удаления ядер более удобочитаемой, а также сэкономить время на её составление. Можно воспользоваться некоторыми возможностями командной строки. Такими как регулярные выражения. В этом случае для удаления двух ядер версий 4.15.0-43 и 4.15.0-46. Включая их образы и заголовочные файлы запись соответствующих команд будет выглядеть следующим образом:
Следует отметить, что данный синтаксис возможен только при использовании командных интерпретаторов Bash, а также ему подобных.
Использование специализированных утилит — скрипт purge-old-kernels
Некоторые пользователи могут и не решиться на такие действия как удаления ядер в силу малоопытности. Для подобных ситуаций во многих дистрибутивах Linux в арсенале стандартного репозитория имеются специализированные утилиты, которые позволяют безопасно выполнять самые ответственные действия с системой. Одной из таких утилит является bikeshed, которую можно установить из одноимённого пакета:
В набор этой утилиты входит скрипт purge-old-kernels для безопасной очистки системы от неиспользуемых ядер. Скрипту можно передавать параметр, указывающий, сколько ядер самых свежих версий оставить в системе. Например, для того, чтобы оставить только два самых свежих ядра:
Как и в случае с удалением ядер с помощью СУП, беспокоиться о перенастройке GRUB не стоит, поскольку данный скрипт это также умеет делать. Но если вдруг конфигурация загрузчика не была обновлена, то можно это сделать вручную, выполнив команду:
В заключение следует отметить, что использование скрипта purge-old-kernels является наиболее предпочтительным способом очистить систему от старых ядер. Главным преимуществом данного способа является его надёжность и универсальность, поскольку этот скрипт корректно удаляет даже те ядра, которые устанавливались в систему вручную путём сборки из исходных кодов.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
[тупой вопрос] Зачем нужен linux-headers?
Если я компилирую ядро в домашней директории под юзером,из сырцов, скачанных из основных реп, то как добавить linux-headers, если он установлен в /usr/src/ ? Гуглил, но так и не понял, нужен ли linux-headers для компиляции. Если нужен, то для чего?
> Зачем нужен linux-headers?
Для сборки модулей ядра.
Дополнительных? Они же есть в linux-source.
Модули могу удалять или вставлять в ядро. Про linux-headers ничего не сказано.
А модуль для драйверов nvidia тоже в linux-source есть? Что-то не замечал.
а случайно ли не для сборки модулей nvidia, etc. для текущего ядра?
Скорее всего. У меня ати и открытые драйвера. Никогда не ставил linux-headers
исходники не нужны в таком случае.
make headers_install
find usr -name .install -delete
sudo cp -r usr /
или я тебя не правильно понял?
Компилять модули же.
не понимаю сути проблемы-вопроса.. казалось бы, пишешь, что надо, используешь необходимые заголовочные файлы с определениями, обьявлениями.. если таковых не оказывается, то либо ищутся наиболее подходящие, либо пишутся собственные реализации..
а в чём, собственно, суть вопроса?
Для компиляции ядра в твоей схеме linux-headers не нужен, все идет в архиве ядра.
linux-headers нужен для компиляции программ/библиотек плотно работающих с ядром, точнее работающих в некоторых случаях с ядром не через glibc. Ну вот утилита mount например. Модули тут дело десятое.
c scsi/ лучше это не делать, потом не соберутся ни sg_utils , ни писалки дисков, scsi/ предоставляется glibc
asm/
обычно используется гораздо чаще чем вы думаете )
как н странно, но, обычно, это просто ассоциируется с кривыми зависимостями..
соберутся. достаточно в scsi.h в struct scsi_varlen_cdb_hdr изменить u8 на __u8
Источник