Self-built kernels on Linaro
Tried compiling kernel with .config
from (http://elinux.org/Panda_How_to_kernel_3_3_rcx).
$ make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm uImage
$ make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm tarbz2-pkg
Copy arch/arm/boot/uImage
to boot partition and unpack modules tarball in root partition. First boot doesn’t go so well,
Texas Instruments OMAP4460 ES1.1
OMAP SD/MMC: 0
reading u-boot.img
reading u-boot.img
U-Boot 2011.12-rc1 (Dec 19 2011 - 11:02:24)
CPU : OMAP4460 ES1.1
Board: OMAP4 Panda
I2C: ready
DRAM: 1 GiB
WARNING: Caches not enabled
MMC: OMAP SD/MMC: 0
Using default environment
In: serial
Out: serial
Err: serial
Net: No ethernet found.
Hit any key to stop autoboot: 0
reading uEnv.txt
** Unable to read "uEnv.txt" from mmc 0:1 **
reading boot.scr
514 bytes read
Loaded script from boot.scr
Running bootscript from mmc0 ...
## Executing script at 82000000
reading uImage
3409656 bytes read
reading uInitrd
1878123 bytes read
reading board.dtb
340 bytes read
## Booting kernel from Legacy Image at 80200000 ...
Image Name: Linux-3.3.0-rc5-00102-g6b3e075
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 3409592 Bytes = 3.3 MiB
Load Address: 80008000
Entry Point: 80008000
Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 81600000 ...
Image Name: Ubuntu Initrd
Image Type: ARM Linux RAMDisk Image (uncompressed)
Data Size: 1878059 Bytes = 1.8 MiB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
## Flattened Device Tree blob at 815f0000
Booting using the fdt blob at 0x815f0000
Loading Kernel Image ... OK
OK
reserving fdt memory region: addr=9d000000 size=3000000
Using Device Tree in place at 815f0000, end 815f3153
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
Alright, well, let’s try enabling DEBUG_LL
and earlyprintk.
At least now we have an error,
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
Error: unrecognized/unsupported device tree compatible list:
[ 'ti,omap4-panda' 'ti,omap4430' ]
Available machine support:
ID (hex) NAME
ffffffff Generic OMAP4 (Flattened Device Tree)
ffffffff Generic OMAP3 (Flattened Device Tree)
00000870 OMAP4430 4430SDP board
00000ae7 OMAP4 Panda board
00000bbc ti8148evm
00000af0 ti8168evm
Please check your kernel config and/or bootloader.
Ahh, so the devicetree file Linaro installed must not be compatible with this kernel. It seems that the kernel comes with some devicetrees. Let’s use one.
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- omap4-panda.dtb
After copying arch/arm/boot/omap4-panda.dtb
to board.dtb
, we get boot! Sort of… Kernel oops shortly after boot due to bug to be fixed before release of 3.3 (http://www.spinics.net/lists/linux-omap/msg64921.html). After applying proposed patch we get a bit further.
[ 1.699340] twl_rtc twl_rtc: setting system clock to 2000-01-01 00:00:00 UTC (946684800)
[ 1.710784] Freeing init memory: 240K
Loading, please wait...
modprobe: FATAL: Could not load /lib/modules/3.3.0-rc5-00103-g613a465/modules.dep: No such file or directory
mount: mounting udev on /dev failed: No such device
W: devtmpfs not available, falling back to tmpfs for /dev
Begin: Loading essential drivers ... FATAL: Could not load /lib/modules/3.3.0-rc5-00103-g613a465/modules.dep: No such file or directory
FATAL: Could not load /lib/modules/3.3.0-rc5-00103-g613a465/modules.dep: No such file or directory
FATAL: Could not load /lib/modules/3.3.0-rc5-00103-g613a465/modules.dep: No such file or directory
FATAL: Could not load /lib/modules/3.3.0-rc5-00103-g613a465/modules.dep: No such file or directory
done.
Begin: Running /scripts/init-premount ... done.
Begin: Mounting root file system ... Begin: Running /scripts/local-top ... done.
Gave up waiting for root device. Common problems:
- Boot args (cat /proc/cmdline)
- Check rootdelay= (did the system wait long enough?)
- Check root= (did the system wait for the right device?)
- Missing modules (cat /proc/modules; ls /dev)
ALERT! /dev/disk/by-uuid/539e4d72-de69-44ee-9c81-a54cf27ec22d does not exist. Dropping to a shell!
It seems there’s an impedance mismatch between Linaro’s handling of /dev and my kernel’s. Ahh, CONFIG_DEVTMPFS
and CONFIG_DEVTMPFS_MOUNT
aren’t enabled.
While this gets rid of the /dev errors, the root device is still unavailable. Ahhh, after much puzzling, it seems that something still isn’t right in the devicetree. The hint is,
Uncompressing Linux... done, booting the kernel.
[ 0.000000] Booting Linux on physical CPU 0
[ 0.000000] Linux version 3.3.0-rc5-00103-g613a465-dirty (bgamari@goldnerlab) (gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu3) ) #13 SMP Thu Mar 1 18:33:15 EST 2012
[ 0.000000] CPU: ARMv7 Processor [412fc09a] revision 10 (ARMv7), cr=10c5387d
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] Machine: Generic OMAP4 (Flattened Device Tree), model: TI OMAP4 PandaBoard
Generic OMAP4
is a machine type alongside in OMAP4 Panda board
in Kconfig. It must be picking the generic board, which has no MMC device in its devicetree. Hmmm.
Disabling Generic OMAP4
in .config
causes the kernel to complain that it doesn’t support the devicetree. Pulling board file changes from this patch also doesn’t help. Adding the remaining compatibility flags to the board’s compatbility list gets things booting again.
Still can’t mount root however. It seems some ext4 flags aren’t supported by this kernel. Enable Ext4 and extended attributes in Kconfig.
Finally, we have full boot.