LINUX.ORG.RU

Сборка ядра

 , ,


0

1

Уважаемые форумчане. Прошу не пинать сильно. Ну никак я не могу понять один момент. Есть у меня некоторый одноплатный PC. Есть для него исходники. Среди исходников лежат исходники ядра. Есть в комплекте файл конфигурации ядра, который я кладу в папку kernel и переименовываю в .config. Но когда я запускаю make menuconfig у меня некоторые опции выбраны по умолчанию (например, стоит x64, хотя процессор x32). Эти опции попросту отсутствуют в поставляемом .config. Но так же вместе с исходниками поставляется сложный скрипт для сборки. Этот скрипт нормально собирает ядро и оно работает, но при сборке он не дает поменять опции. А вручную я их тоже не могу поменять, т.к. изначально .config не полный и все несуществующие опции дополняются дефолтными значениями. Пробовал делать oldconfig, так он мне миллион вопросов задал, на которые я не знаю что отвечать. Собственно вопрос - где make берет недостающие в .config опции, как мне изменить .config с помощью menuconfig не добавляя туда дефолтные значения недостающих опций?

Есть в комплекте файл конфигурации ядра, который я кладу в папку kernel и переименовываю в .config.

Ты это сам придумал, или вычитал где?

Уж на кернел орг не посылаю. Пошукай хоть тут

https://losst.ru/sobiraem-yadro-linux#6_%D0%A0%D1%83%D1%87%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%8F%D0%B4%D1%80%D0%B0

anonymous ()

Попробуйте открыть конфиг через xconfig или gconfig, либо зайдя в меня загрузить конфиг изначальный (без переименовывания). Есть ещё вариант с nconfig.

NAY_GIGGER ()

Но так же вместе с исходниками поставляется сложный скрипт для сборки. Этот скрипт нормально собирает ядро и оно работает, но при сборке он не дает поменять опции.

СКРИПТ! Это не скомпилированная прога, для изучения которой надо ставить дизассемблер и заниматься реверсом. Это даже не прога на Си, для изучения логики которой надо знать Си. Просто открой скрипт в текстовом редакторе и посмотри что он делает. Мда.

firkax ()

Есть в комплекте файл конфигурации ядра,

Каком комплекте?

cp /boot/config-5.11.0-25-generic .config

Это - не комплект исходников, это файл из загрузочного раздела.

который я кладу в папку kernel и переименовываю в .config

Откуда взял этот «kernel»?

firkax ()

Подозреваю, что ты пытаешься собрать ядро под свой хост. Тебе надо установить кросс-тулчейн, и перед тем, как вызвать make, ты должен установить переменные окружения ARCH, CROSS_COMPILE и LOADADDR. Обычно с тулчейном идёт скрипт, на который ты делаешь source, и он все эти переменные устанавливает.

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

Большое спасибо за отклики. Очень приятно! Сейчас попытаюсь подробней изложить что я имею и какая солянка у меня в голове. Есть дистрибутив под одноплатник. С ним есть некоторые проблемы. Как минимум нужно отключить драйвера на звук в ядре, т.к. с драйверами плата грузится один раз, а потом при перезагрузке зависает. Приходится при первом старте удалять драйвера. Ну и еще там проблем хватает. Я хочу на этом примере научиться собирать ядро сам. Просто давно хотел разобраться. Дистрибутив предоставляет автоматические скрипты для сборки ядра, но при сборке нет возможности поправить конфигурацию. Скрипт просто запускается и собирает ядро. Решил собрать вручную. Собираю на ubuntu, не на самом одноплатнике, а другом ПК, соответственно toolchain имею. Для сборки нужна папка kernel. В ней лежит файл Makefile - набор инструкций, которому следует make. Но для сборки необходим еще .config файл, которого нету в папке kernel. Можно запустить menuconfig и собрать этот файл с нуля, но зачем, если где-то же должен быть уже настроенный конфиг для этой платформы. Пошел читать скрипты. Выяснил, что конфиг лежит в папке kernel/arch/arm/configs и при работе скрипта он оказывается в папке вот так make -C ${KERNEL} ARCH=arm CROSS_COMPILE=${TOOL} OrangePi_2G-IOT_defconfig. Выполняю это вручную и вижу, что файл появился в папке kernel. Ожидаю, что это полностью сконфигурированный файл, но когда запускаю makeconfig сразу вижу, что стоит отметка на x64, а плата точно x32. Подозреваю, что конфиг не полный. Без изменений делаю save и вижу, что появился файл config.old и новый файл .config. Новый конфиг на несколько сот байт больше и в нем как раз все, что отсутствовало в штатном конфиге выставлено по умолчанию. Пробую заново положить комплектный config и выполнить oldconfig.. Он начинает задавать кучу вопросов, что подтверждает отсутствие в конфиге многих опций. Задаюсь вопросом: «А где же скрипт берет эти недостающие конфиги при сборке? Он же не может использовать значения по умолчанию.». Впадаю в ступор, т.к. все, что делает скрипт для сборки самого ядра это: make -C ${KERNEL} ARCH=arm CROSS_COMPILE=${TOOL} zImage make -C ${KERNEL} ARCH=arm CROSS_COMPILE=${TOOL} headers_install O=${OUTPUT}

