My perpetual goal for PSAS is to get a new (2.6.31) Linux kernel
installed on it, with dave and kay's userspace code to talk to an
lpcusb board through usbfs.  I continue to try to follow the
directions you posted a year and a half ago, but I continue to get
lost, so bare with me. :)

Can you please look over the following email and return it with
unnecessary steps removed.  I think I remember that I don't need the
flattened device tree, but I'm not sure.

In the meantime, I have completed the following steps on this page:

I'm attempting to build the denx tree, but this command
  make CROSS_COMPILE=powerpc-linux-gnu- ARCH=powerpc tqm5200_defconfig
gives this error:
  Can't find default configuration "arch/powerpc/configs/tqm5200_defconfig"!

What step did I miss?


On Wed, Jan 16, 2008 at 3:34 PM, Josh Triplett <> wrote:
> [Sending this to psas-all as a status update.]
> After I stopped working on the flight computer on Wednesday
> (2008-01-09), I did some research and I discovered the primary issues
> which previously prevented the flight computer from booting Linux 2.6.
> I worked on the flight computer for a few hours on Sunday
> (2007-01-16), and managed to achieve some good results.  The flight
> computer can now:
> * Boot Linux 2.6.
> * Use an initramfs as its root filesystem.
> * Use a busybox initramfs I created, and provide a shell on a serial
>  port.
> * Boot all of the above out of 5MB of the 32MB onboard flash (not the
>  Compact Flash), with nothing attached other than power and serial
>  console.
> * Access the onboard flash partitions via the MTD driver.
> * Access USB devices from Linux.
> * Access the Compact Flash card from Linux.
> Short version of the process (mostly of interest to the software and
> avionics teams):
> * Newer 2.6 kernels on embedded systems like our TQM5200 (with STK5200
>  carrier board in this case) require a "flattened device tree" (fdt),
>  AKA "device tree blob" (dtb), compiled from the device tree source
>  (dts) in the Denx kernel source.  `apt-get install
>  device-tree-compiler` for the compiler.  Then, build `tqm5200.dtb`
>  from `tqm5200.dts`, with the command `dtc
>  ./arch/powerpc/boot/dts/tqm5200.dts -R 4 -S 0x3000 -O dtb -o
>  /tmp/tqm5200.dtb`.  `-R 4` reserves 4 slots for additional maps; an
>  initramfs needs one, and the u-boot documentation I found recommends
>  reserving 4.  `-S 0x3000` reserves some extra space for u-boot to
>  extend the map at boot time.
> * Booting kernels with an fdt requires a newer u-boot.  Build and
>  install u-boot from the u-boot Git repository; commit
>  6d714f82fb4b8bb7e267e9c71b8009bc670bfe88 worked for me.  `make
>  CROSS_COMPILE=powerpc-linux-gnu- TQM5200_config`, then `make`.
>  Install mkimage (found in `tools/mkimage`) on the `$PATH`, to build
>  kernel and initramfs images later.
> * Flash the new `u-boot.bin` to the board using the existing copy of
>  u-boot.  I used the `tftp` command to transfer `u-boot.bin` from my
>  tftp server to the flight computer's memory, then flashed it to the
>  firmware partition in the flash address space.  (The existing u-boot
>  included an `update` command to automate flashing the new u-boot.bin
>  from a given address, so I just used `run update`, but flashing
>  manually would involve the `unprotect`, `erase`, `cp.b`, and
>  `protect` commands.)  The new u-boot worked on the first try,
>  fortunate since I would not get a second without a working JTAG or a
>  wait for shipping.
> * Build a 2.6 kernel from the DENX `linux-2.6-denx` tree, using `make
>  CROSS_COMPILE=powerpc-linux-gnu- ARCH=powerpc tqm5200_defconfig`
>  then `make CROSS_COMPILE=powerpc-linux-gnu- ARCH=powerpc uImage`.
>  This used `mkimage`, and created `arch/powerpc/boot/uImage`.
> * With the new u-boot, tftp the kernel and dtb to the flight
>  computer's memory (I suggest using the `${kernel_addr_r}` and
>  `${fdt_addr_r}` variables for the addresses.)  Then boot with `bootm
>  ${kernel_addr_r} - ${fdt_addr_r}`.  This should boot the 2.6 kernel
>  and get as far as failing to mount a root filesystem.
> * You can at this point test booting with a root filesystem from
>  compact flash or NFS, if you want.
> * TFTP the kernel and dtb again, and flash them to the appropriate
>  partitions in the onboard flash, designated by the `${kernel_addr}`
>  and `${fdt_addr}` variables.  u-boot does not protect these
>  partitions, so you just need to use "erase" and "cp.b".  Reboot, and
>  try bootm again with the addresses from flash; this should again
>  boot as far as trying to find a root filesystem.
> * Grab a copy of the latest busybox release.  Build it with `make
>  CROSS_COMPILE=powerpc-linux-gnu- ARCH=powerpc defconfig`, then
>  optionally configure differently with `make
>  CROSS_COMPILE=powerpc-linux-gnu- ARCH=powerpc menuconfig` (or an
>  alternative config target if you prefer), then build with `make
>  CROSS_COMPILE=powerpc-linux-gnu- ARCH=powerpc`.  Run `make
>  CROSS_COMPILE=powerpc-linux-gnu- ARCH=powerpc install` to install
>  busybox and its symlinks to _install in the busybox source
>  directory.
> * Make a directory for building the initramfs.  `cp -a
>  /path/to/busybox/_install/* initramfs/`.  Make a dev directory in
>  `initramfs/`, and create device files for at least `null`,
>  `console`, and `ttyPSC0`.  In the initramfs directory, run `find . |
>  cpio -o -H newc | gzip > ../initramfs_data.cpio.gz`.  Now, turn that
>  into a u-boot image with `mkimage -A ppc -T ramdisk -C gzip -n
>  'Busybox initramfs' -d ../initramfs_data.cpio.gz ../uRamdisk`.
> * In u-boot, tftp `uRamdisk` to the flight computer's memory.  `setenv
>  bootargs rdinit=/bin/sh`, and booth with `bootm ${kernel_addr}
>  address_of_uRamdisk ${fdt_addr}`.  This should bring up the busybox
>  shell.
> * Create `/etc/inittab` in the initramfs directory, with the single
>  line `ttyPSC0::askfirst:/bin/sh`.  Re-create the initramfs and the
>  `uRamdisk`.  tftp `uRamdisk` to the flight computer's memory,
>  `setenv bootargs rdinit=/sbin/init`, and boot with `bootm` again.
>  The flight computer should boot to busybox init, which starts a
>  shell when you press enter.
> * Finally, in u-boot, tftp the uRamdisk again and flash it to the
>  appropriate partition in the onboard flash.  Test booting this with
>  `bootm`.  Create a new boot macro with `setenv flash_initramfs
>  "setenv bootargs rdinit=/sbin/init ; bootm ${kernel_addr}
>  ${ramdisk_addr} ${fdt_addr}"` and set the flight computer to boot
>  this by default with `setenv bootcmd "run flash_initramfs"`.
> * The flight computer will now boot unattended into the Linux 2.6
>  kernel and busybox init, and interact over the serial console on
>  PSC0.
> This documentation will go up on the wiki shortly.  Since we have
> version control for the wiki, any objections to simply removing
> obsolete documentation, such as the notes on the PP01 (MENMON) flight
> computer, or purchasing info for the 586-based flight computer?
> - Josh Triplett
> _______________________________________________
> psas-all mailing list
> This list's membership is automatically generated from the memberships of the 
> psas-airframe, psas-avionics, psas-general, psas-payload, psas-propulsion, 
> and psas-software mail lists. Visit to individually 
> subscribe/unsubscribe yourself from these lists.

psas-avionics mailing list

Reply via email to