LINUX.ORG.RU

Нет звука после компиляции ядра

 , , ,


1

1

Здравствуйте. Мне попал в руки старенький нетбук Asus Eee Pc 1000 с первым атомом на борту, который не умеет даже в 64 бит, 1 гигом оперативки и древним SSD на 40 гигабайт. Решил отчасти из спортивного интереса, отчасти из некоторых соображений вдохнуть в него жизнь, снёс установленную там XP и установил Lubuntu 18.04. Последнюю с поддержкой 32 бит. Решил также скомпилировать для него ядро по трём соображениям - во первых убрать по максимуму всё лишнее и оставить лишь то, что нужно для его работы. Во вторых оптимизировать под железо. В третьих - раз древний ssd, то и файловую систему хотелось использовать щадящую, то есть f2fs, для чего её поддержку пришлось включить в состав самого ядра, а не модуля. В результате всех мытарств получилось вполне шустрое компактное ядро. Загрузка происходит быстро, работа тоже настолько, насколько это вообще возможно для такого железа. Даже в интернете вполне сносно можно работать, разве что кроме просмотра видео в хорошем разрешении. Не ожидал, но оказывается Vivaldi до сих пор предоставляет 32 битные deb пакеты. Всё хорошо за исключением одного косяка - не работает аудио. Звуковых карт не обнаруживается вовсе ни одной. cat /proc/asound/cards выдаёт:

--- no soundcards ---

Но при этом lspci -v:

00:1b.0 Audio device: Intel Corporation NM10/ICH7 Family High Definition Audio Controller (rev 02)
	Subsystem: ASUSTeK Computer Inc. NM10/ICH7 Family High Definition Audio Controller
	Flags: fast devsel, IRQ 16
	Memory at f7eb8000 (64-bit, non-prefetchable) [size=16K]
	Capabilities: [50] Power Management version 2
	Capabilities: [60] MSI: Enable- Count=1/1 Maskable- 64bit+
	Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00
	Capabilities: [100] Virtual Channel
	Capabilities: [130] Root Complex Link
	Kernel driver in use: snd_hda_intel

то есть модуль подгружается, ядро оборудование видит.

В dmesg вроде никаких ошибок нету. Подозреваю, что какие то опции в ядре не включил, но какие ? Буду очень благодарен за подсказку. PS При загрузке с Live образа Lubuntu звук есть.

Решил также скомпилировать для него ядро по трём соображениям - во первых убрать по максимуму всё лишнее и оставить лишь то, что нужно для его работы. Во вторых оптимизировать под железо. В третьих - раз древний ssd, то и файловую систему хотелось использовать щадящую, то есть f2fs, для чего её поддержку пришлось включить в состав самого ядра, а не модуля.

Это всё на самом деле тебе не нужно. Во-первых, дистрибутивных ядрах всё «лишнее» вынесено в модули, а неиспользуемые модули никак не влияют на работу системы. Во-вторых, открой для себя initramfs, систему можно загрузить с любой ФС без дрочева с включением драйверов ФС в бинарник ядра. Кстати, монолитные ядра загружаются дольше, чем модульные. Ну и в-третьих, интересно узнать, чего же ты там такого «наоптимизировал под железо».

Короче, не можешь срать — не мучай жопу не умеешь — ставь дистрибутивное ядро и не выделывайся.

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

Всё это я знаю. Всё, что возможно и так в модули вынес. Грузиться стало быстрее наверное раза в полтора по сравнению с дистрибутивным ядром. Насчёт работы - не замерял, но возможно тоже ускорилось немного. Что наоптимизировал - ничего особенного. «-march=native -mtune=native -mfpmath=sse -pipe -O2». Всё как обычно.)

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

Вот вывод:

Module                  Size  Used by
fuse                   94208  3
bnep                   20480  2
lzo_rle                16384  4
zram                   20480  2
zsmalloc               24576  1 zram
coretemp               16384  0
joydev                 20480  0
serio_raw              16384  0
btusb                  40960  0
btrtl                  16384  1 btusb
btbcm                  16384  1 btusb
btintel                16384  1 btusb
bluetooth             323584  26 btrtl,btintel,bnep,btbcm,btusb
ecdh_generic           16384  1 bluetooth
ecc                    40960  1 ecdh_generic
lpc_ich                24576  0
mfd_core               16384  1 lpc_ich
rt2800pci              16384  0
eeprom_93cx6           16384  1 rt2800pci
rt2x00pci              16384  1 rt2800pci
rt2800mmio             16384  1 rt2800pci
rt2x00mmio             16384  2 rt2800mmio,rt2800pci
rt2800lib             106496  2 rt2800mmio,rt2800pci
rt2x00lib              45056  5 rt2800lib,rt2x00pci,rt2800mmio,rt2x00mmio,rt2800pci
mac_hid                16384  0
sch_fq_codel           20480  6
parport_pc             24576  0
ppdev                  20480  0
lp                     20480  0
parport                24576  3 lp,parport_pc,ppdev
pata_acpi              16384  0
atl1e                  32768  0

Кстати говоря snd_hda_intel отсутствует и по modprobe не грузится

eol3000 ()

Вероятно codec-и в ядре все поотключал в т.ч. и нужный. Пробуй сравнить lsmod | cut -f 1 -d ' ' | sort > lsmod_$(uname -r) ядер где звук работает и своего. Это если они там модулями вообще включаются.

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

Спасибо, ссылка помогла. Совсем забыл, что действительно можно было у генту подсмотреть.)

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

Попутно кстати выяснил, что веб камера тоже не работает, и её заодно починил, подсмотрев у генту.

Так что больше косяков вроде нет.

eol3000 ()