Начинаю подозревать, что где-то еще лежат конфиги, которые в процессе сборки дополняют .config, но где? Предположу, что где-то в Makefile размером с ~1500 строк, который добрый человек предложил прочитать и понять :) Я его буду пару недель разбирать :)) Короче я запутался ((( Литературу читал, смотрел всякого рода видосы типа «https://www.youtube.com/watch?v=1Yc-u5IyufI&t=4504s» (надеюсь модератор не удалит пост за ссылки).

Если кому-то не лень помочь и объяснить куда мне хоть читать дальше, то буду безмерно благодарен!

Тут исходники kernel_GITHUB=«https://github.com/OrangePiLibra/OrangePi_i96_kernel.git» uboot_GITHUB=«https://github.com/OrangePiLibra/OrangePi_i96_uboot.git» scripts_GITHUB=«https://github.com/OrangePiLibra/OrangePi_i96_scripts.git» external_GITHUB=«https://github.com/OrangePiLibra/OrangePi_i96_external.git» toolchain=«https://codeload.github.com/OrangePiLibra/OrangePiH3_toolchain/zip/master»

valeri-dexter ()
Ответ на: комментарий от valeri-dexter

Насколько помню, перед menuconfig нужно ещё писать архитектуру, если собираешь на другой архитектуре, например

ARCH="arm" make menuconfig

Просто вставь вызов menuconfig в сборочный скрипт, в файл kernel_compile.sh, после

# Compile kernel
if [ $1 = "2" -o $1 = "1" ]; then
    echo -e "\e[1;31m Compiling Kernel \e[0m"
будет как-то так
# Compile kernel
if [ $1 = "2" -o $1 = "1" ]; then
    echo -e "\e[1;31m Compiling Kernel \e[0m"
    make -C ${KERNEL} ARCH=arm CROSS_COMPILE=${TOOL} menuconfig
    make -C ${KERNEL} ARCH=arm CROSS_COMPILE=${TOOL} zImage 
    make -C ${KERNEL} ARCH=arm CROSS_COMPILE=${TOOL} headers_install O=${OUTPUT} 
fi

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

Круто! Он теперь в процессе сборки открывает псевдографическую утилиту menuconfig и в ней отсутствуют все лишние пункты, которые появлялись при запуске make menuconfig. Насколько я понял вся магия в CROSS_COMPILE=… Про нее и нужно читать. Спасибо огромнейшее!!!

valeri-dexter ()
Ответ на: комментарий от valeri-dexter

После отключения поддержки звука в menuconfig при сборке стала появляться ошибка:

drivers/built-in.o: In function audio_pcm_open': clk-composite.c:(.text+0x7d21e): undefined reference tosnd_pcm_limit_hw_rates’ drivers/built-in.o: In function audio_unbind': clk-composite.c:(.text+0x7d25a): undefined reference tosnd_card_free_when_closed’ drivers/built-in.o: In function audio_data_complete': clk-composite.c:(.text+0x7d29c): undefined reference tosnd_pcm_period_elapsed’ drivers/built-in.o: In function audio_source_bind_config': clk-composite.c:(.text+0x813b6): undefined reference tosnd_card_create’ clk-composite.c:(.text+0x813e6): undefined reference to snd_pcm_new' clk-composite.c:(.text+0x81414): undefined reference tosnd_pcm_set_ops’ clk-composite.c:(.text+0x81426): undefined reference to snd_pcm_lib_preallocate_pages_for_all' clk-composite.c:(.text+0x81452): undefined reference tosnd_card_register’ clk-composite.c:(.text+0x8146a): undefined reference to snd_card_free' drivers/built-in.o: In functionaudio_pcm_hw_free’: clk-composite.c:(.text+0x7d1bc): undefined reference to snd_pcm_lib_free_vmalloc_buffer' drivers/built-in.o: In functionaudio_pcm_hw_params’: clk-composite.c:(.text+0x7d1e0): undefined reference to _snd_pcm_lib_alloc_vmalloc_buffer' drivers/built-in.o: In function.LANCHOR2’: clk-composite.c:(.data+0x10c48): undefined reference to `snd_pcm_lib_ioctl’ make: *** [Makefile:783: vmlinux] Error 1

Кусок Makefile 773 vmlinux: scripts/link-vmlinux.sh $(vmlinux-deps) FORCE 774 ifdef CONFIG_HEADERS_CHECK 775 $(Q)$(MAKE) -f $(srctree)/Makefile headers_check 776 endif 777 ifdef CONFIG_SAMPLES 778 $(Q)$(MAKE) $(build)=samples 779 endif 780 ifdef CONFIG_BUILD_DOCSRC 781 $(Q)$(MAKE) $(build)=Documentation 782 endif 783 +$(call if_changed,link-vmlinux)

Кто-нибудь навскидку может подсказать, что теперь не так, пожалуйста.

valeri-dexter ()
Ответ на: комментарий от AbbaT

А можете, пожалуйста, хоть примерно подсказать каким путем устранить это? Просто все эти мануалы по сборке писались как-будто в розовых очках, там так все просто, зашел в menucongif, выключил все, что не нужно, сохранил .config и запустил сборку. Нигде не написано, что отключив одно, не будет собираться или линковаться другое и это нужно где-то править. Т.е. сейчас получается, что в drivers/built-in.o компилируется код, в котором есть зависимость от методов звуковых драйверов, которые в свою очередь не компилируются и при линковке сборщик не может найти эти зависимости? Получается, что мне нужно как-то определить все, что зависит от звука и как-то это отрубить?

valeri-dexter ()
Ответ на: комментарий от valeri-dexter

make -C ${KERNEL} ARCH=arm CROSS_COMPILE=${TOOL} OrangePi_2G-IOT_defconfig

сначала выполни в косоле вышеуказанную команду, а потом попробуй заменить OrangePi_2G-IOT_defconfig на menuconfig, должно сработать, там отключишь ненужные драйвера и не изменяй сам скрипт, а выполни в консоле и разыменый все переменные

IvanR ★★★ ()
Последнее исправление: IvanR (всего исправлений: 2)
Ответ на: комментарий от valeri-dexter

попробуй выполнить make clean или make distclean, только потом ядро надо заново конфигурировать, так как будет удален файл .config, возможно, что какие-то объектные файлы остались от предыдущей сборки и в них вызовы на драйвер звуковой карты, хотя, не должно быть так, должны были пересобраться

IvanR ★★★ ()
Ответ на: комментарий от valeri-dexter

Нигде не написано, что отключив одно, не будет собираться или линковаться другое

так как все зависимости автоматом разруливаются, скорее всего остались объектные файлы от предыдущей сборки

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

Тоже пробовал. Причем очень интересная история с этими командами получается. Если их выполнить (даже если выполнить только make clean), то с отключенными драйверами на звук все то же самое, но при этом перестает собираться стандартная конфигурация. Пробовал полностью удалять папку склонированную с гита и заново клонировать - не помогает. Переустановил систему - помогло. Ошибка становится такая: sound/built-in.o: In function rda_gpioc_operation': last.c:(.text+0x1977c): multiple definition ofrda_gpioc_operation’ drivers/built-in.o:clk-composite.c:(.text+0x1b9c): first defined here sound/built-in.o: In function .LANCHOR2': last.c:(.bss+0x51c): multiple definition ofbp_gpioc_msys’ drivers/built-in.o:clk-composite.c:(.bss+0x654): first defined here make: *** [Makefile:783: vmlinux] Error 1

valeri-dexter ()
Ответ на: комментарий от valeri-dexter

multiple definition ofrda_gpioc_operation

это с новым компилятором проблема, где-то пропущен extern ищи по коду так cd /path/to/source && find . -name '*.c' -o -name '*.h' -exec egrep -HIn 'ofrda_gpioc_operation' {} \; и смотри, если в двух *.c файлах объявлена эта переменная и без ключевого слова extern, то в одном из 2-х файлов добавляй перед объявлением extern, то же самое проделывай с ofbp_gpioc_msys

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

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

Ранее пытался найти по именам в исхондиках. И да, rda_gpioc_operation - это функция, которая присутствует в двух .c файлах, а bp_gpioc_msys - это структура, которая так же присутствует в двух .c файлах. Попробовал дописать в одном из файлов extern - не изменилось ничего. Интересно то, что когда на чистой системе собираешь первый раз - все собирается((( А потом после очистки уже нет. Хотя при этом сами исходники то не меняются.

valeri-dexter ()
Ответ на: комментарий от valeri-dexter

Интересно то, что когда на чистой системе собираешь первый раз - все собирается

тогда надо пробовать делать make cean или make cleanall или make distclean, только предварительно сохранять .config

только вот так:

-C ${KERNEL} ARCH=arm CROSS_COMPILE=${TOOL}

только переменные нужно разыменовывать

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

И это тоже уже попробовал)))) Мне кажется, что я проклят)) Скопировал с другим именем .config (родной без моих изменений) Выполнил (в каталоге kernel) make -C ./ ARCH=arm CROSS_COMPILE=../toolchain/bin/arm-linux-gnueabi- clean потом cleanall потом distclean. Все, кроме cleanall выполнилось. Потом переименовал сохраненный ранее конфиг в .config. Снова запускаю сборку и все то же multiple definition по тем же двум позициям rda_gpioc_operation и bp_gpioc_msys. Оно и понятно, у нас, получается, есть два разных места, в которых присутствуют файлы, в которых дублируются эти метод и структура. Все собирается хорошо, но потом линковщик все линкует в один файл ядра и тут то в объектных файлах обнаруживает множественное объявление и ругается. Вопрос только почему если на свежую систему все это запустить, то нет никаких проблем и все собирается.

