LINUX.ORG.RU
ФорумAdmin

Настройка опций ядра. Утилита make.

 ,


0

1


ОС:Debian GNU/Linux 7.6.0 «Wheezy» i386
Пытаюсь увидеть состояние сетевых опций ядра (к примеру Gateways) в свежеустановленной системе при помощи «make menuconfig» и «make gconfig», но в ответ:
make: *** No rule to make target "menuconfig". Stop
Я создал Makefile. Пакет make установлен.
В чем проблема?

Мне нужно разобраться с синтаксисом правил в Makefile или дело в том что ввожу команды из корневой директории?



Последнее исправление: gdimonoff (всего исправлений: 1)

ты делаешь глупость, make menuconfig сработало бы в каталоге с исходниками ядра

и тебе это не нужно, нужно grep ОПЦИЯ_ЯДРА /boot/config-*

anonymous
()

Утититу make надо запускать в корневой директории исходников ядра, и в menuconfig ты увидишь конфиг, применимый именно к этим исходникам, но никак не к запущенному/какому-либо еще ядру.

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

zcat /proc/config.gz | less
В ядре должна быть включена опция CONFIG_IKCONFIG_PROC (все крупные дистры, в том числе debian, включают).

mtk
()

Я создал Makefile

Это то же самое, что создать пустой файл, назвать его, скажем, «firefox» и пытаться запустить на выполнение, ожидая увидеть окно браузера.

make menuconfig — это команда, запускающая цель «menuconfig», описание которой берётся из Makefile. Нужно скачать исходники ядра (либо с http://kernel.org, либо, что предпочтительнее, взять исходники того варианта ядра, которое входит в твой дистрибутив), распаковать их, зайти в корень дерева исходников (ты увидишь там Makefile, и он будет далеко не пустой) и там это выполнить. Тогда запустится конфигуратор ядра, позволяющий просмотреть включенные опции и изменить их.

Тогда ты увидишь «дефолт» — включенные по умолчанию опции. Чтобы посмотреть опции конкретно того ядра, которое сейчас запущено, нужно, находясь в том же корне дерева исходников, сделать zcat /proc/config.gz > .config и повторить make menuconfig (или любой другой *config).

Что делает первая команда: в псевдофайле /proc/config.gz находится конфигурация запущенного в данный момент ядра, сжатая gzip'ом. zcat распаковывает этот файл и выводит в стандартный вывод (на консоль), а > .config перенаправляет стандартный вывод в файл. Все конфигураторы (menuconfig, nconfig) считывают выбранные опции из этого файла и сохраняют изменения в него же.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от mtk

все крупные дистры, в том числе debian, включают

У меня Debian, тут не включено. Конфиг простым файлом лежит в /boot/config-`uname -r`

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Ясно. Просто я использовал Debian только на ARM (cubian, ядро собрано «умельцами»), там было включено.

mtk
()
Ответ на: комментарий от mtk

Попробовал zcat /proc/config.gz | less из командной строки под простым пользователем. Получаю сообщение: «Нет такого gz архива».

Может я выполняю команду не из нужной директории?

Извиняюсь за глупые вопросы, еще совсем новичок в Linux.

В ядре должна быть включена опция CONFIG_IKCONFIG_PROC

А как проверить что она включена, не через ту же /proc случайно?)

gdimonoff
() автор топика

Я бы посоветовал ради первого неиспорченного опыта сборки ядра завести себе хостик со слакварой. И найти книжку Патрика про слаку 3.5. По сути, там почти ничего не поменялось. Даже LILO до сих пор юзается.

Infra_HDC ★★★★★
()
Ответ на: комментарий от intelfx

Спасибо за развернутый ответ! Сам очень ценю понимание механизма выполнения процесса. Но в Linux еще полный новичек.

Захожу через МС в корневую директорию, выполняю zcat /proc/config.gz > .config, повторно ввожу make menuconfig и ничего не происходит.

gdimonoff
() автор топика
Ответ на: комментарий от shell-script

Выполнил. «Нет такого файла или директории»

Я выполнил не из нужной директории?

gdimonoff
() автор топика
Ответ на: комментарий от gdimonoff

Нет такого gz архива

Вот ты и проверил, что эта опция выключена. Как выше советовали, ищи конфиг в /boot. Открой в любом текстовом редакторе и изучай сколько угодно.

mtk
()
Ответ на: комментарий от gdimonoff

Получаю сообщение: «Нет такого gz архива».

На всякий случай, если «modprobe configs» сказать, не подгружается ли ?

