LinuxForum.Fans
Тема

Сборка ядра, ошибка undefined reference

Автор: Wehrmacht_Rover 45 сообщений 14431 просмотров
24.03.2014 11:50 #373719

Компиляция ядра завершилась неудачей *SORRY*

Показать
[console]bash-4.2$ cd /usr/src/linux
bash-4.2$ make O=/home/wr/build/kernel
make[2]: Цель `all' не требует выполнения команд.
make[2]: Цель `relocs' не требует выполнения команд.
Using /usr/src/linux-3.10.17 as source for kernel
GEN /home/wr/build/kernel/Makefile
CHK include/generated/uapi/linux/version.h
CHK include/generated/utsrelease.h
CALL /usr/src/linux-3.10.17/scripts/checksyscalls.sh
CC scripts/mod/devicetable-offsets.s
GEN scripts/mod/devicetable-offsets.h
HOSTCC scripts/mod/file2alias.o
HOSTLD scripts/mod/modpost
CHK include/generated/compile.h
make[4]: `arch/x86/realmode/rm/realmode.bin' не требует обновления.
CHK kernel/config_data.h
LINK vmlinux
LD vmlinux.o
MODPOST vmlinux.o
GEN .version
CHK include/generated/compile.h
UPD include/generated/compile.h
CC init/version.o
LD init/built-in.o
sound/built-in.o: In function `snd_soc_codec_set_cache_io':
(.text+0x33061): undefined reference to `regmap_init_i2c'
make[1]: *** [vmlinux] Ошибка 1
make: *** [sub-make] Ошибка 2[/console]

Как не долбился - ничего не нашёл и не понял какие опции копать надо, хотя и понял что связано оно со звуковыми дровами. Раньше не один раз собирал ядро - такого ещё не видел! Что характерно, всё же собралось, но не может допилить до конца почему-то, как я понял.

24.03.2014 15:30 #373742

Может быть стоит из-под рута компелять?

24.03.2014 15:50 #373744
"Silencer" написал:
Может быть стоит из-под рута компелять?

Компилил таким же образом на другом компе - всё отлично собралось и ядро нормально работало. Именно так в README ядра и написано собирать.
Кто знает, что это за дурная функция с неопределённой ссылкой и откуда она могла у меня появится? И как её "задушить"?

24.03.2014 16:44 #373757

Wehrmacht_Rover, пройдитесь grep'ом по /usr/src/linux рекурсивно, виновник наверняка найдется. Потом нужно конфиг ядра поправить в части недостающего модуля и пересобрать.

24.03.2014 17:07 #373758
"yars" написал:
нужно конфиг ядра поправить в части недостающего модуля и пересобрать

Если нужен был модуль для какого-то нового устройства, то я просто добавлял его в конфиге и делал make modules и собирался только нужный мне модуль без пересборки всего. Наверное, это не новость?

24.03.2014 17:34 #373761

Wehrmacht_Rover, нет, более того, отдельный модуль можно собрать так.

25.03.2014 11:37 #373868
"yars" написал:
пройдитесь grep'ом по /usr/src/linux рекурсивно, виновник наверняка найдется. Потом нужно конфиг ядра поправить в части недостающего модуля и пересобрать.

Зачем? Я открыл этот файл (sound/built-in.o) нашёл там нужные строки, их много и нихрена непонятно что с ними делать, в итоге я так и не понял какого модуля нехватает. Я вообще непоняимаю что значит "неопределённая ссылка" :( Наверно, значит, что она есть но не определена, а как и для чего её определять? Что-то я упорно не въеду, я не программист! ]:->

25.03.2014 11:59 #373878

Зачем?
Затем, чтобы найти исходник модуля, фунуция из которого используется данным модулем. Файл не надо было открывать.
25.03.2014 12:10 #373881

"Wehrmacht_Rover" написал:
Как не долбился - ничего не нашёл и не понял какие опции копать надо, хотя и понял что связано оно со звуковыми дровами. Раньше не один раз собирал ядро - такого ещё не видел! Что характерно, всё же собралось, но не может допилить до конца почему-то, как я понял.
можно подробнее, что именно вы пытались собрать?
25.03.2014 12:13 #373883

"Wehrmacht_Rover" написал:
их много и нихрена непонятно что с ними делать, в итоге я так и не понял какого модуля нехватает. Я вообще непоняимаю что значит "неопределённая ссылка"
не зная брода, не суйся в воду.

Вы точно уверенны, что вы команды правильно набирали? Не, я конечно идиот, но слышал правило про "не с глаголом", которое вы систематически нарушаете. Думаю и в вашей "инсталляции" тоже.
25.03.2014 12:51 · отредактировано #373893
"drBatty" написал:
не зная брода, не суйся в воду.

Я не пытаюсь перепрограммировать ядро, а пытаюсь его только собрать.

"drBatty" написал:
Вы точно уверенны, что вы команды правильно набирали?

Уверен на 100%, так как

"Wehrmacht_Rover" написал:
Компилил таким же образом на другом компе - всё отлично собралось и ядро нормально работало.
"drBatty" написал:
слышал правило про "не с глаголом", которое вы систематически нарушаете

Нет такого правила в языках C, C++ и др.

"drBatty" написал:
Думаю и в вашей "инсталляции" тоже.

Поэтому к сборке ядра не имеет никакого отношения.

Я задавал другой вопрос, на который не получил от вас адекватного ответа, к сожалению, в итоге оффтоп. *STOP*

25.03.2014 13:00 #373898

Wehrmacht_Rover, вы как ядро конфигурируете? Такое может быть, если вы что-то поправили в /usr/src/linux/.config руками. У ядерных модулей тоже есть зависимости.

25.03.2014 13:06 #373902
"Wehrmacht_Rover" написал:
слышал правило про "не с глаголом", которое вы систематически нарушаете

Нет такого правила в языках C, C++ и др.есть. Увы.

"Wehrmacht_Rover" написал:
Я задавал другой вопрос, на который не получил от вас адекватного ответа, к сожалению, в итоге оффтоп.
вопрос поставлен некорректно.
25.03.2014 13:29 #373909
"drBatty" написал:
есть. Увы.

В моём случает надо не в исходниках колупаться, вспоминая как пишется "не с глаголом" или что-то ещё, а поправить что-то в конфигурации, что и пытаюсь выяснить.

"drBatty" написал:
вопрос поставлен некорректно.

Для тех кто с этим вопросом не сталкивался.

Думаю это связано с дровами звуковухи, которые я указал в конфиге быть в ядре - "snd_intel8x0", может быть помимо этого драйвера надо что-то ещё включить.
[console]bash-4.2# lspci | grep audio
00:04.0 Multimedia audio controller: NVIDIA Corporation CK804 AC'97 Audio Controller (rev a2)[/console]
Аудиочип - Realtek
[console]bash-4.2# lsmod | grep snd
snd_seq_dummy 1119 0
snd_hrtimer 1272 0
snd_seq 40980 1 snd_seq_dummy
snd_seq_device 4244 2 snd_seq,snd_seq_dummy
snd_intel8x0 23649 6
snd_ac97_codec 89231 1 snd_intel8x0
snd_pcm 62870 4 snd_ac97_codec,snd_intel8x0
snd_page_alloc 6062 2 snd_intel8x0,snd_pcm
snd_timer 14870 3 snd_hrtimer,snd_pcm,snd_seq
snd 44159 16 snd_ac97_codec,snd_intel8x0,snd_timer,snd_pcm,snd_seq,snd_seq_device
soundcore 4318 1 snd
ac97_bus 834 1 snd_ac97_codec[/console]
snd_ac97_codec я там не нашёл, может он автоматом включается *SCRATCH*

25.03.2014 13:50 #373917
"Wehrmacht_Rover" написал:
Если нужен был модуль для какого-то нового устройства, то я просто добавлял его в конфиге и делал make modules и собирался только нужный мне модуль без пересборки всего. Наверное, это не новость?

как добавлял? через make *config или вручную?
если второе, то после этого make oldconfig делал?
если нет, то ССЗБ...

как искать подобные фещи grep'ом:

grep -r regmap_init_i2c в числе прочего даёт это:

text

drivers/base/regmap/regmap-i2c.c:EXPORT_SYMBOL_GPL(regmap_init_i2c);

дальше в drivers/base/regmap/Makefile смотришь что надо включить:

text
obj-$(CONFIG_REGMAP_I2C) += regmap-i2c.o

т.е. включить надо CONFIG_REGMAP_I2C. соответственно модулем или в ядро...

25.03.2014 14:08 #373924
"Fat-Zer" написал:
как добавлял? через make *config или вручную?

В данном случае ничего не добавлял, а делал на чистом ядре. Добавлял командой make xconfig && make modules && make modules_install когда, на другом компе собирал.

"Fat-Zer" написал:
как искать подобные фещи grep'ом:

Спасибо за дельный совет. Попробую.

25.03.2014 14:40 #373927
"Fat-Zer" написал:
т.е. включить надо CONFIG_REGMAP_I2C. соответственно модулем или в ядро...

Эта хрень была включена модулем, включил в ядро - таже самая ошибка *WALL*

25.03.2014 14:53 · отредактировано #373928

как обстоит ситуация с

text
CONFIG_i2C

??

25.03.2014 14:59 · отредактировано #373929
"Silencer" написал:
как обстоит ситуация с CONFIG_i2C??

CONFIG_I2C=m

Upd: теперь так: CONFIG_I2C=y, процесс пошёл! Спасибо за подсказку! Посмотрю что получится...

25.03.2014 15:45 #373932

На будущее: предпочтительно использования одного из вариантов make *config, в этом случае зависимости учитываются и со сборкой ядра проблем не будет.

Войдите или зарегистрируйтесь, чтобы ответить.