valeri-dexter ()
Ответ на: комментарий от valeri-dexter

Вопрос только почему если на свежую систему все это запустить, то нет никаких проблем и все собирается.

попробуйте найти различия, можно поставить новую систему, скопировать полностью каталог с исходниками ядра куда-нибудь, потом добиться ошибок multiple definition, выполнить distclean и далее выполнить следующую команду: diff -Naur /path_to_clean_sources /path_to_bug_sources, только нужно выполнить make distclean, а то в вывод diff попадут бинарные файлы от сборки

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

Докладываю о проделанной работе :) Поставил с нуля Ubuntu. Сделал копию виртуальной машины на всякий случай. Поставил:

sudo apt install libncurses-dev (при сборке требуется)

sudo apt install lib32stdc++6 (при сборке требуется)

sudo apt install git

sudo apt install curl (для скачивания toolchain)

Поставил прям через ui пакет bsdtar_3.2.2-3.1_all.deb (при сборке требуется) Склонировал исходники с git. Делал по мануалу производителя. Сначала склонировал скрипт, который клонирует все исходники и скачивает инструменты для нужной платформы, потом запустил этот скрипт, выбрал платформу и скрипт какое-то время скачивал все необходимое. Сделал копию папки с исходниками. Теперь у меня есть все необходимые исходники и инструменты. Не используя комплектный build.sh собираю ядро вручную:

