Hello
I have a 2.4.36.3 kernel compiled for an embedded target (i386).
Init (busybox) however does not start up. Using a linux-2.6.24 kernel,
it starts up.
My hypothesis is currently that busybox's libc is not working properly as it is compiled on a host running linux-2.6.18-gentoo.
The library is statically linked to busybox. It should hence not matter on which host system the binary was compiled (as long as the processor architecture does not change). Libc however uses kernel system calls -- that makes me think it might matter.
Besides a solution, I would appreciate suggestion how to trace this down further.
Setup
=====
a) Kernel: 2.4.36.3
b) Rootfs: via nfs
c) Init: replaced by a hello world program (to exclude busybox as the culprit)
Code:
#include <stdio.h>
int main(int argc, char *argv)
{
printf("Hello world!\n");
sleep(999999999);
}
The executable is statically linked (using libc of the host system running linux 2.6.18-gentoo)
> file /var/nfs/vmic7750/usr/src/init
/var/nfs/vmic7750/usr/src/init: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, statically linked, for GNU/Linux 2.6.9, not stripped
d) Added debug output to init/main.c:run_init_process
Code:
static void run_init_process(char *init_filename)
{
printk("Starting init (%s)\n",init_filename); <=== printk statement is my addition
argv_init[0] = init_filename;
execve(init_filename, argv_init, envp_init);
}
Console Output
==============
Code:
Secondary interface chip i82555.
General self-test: passed.
Serial sub-system self-test: passed.
Internal registers self-test: passed.
ROM checksum self-test: passed (0x04f4518b).
Receiver lock-up workaround activated.
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP, IGMP
IP: routing cache hash table of 2048 buckets, 16Kbytes
TCP: Hash tables configured (established 16384 bind 32768)
Sending DHCP requests . OK
IP-Config: Got DHCP answer from 192.168.1.1, my address is 192.168.1.49
IP-Config: Complete:
device=eth0, addr=192.168.1.49, mask=255.255.255.0, gw=192.168.1.2,
host=192.168.1.49, domain=home.gloetzner.net, nis-domain=(none),
bootserver=192.168.1.1, rootserver=192.168.1.1, rootpath=/var/nfs/vmic7750
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
Looking up port of RPC 100003/2 on 192.168.1.1
Looking up port of RPC 100005/1 on 192.168.1.1
VFS: Mounted root (nfs filesystem).
Mounted devfs on /dev
Freeing unused kernel memory: 84k freed
Starting init (/usr/src/init) <===== I added this printk statement in the kernel code
Thanks
Tilman