Kernel compilation issues and questions

bluscape
Hi,

I've followed several tutorials ans wiki's on how to compile my own kernel
for the mini2440. For now the main reason for doing this is to try and
change the boot logo which I have not been able to change.

I followed mostly the following tutorials:

1.) http://code.google.com/p/friendlyarm/wiki/Linux_Tutorial
2.) http://wiki.linuxmce.org/index.php/Mini2440
3.)
http://bill.station51.net/index.php?post/2010/07/14/HOWTO%3A-Cross-Compi...
4.) http://www.electronics.diycinema.co.uk/embedded/mini2440/2009/09/
5.)
http://bill.station51.net/index.php?post/2010/05/08/HOWTO%3A-Setting-up-...

Firstly I have a few questions about parameters which I do not understand
or ones who gives me errors:

1.) In link 1.) they compile the kernel with the "-j4" setting(make
ARCH=arm O=../../kernel-bin/ -j4). What is this setting for? Does it
specify the number of parallel processes allowed or is it something
completely different? I'm compiling from a virtual machine with only one
CPU, do I set this yo -j1?

2.) From link 1.) I specify the architecture using
"CC='arm-none-linux-gnueabi-gcc -march=armv4t -mtune=arm920t". What does
this command do?

Secondly I would like to decsribe my compilation procedure that does not
want to display the new logo:

1.) Install the arm toolchain described in link 5.)
2.) mkdir ~/kernel
3.) cd ~/kernel
4.) git clone git://repo.or.cz/linux-2.6/mini2440.git
5.) cd mini2440
6.) mkdir -p ../kernel-bin
7.) pngtopnm logo.png | pnmtoplainpnm > logo_linux_clut224.ppm OR pngtopnm
logo.png | ppmquant -fs 223 | pnmtoplainpnm > logo_linux_clut224.ppm
8.) cp logo_linux_clut224.ppm ~/kernel/mini2440/drivers/video/logo
9.) export CROSS_COMPILE=arm-none-linux-gnueabi-
10.)CC='arm-none-linux-gnueabi-gcc -march=armv4t -mtune=arm920t'
11.)export CC
12.)make ARCH=arm O=../kernel-bin/ distclean
13.)make ARCH=arm O=../kernel-bin/ mrproper
14.)make ARCH=arm O=../kernel-bin/ mini2440_defconfig
15.)make ARCH=arm O=../kernel-bin/ menuconfig
16.)I "Load an alternative configuration file", config_mini2440_t35,
because I have a T35 lcd.
17.)Add support for wanted file systems and MTD (I only add ext3 since my
rootfs is on ext3 filesystem on the SD)
18.)I 'Save an alternative configuration file" as .config then Exit
19.)make ARCH=arm O=../kernel-bin/ -j4
20.)make ARCH=arm O=../kernel-bin/ -j4 modules
21.)make ARCH=arm O=../kernel-bin/ INSTALL_MOD_PATH=.. modules_install
22.)../../uboot/mini2440/tools/mkimage -A arm -O linux -T kernel -C none -a
0x30008000 -e 0x30008000 -d ../kernel-bin/arch/arm/boot/zImage
../ksudoernel-bin/arch/arm/boot/uImage
22.)sudo cp ../lib/modules/2.6.32-rc8/ /media/rootfs/lib/modules/ -r
22.)sudo cp ../kernel-bin/arch/arm/boot/uImage /media/boot -r
23.)sync
24.)umount /media/*

With this my logo still does not boot and I get a kernel panic when using
uboot or "load Image of Linux... Wrong Linux Kernel" when using supervivi.

Any advice will be appreciated.

Thank you

davef
I'll have a go:

1.  The general advise I have seen is set j to one more than the number of
CPUs .  Think it is only useful when you are not trying to do anything
else.  I have seen -j4, maybe be useful for a dual-core machine or
quad-core.

2.  The first part guarantees it is compiled for the particular ARM
architecture used in the mini2440.  The second part seems to be a tweak for
this architecture as well.  I have seen it discarded when compiling some
programs from source.

3. The logo that gets loaded is enabled in the kernel.  Look in <Console
display driver support>.  I have never seen lines 7 and 8.  I don't
understand what they do.  Is this another way of getting the logo to
appear?

bluscape
No,

I use line 7 to convert a .png image to a ppm image.
In line 8 I copy the converted image (now ppm image) to the destination
directory where it should be.

Thank you for your reply.

In the mean while I've been able to get the logo to display using the
source directly from the FriendlyARM website. I had no luck with the git
repository.

http://www.friendlyarm.net/dl.php?file=linux-2.6.32.2-mini2440_20110305.tgz

But I still get a kernel panic:

Kernel panic - not syncing: VFS: Unable to mount root fs on
unknown-block(2,0)
Backtrace: 
[<c003d270>] (dump_backtrace+0x0/0x10c) from [<c0365dc4>]
(dump_stack+0x18/0x1c)
 r7:c048e440 r6:c04c8950 r5:c38e3000 r4:c3823f40
[<c0365dac>] (dump_stack+0x0/0x1c) from [<c0365e14>] (panic+0x4c/0x134)
[<c0365dc8>] (panic+0x0/0x134) from [<c0008e9c>]
(mount_block_root+0x178/0x234)
 r3:00000000 r2:c383d86c r1:c3823f40 r0:c0419a84
[<c0008d24>] (mount_block_root+0x0/0x234) from [<c0009008>]
(mount_root+0xb0/0xf4)
[<c0008f58>] (mount_root+0x0/0xf4) from [<c0009144>]
(prepare_namespace+0xf8/0x190)
 r7:c04c8320 r6:c0021808 r5:c0021808 r4:c0021818
[<c000904c>] (prepare_namespace+0x0/0x190) from [<c00084c0>]
(kernel_init+0xf0/0x124)
 r7:00000000 r6:c002042c r5:c0020920 r4:c0020920
[<c00083d0>] (kernel_init+0x0/0x124) from [<c00551a4>] (do_exit+0x0/0x62c)
 r7:00000000 r6:00000000 r5:00000000 r4:00000000

My rootfs (partition 3 - mmcblk0p3) on the SD card is of type ext3 file
system. I've included the ext file system to the kernel. Why do I still get
a kernel panic?

Thank you

Coburn64
Sounds like you haven't complied in your USB/SDMMC drivers into the kernel.