make -C ./ ARCH=arm CROSS_COMPILE=../toolchain/bin/arm-linux-gnueabi- OrangePi_2G-IOT_defconfig

make -C ./ ARCH=arm CROSS_COMPILE=../toolchain/bin/arm-linux-gnueabi- zImage

Все отлично собралось. Очищаю:

make -C ./ ARCH=arm CROSS_COMPILE=../toolchain/bin/arm-linux-gnueabi- clean

make -C ./ ARCH=arm CROSS_COMPILE=../toolchain/bin/arm-linux-gnueabi- distclean

Все очистилось. Повторно выполняю сборку:

make -C ./ ARCH=arm CROSS_COMPILE=../toolchain/bin/arm-linux-gnueabi- OrangePi_2G-IOT_defconfig

make -C ./ ARCH=arm CROSS_COMPILE=../toolchain/bin/arm-linux-gnueabi- zImage

И получаю то самое:

sound/built-in.o: In function rda_gpioc_operation’:

last.c:(.text+0x1977c): multiple definition ofrda_gpioc_operation’

drivers/built-in.o:clk-composite.c:(.text+0x1b9c): first defined here

sound/built-in.o: In function .LANCHOR2’:

last.c:(.bss+0x51c): multiple definition ofbp_gpioc_msys’