AS ★★★★★
()
Ответ на: комментарий от gdimonoff

В корневую — это куда? Имеется в виду не общесистемная корневая директория (которая /), а корень дерева исходников — т. е. то место, куда ты их распаковал.

intelfx ★★★★★
()
Ответ на: комментарий от gdimonoff

А, судя по остальным ответам, у тебя ещё и /proc/config.gz не существует... Тогда нужно сначала сделать modprobe configs. (Если он скажет, что нет такого модуля — дело плохо.)

intelfx ★★★★★
()

что за болезные, первым постом правильно написано

cat /boot/config-$(uname -r)

anonymous
()
Ответ на: комментарий от intelfx

На сколько плохо?!

Ввод modprobe configs не из под рута не дал результатов.

Под рутом выдал сообщение:

FATAL: Module configs not found.

П.С. Это первая моя установка системы. Ставил по мануалу официального сайта Debian с 1-го DVD. Все в порядке установилось. Что за пошлое ощущение необходимости переустановки ... Как убедиться что система в порядке?

gdimonoff
() автор топика
Ответ на: комментарий от gdimonoff

Да нет, не нужно ничего переустанавливать. Если система загрузилась — значит, ядро установлено правильно. Видимо, в дебиане эта опция (которая помещает копию текущего конфига в /proc/config.gz) не включена.

Как говорит излишне резкий анонимус (но всё же он прав), текущий конфиг может лежать в /boot/config-$(uname -r).

(Здесь $( ... ) — это конструкция оболочки «выполнить команду и подставить в текст её вывод», а сама команда uname -r выводит текущую версию ядра.)

В общем, пробуем с этим файлом. Как нетрудно догадаться, его тоже нужно скопировать в .config, при этом находясь в директории с исходниками ядра...

cp /boot/config-$(uname -r) .config

Если выполнится корректно (т. е. не скажет, что такого файла нет или ещё что-то), можно будет делать в этой же директории make menuconfig и смотреть нужные опции.

Ну и да. На будущее. Обычно все команды, которые тебе предложат выполнить (на форумах, в мануалах, где-либо ещё), должны выполняться без ошибок. Если что-то пишет об ошибке, продолжать тупо вбивать команды не стоит — лучше осмотреться, ещё раз подумать, что могло пойти не так, ну и если это рекомендации с форума, отписаться и спросить, что делать.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от anonymous

Спасибо, anonymous.

cat /boot/config-* Команда открыла файл со всеми опциями. Зря не вдумался в первый пост.

НО! На мою попытку поиска нужной строки:

test@A:/boot$ grep DMA_Devices/boot/config-* выдает черную строку с мигающим курсором для ввода.

Что-то не указал?

gdimonoff
() автор топика
Ответ на: комментарий от intelfx

Спасибо за подробный ответ!

test@A:/boot$sudo cp /boot/config-$(uname -r) .config

Перенес все данные в новосозданный файл .config.

НО! make menuconfig не открывает чего либо из /boot директории. А точно должен? Директория /boot вроде для исходников. ls -all показал здесь же файл «vmlinuz», что, как я понимаю, является исходными файлами ядра?! Но Makefile я тут не вижу.

П.С.

Если что-то пишет об ошибке, продолжать тупо вбивать команды не стоит— лучше осмотреться

С эти порядок, правда;) Ввожу команды по одному разу, не под рут правами.

Начал читать Advanced Bash-Scripting Guide - получаю удовольствие от постепенного прихода смысла синтаксиса и значения выше написанных команд))

gdimonoff
() автор топика
Ответ на: комментарий от gdimonoff

НО! make menuconfig не открывает чего либо из /boot директории. А точно должен? Директория /boot вроде для исходников. ls -all показал здесь же файл «vmlinuz», что, как я понимаю, является исходными файлами ядра?! Но Makefile я тут не вижу.

Поясни, пожалуйста, эту фразу. Я не совсем понял, что ты сделал (но наверняка что-то не то, потому что vmlinuz — это не исходник ядра, а напротив — бинарник, уже скомпилированное ядро).

Смотри. Вообще, что ты хочешь узнать из конфига? Ты знаешь точное имя той опции, которую тебе нужно проверить?

intelfx ★★★★★
()
Ответ на: комментарий от gdimonoff

Ну и да...

test@A:/boot$sudo cp /boot/config-$(uname -r) .config

Перенес все данные в новосозданный файл .config.

