Kernel panic po kompilacii kernelu

9r na seznam.cz 9r na seznam.cz
Pátek Červenec 6 17:34:53 CEST 2001


"Ing. Miroslav Cabarka" wrote:
> 
> Podla: file /sbin/init je to ELF 32-bit LSB executable, 386, ver 1,
> dynamicky linkovane, stripovane
> Podporu pre ELF v kerneli som zapol, okrem toho file /bin/ls dava taky isty
> vysledok a ls funguje, takze podpora je.

???? vzdyt dotycny kernel neumi nabootovat... jak pod nim muze fungovat
ls? rad bych vedel podorobnosti.

> Mozno mu chyba nejaka kniznica, ale preco sa potom s kernelom 2.2.14 spusti
> ta ista binarka bez problemov a s 2.2.19 nie? V lilo.conf mam 3 kernely:
> 2.2.14 zdrojaky z distribucie, prekompilovane na firewall - funguje.
> Prakticky s rovnakou konfiguraciou kernelu, ale zdrojaky 2.2.19pre18 a
> 2.2.19 - oba stiahnute z internetu vykazuju tuto chybu. Postup konfiguracie

pokud si dobre vzpominam, pak rh 6.2 s cistou 2.2.19kou chodil bez
problemu.

> a kompilovania je rovnaky. Poziadavky na verzie kompilatora a utilit su
> rovnake.

pro jistotu doporucuji pouzit misto rovnakeho postupu postup
nasledujici:

cd /usr/src/linux-2.2.19
make menuconfig
#spravne nakonfigurovani
make dep
make clean
make bzImage
make modules
make modules-install

tohle vam vytvori hotovy kernel v
/usr/src/linux-2.2.19/arch/i386/boot/bzImage. 
ten nejak zkopirujte tam, kde ho mate uvedeny v lilo.conf
(klidne jen tak "rucne", i kdyz jsou na to i nejake targety v Makefile)
pak spustte lilo (nutne nejen pote, co pridate novy kernel do lilo.conf,
ale po jakekoliv zmene nejakeho kernelu!)
...a rebootujte

> >Pokud to nebude ono, tak uz toho moc nezbyva - snad jen mirne
> >modifikovat uvedeny kod, aby po kazdem neuspesnem execve (neni treba
> >testovat return value, pokud execve vyjde tak se uz nic dalsiho
> >nevykona) udela nejaky perror();, ktery vam aspon rekne trochu vic. Na
> >zaklade tohoto vic pak mozna bude mozne urcit dalsi postup.
> 
> Toto je na mna trochu vysoka matematika.

nejak proste zjistete, co vam vraci to neuspesne execve. nevim, co
vsechno lze v dane chvili pouzivat, knihovnim funkcim bych se radsi
vyhybal (kernel linkovany proti dynamickym knihovnam si tusim stejne
nechal patentovat microsoft :)). zkuste treba misto

	execve("/sbin/init",argv_init,envp_init);
        execve("/etc/init",argv_init,envp_init);
        execve("/bin/init",argv_init,envp_init);
        execve("/bin/sh",argv_init,envp_init);

napsat takovouhle obludnost:

        printk("/sbin/init: %d\n",
	       execve("/sbin/init",argv_init,envp_init));
        printk("/etc/init: %d\n",
               execve("/etc/init",argv_init,envp_init));
        printk("/bin/init: %d\n",
               execve("/bin/init",argv_init,envp_init));
        printk("/bin/sh: %d\n",
               execve("/bin/sh",argv_init,envp_init));

pak prekompilujte kernel a zkuste to znovu. kernel by vam pak mel pred
smrti vypsat trosku vic veci. ty sem pak poslete.

-- 
NOTE FOR WINDOWS (TM) USERS: IN NO EVENT UNLESS REQUIRED BY APPLICABLE
LAW WILL I BE LIABLE TO YOU FOR ANY SOFTWARE OR HARDWARE DAMAGE, SYSTEM
MALFUNCTION OR DATA LOSS ARISING OUT WHILE YOU ARE READING THIS NOTE.


Další informace o konferenci Linux