drivers/built-in.o:clk-composite.c:(.bss+0x654): first defined here

make: *** [Makefile:783: vmlinux] Error 1

Еще раз все очищаю:

make -C ./ ARCH=arm CROSS_COMPILE=../toolchain/bin/arm-linux-gnueabi- clean

make -C ./ ARCH=arm CROSS_COMPILE=../toolchain/bin/arm-linux-gnueabi- distclean

Сравниваю (использовал только параметр -r, иначе много очень всего выводится):

diff -r source_bcp/kernel source/kernel

Only in source_bcp/kernel/arch/arm/boot/compressed: ashldi3.S

Only in source_bcp/kernel/arch/arm/boot/compressed: hyp-stub.S

Only in source_bcp/kernel/arch/arm/boot/compressed: lib1funcs.S

Only in source_bcp/kernel/arch/arm/boot/compressed: vmlinux.lds

Only in source_bcp/kernel/arch/arm/kernel: vmlinux.lds

Only in source_bcp/kernel: .config

Only in source_bcp/kernel/drivers/tty/vt: consolemap_deftbl.c

Only in source_bcp/kernel/drivers/tty/vt: defkeymap.c

Only in source_bcp/kernel/kernel: config_data.h

Only in source_bcp/kernel/kernel: hz.bc

Only in source_bcp/kernel/kernel: timeconst.h

Only in source_bcp/kernel/lib: crc32table.h

Only in source_bcp/kernel/lib: gen_crc32table

Only in source_bcp/kernel/scripts/basic: fixdep

Only in source_bcp/kernel/scripts: bin2c

Only in source_bcp/kernel/scripts: conmakehash

Only in source_bcp/kernel/scripts: kallsyms

Only in source_bcp/kernel/scripts/kconfig: conf

Only in source_bcp/kernel/scripts/kconfig: zconf.hash.c

Only in source_bcp/kernel/scripts/kconfig: zconf.lex.c

Only in source_bcp/kernel/scripts/kconfig: zconf.tab.c

Only in source_bcp/kernel/scripts/mod: devicetable-offsets.h

Only in source_bcp/kernel/scripts/mod: elfconfig.h

Only in source_bcp/kernel/scripts/mod: mk_elfconfig

Only in source_bcp/kernel/scripts/mod: modpost

Only in source_bcp/kernel/scripts: sortextable

Only in source_bcp/kernel/usr: gen_init_cpio

Only in source_bcp/kernel/usr: initramfs_data.cpio

Странно, что написано Only in source_bcp/kernel… хотя эти файлы наоборот есть в source/kernel Ну да, получается изменения есть. Но какая разница? Ранее я удалял все, что скачал с репозитория, скачивал это заново и попробовать собрать, но получал те же ошибки. Пробую повторить. Делаю копию чистого бэкапа папки с исходниками ядра. Захожу в эту копию и пробую собрать все еще раз. Т.е. исходники чистые полностью. Как результат тоже самое:

sound/built-in.o: In function rda_gpioc_operation’:

last.c:(.text+0x1977c): multiple definition ofrda_gpioc_operation’

drivers/built-in.o:clk-composite.c:(.text+0x1b9c): first defined here

sound/built-in.o: In function .LANCHOR2’:

last.c:(.bss+0x51c): multiple definition ofbp_gpioc_msys’

drivers/built-in.o:clk-composite.c:(.bss+0x654): first defined here

