LINUX.ORG.RU

[gentoo] Как собрать нужный конфиг?

 


0

0

Вот есть файлы:
/usr/share/genkernel/defaults/kernel-config
/usr/share/genkernel/arch/x86_64/kernel-config
внутри написано, что они автоматически генерируемые.

А как их сгенерировать?

Меня интересует воспроизводимая контролируемая процедура
(всякие там zcat /proc/config.gz >.config не предлагать).

У меня есть ряд настроек, которые я хочу добавить к ядру.
Как мне получить дефалтовый конфиг, как к нему применить эти настройки (желательно из командной строки) - может какая утилита есть типа euse?

Ответ на: комментарий от ArsenShnurkov

В общем, если я правильно понял, cd /usr/src/linux && make defconfig
берет конфиг из файла
/usr/src/linux/arch/x86/configs/x86_64_defconfig
и делает из него .config

Как дальше в автоматизированном режиме добавить нужные опции (чтобы оно само добавило зависимые и удалило ставшие ненужными)?

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

> Патч не хотелось бы, хотелось бы утилиту командной строки

Такой не знаю. А что за опции ты добавить хочешь? Или просто с ядром не хочешь париться?

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

> не понял вопроса?

ага. --menuconfig будет спрашивать у пользователя и он из инструкции будет вбивать руками. Хочется то же самое, но автоматизированно, не напрягая пользователя (в качестве инструкции будет выступать какой-нибудь скрипт, модифицирующий нужным образом перед сборкой .config)

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

> Хочется то же самое, но автоматизированно, не напрягая пользователя (в качестве инструкции будет выступать какой-нибудь скрипт, модифицирующий нужным образом перед сборкой .config)

А, тогда тебе надо покопаться в Makefile программы, которая в makefile конфигурит ядро. Посмотри, например klibc.

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

> что за опции ты добавить хочешь?

это не важно. я хочу чтобы
a) было задкументированно
b) было автоматизированно

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

Если тебе нужно на полном автомате - то же самое, но без --menuconfig. genkernel просто соберёт систему с имеющимся конфигом.

Если нужно что-то поменять - --menuconfig

Третий вариант - автогенерация конфига? Пока не придумают libastral - невозможен :)

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

> автогенерация конфига? Пока не придумают libastral - невозможен :)

не автогенерация. разработчик пишет скрипт, в котором явно указывает какие опции нужно добавить. например аналог euse -E flag вполне работает без libastral.

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

Похоже тебе придётся писать свой скрипт, который сможет включать опции, попутно разруливая зависимости и блокировки. Информация о зависимостях лежит в файлах Kconfig. Формат этих файлов описан в Documentation/kbuild/kconfig-language.txt.

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

Я вообще говоря не уверен, что они решали задачу модификации конфига в общем виде...

# ebuild /usr/portage/dev-libs/klibc/klibc-1.5.15.ebuild --unpack
...
>>> Source unpacked in /var/tmp/portage/dev-libs/klibc-1.5.15/work

Как его дальше смотреть?

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

> Как его дальше смотреть?

/var/tmp/portage/dev-libs/klibc-1.5.15/work/scripts/Kbuild.include - там вроде определено сделать то, что тебе нужно. Например, cc-option-yn.

Сразу скажу, глубоко не разбирался.

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

Куда смотреть дальше?

> cat linux-sabayon-sources-2.6.31.ebuild

(cut)

src_install() {

local version_h_name=«usr/src/linux-${KV_FULL}/include/linux»

local version_h=«${ROOT}${version_h_name}»

if [ -f «${version_h}» ]; then

einfo «Discarding previously installed version.h to avoid collisions»

addwrite «/${version_h_name}»

rm -f «${version_h}»

fi

kernel-2_src_install

cd «${D}/usr/src/linux-${KV_FULL}»

local oldarch=${ARCH}

cp ${FILESDIR}/${P/-sources}-${ARCH}.config .config || die «cannot copy

kernel config»

unset ARCH

make modules_prepare || die «failed to run modules_prepare»

rm .config

ARCH=${oldarch}

}

ЗЫ самое важное выделено вот так

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

Мне кажется, что должна уже быть как минимум библиотека, которая парсит
/usr/src/linux/Documentation/kbuild/kconfig-language.txt
и включает/выключает опции (потому что несколько разных утилит конфигурации используют такую функциональность)

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

Спасибо, интересно, но это только половина задачи.

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

Мне кажется, что должна уже быть как минимум библиотека, которая парсит /usr/src/linux/Documentation/kbuild/kconfig-language.txt и включает/выключает опции (потому что несколько разных утилит конфигурации используют такую функциональность)

Посмотри в /usr/src/linux/scripts/kconfig/. Думаю что там есть что-то подобное. Не библиотека, а просто несколько общих файлов с кодом парсера, которые являются общими для config/oldconfig/menuconfig/xconfig/gconfig.

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

там какая-то утилита /usr/src/linux/scripts/kconfig/conf
лежит
и у нее есть параметр defconfig.

Что будет, если сначала
cd /usr/src/linux && make defconfig
а потом
./scripts/kconfig/conf -Dмой-файл-с-несколькими-значениями.config

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

Я не первый, кому такая мысль в голову пришла
- http://patchwork.kernel.org/patch/611

И да,
как не понимая кода узнать,
что делает команда "/usr/src/linux/scripts/kconfig/conf -d -Dmyfile.config"?

Она подставляет только недостающие опции или заменяет все, указанные в myfile.config?

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

Насколько я понял, надо дописывать еще один режим ввода, делать к нему ключи в файле /usr/src/linux/scripts/kconfig/conf.c и писать реализацию в /usr/src/linux/scripts/kconfig/confdata.c

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

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

В этом случае можно будет хранить просто список нужных ключей.

Пока не проверил, так ли это.

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