Страница 1 из 1

HELP : ошибка при компиляции ядра.

Добавлено: 28 июл 2005, 16:15
kif0rt
в процессе make bzImage вылетела вот такая ошибка:

Код: Выделить всё

....
GEN     .version
  CHK     include/linux/compile.h
  UPD     include/linux/compile.h
  CC      init/version.o
  LD      init/built-in.o
  LD      .tmp_vmlinux1
drivers/built-in.o(.text+0xcaeb): In function `splash_getraw':
: undefined reference to `con2fb_map'
drivers/built-in.o(.text+0xd542): In function `splash_verbose':
: undefined reference to `con2fb_map'
drivers/built-in.o(.text+0xda43): In function `splash_status':
: undefined reference to `con2fb_map'
drivers/built-in.o(.text+0xdb60): In function `splash_read_proc':
: undefined reference to `con2fb_map'
drivers/built-in.o(.text+0xdd64): In function `splash_write_proc':
: undefined reference to `con2fb_map'
drivers/built-in.o(.text+0xe0c2): more undefined references to `con2fb_map' follow
make: *** [.tmp_vmlinux1] Ошибка 1
Ума не приложу где копать.

Добавлено: 28 июл 2005, 16:19
Llama
kif0rt, пологаю ядро патчилось на предмет bootspalsh?
Патч именно для это версии ядра?
какая версия компилятора?

Добавлено: 29 июл 2005, 00:40
kif0rt
Llama писал(а):kif0rt, пологаю ядро патчилось на предмет bootspalsh?
Патч именно для это версии ядра?
какая версия компилятора?
Совершенно верно. Но эту проблему я уже решил.
Вот лекарство с одного сайта :

Код: Выделить всё

Bootsplash compiled into your kernel; linking fails

  LD      .tmp_vmlinux1
drivers/built-in.o(.text+0xa898a): In function `splash_getraw':
: undefined reference to `con2fb_map'
drivers/built-in.o(.text+0xa918c): In function `splash_verbose':
: undefined reference to `con2fb_map'
drivers/built-in.o(.text+0xa9670): In function `splash_status':
: undefined reference to `con2fb_map'
drivers/built-in.o(.text+0xa97a4): In function `splash_read_proc':
: undefined reference to `con2fb_map'
drivers/built-in.o(.text+0xa997d): In function `splash_write_proc':
: undefined reference to `con2fb_map'
make: *** [.tmp_vmlinux1] Error 1

You need to have framebuffer console support compiled in. Can't be a module!

Set CONFIG_FRAMEBUFFER_CONSOLE=y in the .config.

Ядро прекрасно скомпилилось и установилось (по крайней мере на первый взгляд). Сразу мне не понравилоссь, что в /boot
не лежит initrd-2.6.12.2 но System.map-2.6.12.2 и vmlinuz-2.6.12.2 на месте. Ну, думаю, может так и надо ...

Делаю update-grub , которая мне радостно сообщила о присутствии моего нового ядра :

Код: Выделить всё

Searching for GRUB installation directory ... found: /boot/grub .
Testing for an existing GRUB menu.list file... found: /boot/grub/menu.lst .
Searching for splash image... none found, skipping...
Found kernel: /boot/vmlinuz
Found kernel: /boot/vmlinuz-2.6.12.2
Found kernel: /boot/vmlinuz-2.6.11-1-686
Found kernel: /boot/vmlinuz-2.6.8-2-686
Updating /boot/grub/menu.lst ... done
Перезагрузка > клик на новом ядре > и вот вам ошибочка :(

Код: Выделить всё

VFS:Cannot open root device "hda7" or unknown-block(0,0)
Please append a correct "root=" boot option
Kernel panic - not syncing : VFS: Unable to mount root fs or unknown-block(0,0)
Посмотрел в menu.lst всё там correct выставлен root (как на старом работающем ядре).

Вот часть menu.lst с новым ядром :

Код: Выделить всё

...
title		Debian GNU/Linux, kernel 2.6.12.2 
root		(hd0,6)
kernel		/boot/vmlinuz-2.6.12.2 root=/dev/hda7 ro 
savedefault
boot

title		Debian GNU/Linux, kernel 2.6.12.2 (recovery mode)
root		(hd0,6)
kernel		/boot/vmlinuz-2.6.12.2 root=/dev/hda7 ro single
savedefault
boot
...

Добавлено: 29 июл 2005, 02:16
kif0rt
Справился и с этим. :)

mkinitrid -o /boot/initrid.img-2.6.12.2 2.6.12.2 сделала мне initrd.
Добавил я это дело в menu.lst и ядро начало загружаться. И перед самым запуском иксов вывалилась следующая ошибка:
ERROR:Module Intel536 does not exist in /proc/modules

Точно такое же сообщение я получил от ядра 2.6.11 скачанного и установленного из репозитория Debian Unstable. Я конечно попробовал дописать Intel536(это мой модем) в /proc/modules но к моему удивлению этот файл нельзя редактировать даже под рутом :?

Что посоветуете ?

P.S.>А что мне с bzImage делать ? не просто так он ведь создавался ?

Добавлено: 29 июл 2005, 10:30
Llama
kif0rt,
1) это не лекарство, это надо читать доку на bootsplash в которой про framebuffer ясно сказано - раз bottsplash начинает работать до того как повится доступ к корневой файловой системе. то его надобно вкомпиливать намертво. Т.е. bottsplash исмпользует framebuffer - то и vesafb туда же...
2) модули собираются под каждое конкретное ядро, соответсвенно пересобери дрова для модема...
3) bzImage прекрасно работает, если ты собрал драйвера для загрузочного устройства и корневой фаловой системы внутри ядрва а не модулями ;) Если делаешь модули - то их надо помещать в initrd, иначе ядро не имея доступа к корневой фаловой системе не сможет загрузить нужные модули, чтобы получить доступ к корневой файловой системе, вобщем man initrd - тама описано что это и зачем.
4) модули ИМХО правильно прописывать в /etc/modprobe.d и использовать update-modules или поставь modconf - он делает то же самое только с менюшками в консоли.

Добавлено: 29 июл 2005, 13:36
kif0rt
Llama писал(а):kif0rt,
модули собираются под каждое конкретное ядро, соответсвенно пересобери дрова для модема...
Пересобрал модули. Но теперь чтобы менять ядро мне надо перед этим пересобирать модули(для nvidia). Это так и делается ? Видимо модуль для nvidia не может быть общим для разных версий ядер ...
Llama писал(а): 3) bzImage прекрасно работает, если ты собрал драйвера для загрузочного устройства и корневой фаловой системы внутри ядрва а не модулями ;) Если делаешь модули - то их надо помещать в initrd, иначе ядро не имея доступа к корневой фаловой системе не сможет загрузить нужные модули, чтобы получить доступ к корневой файловой системе, вобщем man initrd - тама описано что это и зачем.
Мне теперь можно удалить исходники ядра ? Просто именно там лежит новый bzImage и я не знаю будет ли грузится ядро если его удалить.

Ах да .. ещё одно НО - ядро я собрал и оно даже запустилось . Но вот незадача : ни одно прилоложение не работает правильно. А точнее оно вообще не запускается. :=) Видимо что-то я очень важное исключил из ядра :)

Добавлено: 29 июл 2005, 14:50
Llama
kif0rt, да, NVIDIA тоже специфичен для каждой версии ядра, как в принципе и любой другой модуль.
Если ты скопировал bzImage, то сырцы можешь удалять, правда собрать что-либо связанное с ядром....

PS: Дальнейшие разговоры на эту тему буду продолжать после установки тобой (у тебя ведь debian, если маразм не изменяет) пакета kernel-package и прочтения man make-kpkg. ;)

Добавлено: 29 июл 2005, 21:55
kif0rt
Llama писал(а):kif0rt, да, NVIDIA тоже специфичен для каждой версии ядра, как в принципе и любой другой модуль.
Если ты скопировал bzImage, то сырцы можешь удалять, правда собрать что-либо связанное с ядром....

PS: Дальнейшие разговоры на эту тему буду продолжать после установки тобой (у тебя ведь debian, если маразм не изменяет) пакета kernel-package и прочтения man make-kpkg. ;)
Понимаю, что достал ... :) На последок два вопроса :
1) А если я перемещу папку с сырцами в другое место, то от этого ничего не пострадает. Ведь bzImage лежит именно в папке с сырцами, как же тогда буднт грузится линух если файл переместиться ?
2) получается, что можно пользоваться только одним ядролм чтобы работали дрова от nvidia ? (модем у меня заработал везде, просто его надо было перекомпилить)

Добавлено: 30 июл 2005, 11:06
Llama
kif0rt,
1) посмотри в menu.lst как прописан путь к ядру... Если это /usr/src/linux/arch/i386/boot/bzImage, то удалять этот файл явно нежелательно.
2) Да, именно так... Вроде бы как были некие workaround на этот счет, но я сходу не вспомню...

Добавлено: 30 июл 2005, 12:56
kif0rt
Llama писал(а):kif0rt,
посмотри в menu.lst как прописан путь к ядру... Если это /usr/src/linux/arch/i386/boot/bzImage, то удалять этот файл явно нежелательно.
В том-то всё и дело, что в menu.lst нет никаких упоминаний о bzImage.