The linaro team is doing an incredible job at grouping linux kernel fixes and board support package. It enables developers to create/use/modify linux based distributions and target several boards at once. The main drawback I can see is that the documentation provided on the wikis are not kept up to date, and I feel like the compilation processes change all the time.
I started embedded systems with android images, and once I moved to ubuntu nano images, I felt like I didn’t have to do much more than what I already knew. This was last year, and I now wnat to use the newer linaro releases (12.10 for instance). I tried to use the few lines I had with the pandaboard and I ended up with kernel panics and a unbootable system.
I dug a little deeper and realised that the cross compilation tools changed from arm-gnueabi to arm-gnueabihf, so using this tool I tried again with no luck. Then I tried to switch the kernel version. I was using the linux*linaro-tracking git repository available at http://git.linaro.org/gitweb?p=kernel/linux-linaro-tracking.git;a=summary
Again no luck. The 3.6.1+ kernel did not want to live along side the 12.10 linaro release. So I tried with the kernel version that was shipped with the packed image (http://releases.linaro.org/12.10/ubuntu/precise-images/nano). Its kernel version was 3.4.1+ if i remember correctly. So I checked out the git branch named linux-linaro-tracking-3.4-2012.10 and tried once more to build the image, dumped it to the sd card and it just worked… nice!
Before doing this, I just copied the config file located at /boot/ on the file system to get a known working config, and then used menuconfig to update it to match the kernel changes if any.
Here are the few lines I use
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules cp arch/arm/boot/uImage /media/boot sudo cp .config /media/rootfs/boot/config-3.4.14+ sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules_install INSTALL_MOD_PATH=/media/rootfs sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- firmware_install INSTALL_FW_PATH=/media/rootfs/lib/firmware sudo sync umount /media/rootfs umount /media/boot
Then boot the board and do
rm /boot/*<older_kernel_version>*rm -r /boot/dt-<older_kernel_version>-linaro-omap/
rm -r /lib/modules/<older_kernel_version>-linaro-omap/ depmod -a update-initramfs -c -k `uname -r` mount /dev/mmcblk0p1 /mnt cp /mnt/uInitrd /mnt/uInitrd-bak mkimage -A arm -T ramdisk -C none -n "RAMDISK" -d /boot/initrd.img-`uname -r` /mnt/uInitrd