make: *** [Makefile:783: vmlinux] Error 1

Выходит, что сама папка с исходниками никак на это не влияет. Как будто в процессе сборки что-то происходит в самой системе. Но странно… Ведь все объектные файлы должны собираться в своих папках с исходниками и линковаться должны оттуда же… Вот такая вот непонятная ситуация.

valeri-dexter ()
Ответ на: комментарий от valeri-dexter

Как будто в процессе сборки что-то происходит в самой системе. Но странно…

ну так не должно быть.

Ранее я удалял все, что скачал с репозитория, скачивал это заново и попробовать собрать, но получал те же ошибки.

то есть, после неудачной сборки вы берете чистые исходники, где не проводилась зборка и сборка не получается? если все удалить, включая все скрипты от производителя, но не переустанавливать систему, то собрать получается?

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

В этом и проблема, что не собирается. Я полностью удаляю папку, в которой у меня лежит вообще все, что касается сборки. Создаю новую папку, снова клонирую туда скрипт, потом скриптом клонирую исходники и снова пытаюсь собрать. И получаю:

sound/built-in.o: In function `rda_gpioc_operation':

last.c:(.text+0x1977c): multiple definition of `rda_gpioc_operation'

drivers/built-in.o:clk-composite.c:(.text+0x1b9c): first defined here

sound/built-in.o: In function `.LANCHOR2':

last.c:(.bss+0x51c): multiple definition of `bp_gpioc_msys'

drivers/built-in.o:clk-composite.c:(.bss+0x654): first defined here

make: *** [Makefile:783: vmlinux] Error 1

make: Leaving directory

Чтобы убедиться я вот только что уже на другом компьютере, тоже на VirtualBox все проделал еще раз. Удалил все, склонировал - не собирается. Если систему переустановить, то соберется… 1 раз правда опять… Судя по всему что-то в системе происходит, но вот как это отследить :( Я еще сильнее стал хотеть разобраться и дойти до конца. Могу даже видео захватить всего, что делаю. Там, если вырезать саму сборку, будет минута.

valeri-dexter ()
Ответ на: комментарий от valeri-dexter

Судя по всему что-то в системе происходит, но вот как это отследить

маловероятно, но отследить можно так

устанавливаете свежую систему
устанвливаете исходники и скрипты для сборки
выполняете touch /root/time1
запускаете сборку
удаляете все исходники
выполняете touch /root/time2
выполнете
find /  -not \( -path /dev -prune \) -not \( -path /proc -prune \) -not \( -path /sys -prune \) -not \( -path /boot -prune \) -not \( -path /media -prune \) -not \( -path /mnt -prune \) -and \( -newer /root/time1 \) -and \( ! -newer /root/time2 \)

последняя команда покажет вам, какие файлы были созданы в системе между моментом создания /root/time1 и /root/time2, так же параметр -newer можно заменить на -cnewer, чтобы отследить файлы по времени модификации или на -anewer, чтобы отследить файлы по дате доступа, естественно, все эти 3 параметра можно скомбинировать в одной команде find, но можно и по отдельности запускать

-anower, пожалуй, бесполезна, а вот -cnewer может выдать полезную информацию

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

Интересно, много ли людей ухало в дурдом в процессе экспериментов с ядром :) Мне кажется уже скоро туда пора. В общем стал я пробовать предложенный вариант и о чудо… НЕ собралось с первого раза все с той же ошибкой. Утеряна последняя закономерность. Выходит, что теперь это рандомное явление. Крайне обидно, ведь ранее несколько раз с первого раза собиралось все.

valeri-dexter ()
Ответ на: комментарий от IvanR

Вчера весь вечер игрался с зависимостями. Отключил Alsa, получил undefined reference на ряд функций. Пошел в исходники искать где эти зависимости требуются. Нашел, посмотрел в Kconfig название пункта меню, пошел в menuconfig, отключил. Собираю, а он ругается на отсутствие других функций. Снова лезу, ищу, отключаю. И так часа 3. В итоге после каждого отключения чего-то не хватало. Т.е. menuconfig никак не решает проблему зависимостей опций друг от друга. Странно, что если запустить систему и просто удалить alsa, то все работает без проблем.

valeri-dexter ()