Где именно находится файл linux / kernel.h?

Краткий ответ

Я думаю, что самый надежный способ сделать это - установить неизменяемый resolv.conf . После того, как вы установите его так, как вы хотите, вы просто запустите

sudo chattr +i /etc/resolv.conf

Чтобы отредактировать его снова, вам нужно удалить неизменяемый флаг:

sudo chattr -i /etc/resolv.conf

Альтернативный ответ

Приложение, которое помещает это сообщение в / etc / resolv .conf называется resolvconf . Вы можете удалить свой пакет resolvconf с помощью (я предполагаю, что здесь debian или ubuntu, но я думаю, что resolvconf - это вещь Debian):

sudo apt-get remove resolvconf

Я удаляю его на своих компьютерах, потому что я обнаружили, что у меня больше шансов подключиться с правильными настройками /etc/resolv.conf в странных ситуациях (в частности, Wi-Fi в отеле или аэропорту), когда у меня нет resolvconf установлен. resolvconf также выполняет другие функции, такие как кеширование DNS, и, возможно, некоторые другие вещи, без которых я могу жить. Вы можете изучить, что все это делает, прежде чем удалить его.

Важные примечания

Удаление resolvconf не гарантирует, что ваш /etc/resolv.conf останется неизменным. Другие программы, такие как dhclient , вносят изменения в /etc/resolv.conf . Если вы запускаете сетевой менеджер, он также может редактировать /etc/resolv.conf . У меня нет большого опыта работы с сетевыми менеджерами.

Решение chattr должно предотвращать внесение изменений этими другими программами и, вероятно, подходит для ситуации с вашим сервером.Если вы использовали его на портативном компьютере, могут возникнуть ситуации, когда важные изменения в вашем /etc/resolv.conf будут заблокированы. Примером может служить доступ к Wi-Fi в отеле, когда требуется изменение вашего /etc/resolv.conf для доступа к определенному локально размещенному URL-адресу до получения доступа к надлежащему Интернету). Если в таких ситуациях вы можете вспомнить chattr -i /etc/resolv.conf и повторно подключиться к Wi-Fi, то это не должно быть проблемой.

0
28.03.2018, 21:16
3 ответа

Заголовок linux/kernel.h, который используется для сборки модулей, является заголовком, который является частью исходного кода ядра . Когда модули собираются в дереве исходного кода ядра, используется именно эта версия.

Для сборки внешнего модуля процесс сборки ищет заголовок в /lib/modules/$(uname -r)/build/include/linux/sched.h. Этот файл предоставляется пакетами заголовков ядра, , например. для производных Debian, пакет linux-headers-$(uname -r).

/usr/include/linux/kernel.hпредназначен для пользовательских процессов, а не для модулей ядра.

Макросы приоритета printkтеперь находятся вlinux/printk.hиlinux/kern_levels.h. Я предполагаю, что вы читаете оригинальное руководство , которое основано на серии ядер 2.6; для современных ядер вы должны прочитать обновленное руководство(в настоящее время для 5.6.7).

5
28.01.2020, 02:15

В моей системе Mint 18.x с build-essential, НО не установлено полное исходное дерево-

user@localhost:~ $ locate kernel.h | grep \/kernel.h$
/usr/include/linux/kernel.h
/usr/src/linux-headers-4.4.0-21/include/linux/kernel.h
/usr/src/linux-headers-4.4.0-21/include/uapi/linux/kernel.h
/usr/src/linux-headers-4.4.0-21-generic/include/config/debug/kernel.h
/usr/src/linux-headers-4.4.0-21-generic/include/config/firmware/in/kernel.h
/usr/src/linux-headers-4.4.0-53/include/linux/kernel.h
/usr/src/linux-headers-4.4.0-53/include/uapi/linux/kernel.h
/usr/src/linux-headers-4.4.0-53-generic/include/config/debug/kernel.h
/usr/src/linux-headers-4.4.0-53-generic/include/config/firmware/in/kernel.h
/usr/src/linux-headers-4.8.0-53/include/linux/kernel.h
/usr/src/linux-headers-4.8.0-53/include/uapi/linux/kernel.h
/usr/src/linux-headers-4.8.0-53-generic/include/config/debug/kernel.h
/usr/src/linux-headers-4.8.0-53-generic/include/config/firmware/in/kernel.h

Согласно комментарию Джеффа к вашему вопросу, я бы предположил, что большинство раз /usr/include/linux/kernel.hбудет использоваться,

Я уверен, что если вы извлечете tar-архив дерева ядра, в его структуре каталогов также может быть другая копия. Быстрая проверка показывает, что все они имеют разный размер... или пустые файлы.

2
28.01.2020, 02:15

ответ на этот вопрос может существенно зависеть от дистрибутива Linux... SUSE/SLES, RHEL/Centos/Fedora, debian, mint и так далее,

и может ли он также различаться в зависимости от разновидностей RPM дистрибутивов Linux и Debian?

в любом случае мой опыт в основном связан с SLES версии 11.4, и за это я могу поручиться

/usr/src/linux/include/linux/kernel.h

where for me   /usr/src/linux -> /usr/src/linux-3.0.101-108.21

uname -r    for me returns 3.0.101-108.21-default

Когда я обновляю ядро ​​до более новых версий, программная ссылка соответственно меняется вместе с kernel.h. Я думаю, можно с уверенностью сказать, что если вы ищете модуль ядра версии kernel.h, он будет в какой-то папке, связанной с uname -r, и будет частью исходного кода ядра . пакет для вашего дистрибутива Linux.

1
28.01.2020, 02:15

Теги

Похожие вопросы