Linux kernel start up and debugging

Slightly off-topic, but linux is stil a unixoid operating system. And every hint on system startup and debugging is valuable.

Seems like running OpenOCD and Turtelizer2 JTAG dongle with NanosG20 will be necesssary. AT91SAM9G20 support should be available, I hope.

Other points are:

  • Use QEMU/VirtualBox + GDB to observe startup behaviour of FreeBSD
  • Remember, nobody forbids looking at certain portions of Linux/NetBSD/OpenBSD kernel sources
  • OpenBSD and NetBSD are also a source of knowledge
  • Take a look at Atmel startup code
  • Make a table of prio 1 peripherials used by the kernel
  • Prioritize other peripherials

So, in summary I will use NanosG20 hardware, U-boot for PortuxG20 and FreeBSD kernel (no idea what is implemented at the moment)

NanosG20 FreeBSD

I would be glad to see FreeBSD running on NanosG20. Since I have no idea how to do that, I need  to investigate. One way would be finding a posibility to run u-boot for AT91SAM9G20 out of the NanosG20 2nd Stage Bootloader (stripped linux kernel). But another solution does exist:

It is a transplantation of PortuxG20 u-boot into NanosG20.

If this will work, next step would be flashing AT91SAM9G20 u-boot with FreeBSD booting support. And last but not least a working AT91SAM9G20 kernel must be available.

Another help:

Similar processor:

Comparison of linux and bsd kernel startup sequence:

BSD kernel structure:


I am stuck with modifying kernel and building console-image. It does work only once after removing  all tmp’s and deploy”s  since afterwards console-image recipe uses wrong outdated shared cache files. Manually configuring kernel via menuconfig and subsequent deploy via bitbake -c deploy virtual/kernel is always succesful.


The undocumented tasks of OE-core bitbake :

  • cleanall
  • cleansstate

They appear to solve my problems. Clean is not sufficient.


Migrating Ångström framework (Bitbake/Poky/OpenEmbedded issues)

Last week I had to use my wife’s powerful laptop. Since downloaded sources take approx. 13 GB, starting from scratch would be not especially efficient. So I had to copy the stuff and met some problems. Of course, it was up to absolute paths contained in configuration files and created temporary data. Following points are important:

  • delete old .oe directory from your home directory if there was one before
  • change saved_tempdir file in ../angstrom/setup-scripts/build/tmp-angstrom_2010_x-eglibc as there is a absolute path to the original temporary directory in it (do simple `pwd` > saved_tempdir)
  • delete content of ../angstrom/setup-scripts/build/tmp-angstrom_2010_x-eglibc, leave only saved_tempdir file in it
  • delete site.conf and sanity-info files contained in ../angstrom/setup-scripts/conf, they are being created while running MACHINE=beagleboard ./ config beagleboard
  • sometimes, but do not ask why, sanity.conf contained in ../angstrom/setup-scripts/sources/openembedded-core/meta/conf must be touched. Rules for this behavior remain unknown.

This instruction sounds to be simple and short, but discovering it took quite a while. I hope it will help you !


Another bad thing found is u-boot recipe error, deployment is done only once, after building for first time. The only method to do it again is running following commands with –force option:

bitbake -f -c clean u-boot

and consecutive

bitbake -f -c deploy u-boot

Only this combo works! bitbake u-boot doesn’t – copying from staging area fails, although logfile comment remarks an attempt to do that!