Это точно не то, потому что нужно было выполнить эту команду в директории с предварительно скачанными и распакованными (разархивированными) исходниками ядра, а ты выполнил в /boot — директории, в которую обычно кладётся скомпилированное ядро.

Но сначала ответь на вопрос в предыдущем сообщении, да.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Вообще, что ты хочешь узнать из конфига? Ты знаешь точное имя той опции, которую тебе нужно проверить?

В конфиге хочу увидеть состояние опций:

1.Networking options В нем состояние TCP/IP networking

2.Gateways В нем состояние IP: forwarding/gatewaying

gdimonoff
() автор топика
Ответ на: комментарий от gdimonoff

Ага. Значит, точных имён опций ты не знаешь.

Я не то чтобы разбираюсь в Debian и apt, но вроде бы нужно сделать следующее:

  • перейти в какую-нибудь директорию, где есть достаточное количество места и права на запись (например, в собственную домашнюю директорию — cd ~
  • скачать исходники ядра — apt-get source linux
  • перейти в появившуюся директорию с исходниками ядра — cd linux-*
  • удостовериться, что всё сделано правильно, проверив наличие, например, Makefile — ls -l Makefile
  • скопировать конфиг ядра под нужным именем — cp /boot/config-$(uname -r) .config
  • запустить конфигуратор — make menuconfig или make nconfig
  • посмотреть что нужно
intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Большое спасибо!

Рекомендации выстроились в четкий план!

Начну МАНеврировать по сборке ядра и его составных компонентов!

gdimonoff
() автор топика
Ответ на: комментарий от gdimonoff

А ты уверен, что тебе нужно именно собирать ядро? Штатные ядра в большинстве дистрибутивов и так содержат в себе всё что можно.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Нет, не уверен. Потому собирать я ничего пока не буду)

Хочу увидеть что в себе содержит уже установленное ядро и в каком (включенном или выключенном, если так можно сказать) режиме эти параметры находятся. К примеру опции существующего ядра, которые я указал выше, можно увидеть в «/boot/config-*», но их я пока еще не видел, хотя пробовал:

grep Networking_options/boot/config-*

Читаю маны.

gdimonoff
() автор топика
Ответ на: комментарий от gdimonoff

grep Networking_options/boot/config-*

Так ты ничего не добьёшься. В config-файле опции перечислены с использованием их внутренних названий, что-то типа CONFIG_NETWORK.

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

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Скачал исходники установленной версии ядра, распаковал, запустил menuconfig и попал в конфигуратор.

Вопрос:

1. Где находится файл, который открывает конфигуратор menuconfig в папке с исходниками ядра?!

2. Соответсвенно в какой файл в папке с исходниками можно перенести содержимое файла //boot/config-* для того чтобы открыть его через make menuconfig?

3. Исходя их того что версия исходников совпадает с версией установленной системы я полагаю, что могу увидеть те же настройки, это так?

gdimonoff
() автор топика
Ответ на: комментарий от gdimonoff
  1. Не понял вопроса. Ты спрашиваешь, где физически лежит программа-конфигуратор?
  2. Конфигуратор читает значения настроек из файла .config (в корневой директории исходников).
  3. Ты увидишь тот же набор настроек. Правильные их значения ты увидишь, сделав cp /boot/config-$(uname -r) .config и запустив конфигуратор ещё раз.
intelfx ★★★★★
()
Ответ на: комментарий от gdimonoff

1) Нигде. Скажи make menuconfig в пап^Wдиректории с исходниками ядра

2) .config в пап^Wдиректории с исходниками ядра

3) Ты увидишь содержимое .config. Откуда ты его взял - твоя проблема.

dhameoelin ★★★★★
()
Ответ на: комментарий от intelfx

1. Нет, где тот файл который она открывает?! Я подозревал что это .config и судя по тому что ты говорищь это так и есть...

Но! test@A:~/Downloads/linux-3.2.62$ ls -all говорит о том что кроме Kconfig никаких config-файлов в папке с исходниками не лежит.

Я чего-то не замечаю?

gdimonoff
() автор топика
Ответ на: комментарий от dhameoelin

2) Я тоже так думал, но его там не вижу ... Отсюда и вопрос.

gdimonoff
() автор топика
Ответ на: комментарий от gdimonoff

По умолчанию этого файла нет. Его нужно создать: либо make defconfig (создаётся дефолтный), либо откуда-то скопировать.

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

intelfx ★★★★★
()
Ответ на: комментарий от gdimonoff

make help :)

Нет такой литературы. Маны, арчвики и знание технического английского — твои друзья.

intelfx ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.