The Computer Corner Take II (#22) by Bill Kibler

To see more Computer Corner articles look here: CCII page or check out the Home Page .

BeagleBone - the startup report

Some background information

For those who have been following my articles, you know that for some time I have been looking for an embedded system running linux for under $100. I have several projects that need a full linux OS and serial as well as digitial I/O. It might help to review some of my experiences, as they pretty much follow how the industry has changed as well. After the review, we can start on the latest hot small system - the BeagleBone.

I have been doing embedded systems for way too long. I started with assembling code by hand and burning ROMs. The choice of chips was limited back then, and what they could do was not much. Thanks to Moore's Law, chips and systems have gotten more complex and much smaller. With the extra horsepower and plenty of RAM and Flash ROMs, it is now possible to put a whole operating system on a board that fits inside a "Altos" mint tin.

There are plenty of systems out there, but few fall below $100 with everything I wanted. That changed last year with first the anouncement of the RaspberryPI and later with the BeagleBone. The RaspberryPI was built to be used as a learning tool to get more students back into computer science, since enrollment is down in that field. The cost for a network version was set at $35, and their first run of boards sold out within minutes. The design for me just didn't work, as I have no need of fancy video, and really don't like my kernels to have private code in them.

TI is a major player in the cell phone industry and has two divisons, one that focuses on the cell phone business and one that provides chips for the OEM or embedded segment. I believe that all the interest in the RaspberryPI moved them to design and develop a board that could meet the same needs as the PI and hit about the same price point. The design has been fully developed at this point by the BeagleBoard group and turned into a product called BeagleBone. The best part is that major component distributors are selling the system now, for $89 each. I got mine from Mouser in 5 days.

Will this be the end all system - for sure not. Now that it has been shown there is a big interest in small linux systems and products can fly off the shelf even in a down market, expect a flood of such devices over the next few years. I personally think this market segment is just now reaching maturity and as such the price vs feature ratio is for sure increasing to provide many more options at lower cost, but only time will tell.

Some ARM details and the BeagleBone

For those who have read my previous articles on the Atmel NGW100, the Hitachi SimpleNet, Sylvania Netbook, or the Flytouch Tablet (follow the above link to the CCII home page to find those articles), you know I have been playing with linux ARM based systems for some time now. Those new to ARM systems have a big surprise as they learn just how powerful and extensive the options are. The concept goes something like this: design a RISC architecture, license out the design to major chip makers, create some standards for their use, and the market will go crazy. It turns out to be pretty true, but I think the speed of the usage has been a bit slow until more recently as the products have matured.

The biggest problem for new people is the number of different ARM chips available. The Atmel is just the minimum design, while the BeagleBone uses a new CortexA8 running the ARMv7 design with hardware floating point support. I clearly do not have a good understanding of all the ARM options, and for most users what you need to know is just a few points. To run linux normally, a memory management unit is needed, hardware floating point is a nice to have feature, and some amount of accessible I/O to meet your needs. In a simple sense we can see by how the linux sytem is assembled if we have those features or not and if there are negative problems as well.

You can build linux without MMU (Memory Management Units) and thus the build step is a key indicator of where in the slope of designs your system lays. The lower systems use "build root" to create a linux, while the high ends use normal linx kernel builds. For me a big issue is private code in the kernel, and thus I stay away from non-open designs, as in the WM8505s. You can tell the BeagleBone is a "good" design, since several standard and special linux distributions can be run on it.

There are typically three ways that ARM systems are used: fully embedded, where they run a single application; minor linux OS - where build root tools generate a simplified linux OS with just a few applications; and full linux OS - basically a mini-workstation or server setup. My interest is in the full system, as I want to use sql databases, webservers, do SSH logins and transfers, with full access to normal linux tools like perl, cron jobs, shell scripts, and any of the 100K apps available. What make this possible is the ARM standards for these systems, both in programming and process.

The ARM and SD process

When I started with ARM devices, I came across the u-boot tools. These tools are part of the boot up process and for the most part are like a BIOS. The ARM systems typically have three BIOS parts - flash, SD, and OS. The flash BIOS as I call it, is what is run when you hit the reset key or power the device on. The CPU will jump into the flash whenever it is reset and if the system contains a SDRom socket, that flash BIOS will go to it to load the SD BIOS. The BIOS looks for the first partiton on the SD device, and it must be DOS FAT 16, where it will load the SD BIOS - typicaly "u-boot.img". More recent systems load MLO first and will take other than 2GB or less devices. Those first systems I worked on can only load 2GB or smaller devices, as the 4GB and up devices have a different format.

Once we move from the Flash BIOS to the u-boot image, we now have a more extensive set of options that are typically pulled in from a text file (uEnv.txt in our current case) to load the OS and its BIOS or kernel. We can as well load the OS from NSF mount points, USB drives ( my perferred method) or other supported devices. Hitting a key during the start up and typing help will give you a menu of the options - see below for full text of one such screen. Just as there are options to starting the sysem, there are many ways to create that SD device. For the most ARM systems, the general startup method is, to be supplied with two tar files, one for the SD Fat 16 partiton and one for the root file system on the second partiton. The user simply formatted a SD device correctly and un-tarred the files into the proper partition. Insert the SD device in the system and hit reset to go to linux.

The BeagleBone SD setup

It appears that the BeagleBone developement is mostly being driven by people more interested in embedded use than as a linux server. When you get your BeagleBone, it may come with two SDRoms, one a 2GB agnstrom distribution, and one a 4GB TI IDE and support tools device ( my most recent order only came with the agnstrom SDRom). I found both SD systems worked with varying degrees of features and linux tools. For many these two OS's may suit your needs completely and for sure will help you get started with few problems - simply follow the instructions and links. My usage is different and thus I followed a different approach. One note of importance - if using the USB for the console - your workstation is connected to /dev/ttyUSB1 - not USB0, as that is a direct link into the cpu and will cause the cpu to reset when used.

Since I had burned many SD devices to get all the previous ARM systems running, I was a bit surprised that I was only able to find the Arch distribution that supplied my normal method of getting started. Their web site at http://archlinuxarm.org/platforms/armv7/beaglebone and click on the "installation" tab pretty much covers it all. This is the same method I used for netbooks and tablets as well. The main problem is finding images - other than arch, none are to be found - however I will be posting mine.

I started way back when with minix, went to Yggdrasil's 1995 release, followed with Slackware, and now too many distributions to count. Some years back, I switched to Debian for many reasons, the main one being support for all the possible platforms. What I wanted was the abiltiy to switch from system to system with all the same tools and features, even when the architecture was very different. I have at home several levels of i386, amd64, an old apple powerPC, and now several ARM systems. They all run Debian, some testing and some stable - another feature I like - very stable or life on the edge - your option.

Although Arch went as explained, Debian has been mostly a no-show. I have been to all the main web pages, built all the given SD images, built the kernel from scratch, and still not one of them worked. I have my guess as to why but don't really know. What I do know is that as of June 2012, Debian is working toward their version 7 release. That means all the testing or in this case wheezy releases are in major flux. My amd64 just did a few hundred updates as major changes are being done for the new release. I expect over the next few months for this to settle down and good working versions of armhf will be available. "armhf" you say - what is that?

Before the wheezy release, squeeze - the stable release, the only option, was armel, which emulated floating point in software as there was no builtin hardware floating point support. That has all changed - I said the product was maturing - and with the wheezy release you will have the choice of two installations, armel for non-hardware system, and armhf for hardware that support floating point operations. I suspect this might be one factor in why Debian fails, but the working Arch system is armhf. I ran into another problem with wheezy distribution updates, in that the wheezy sites all failed to do updates on both armel and armhf - but worked for squeeze. So again several signs that wheezy is just too volitile at the moment to use their systems or setups.

A working Debian - sort of

I am not one to be put off by a few problems, especially since I am supposed to know something about what I am doing. For any linux system there are really two separate parts - the kernel and the root file system. They are related, but you can actually use parts from different distributions and make things work. I did just that to get a Debian system. I used the working kernel from Arch and a squeeze root file system to produce a working Debian set of images. As long as the init start up is the same, it really is only the tools in the root file system that define the distribution. For me the distribution update and package management tools define the distribution. Please note however that some distributions and especially some of the newer ones, may use very different processes that require tweaks in the kernel to work. For that reason I will not use Red Hat, as many years ago I found them patching the kernel to match their idea of how things should startup - thus their kernel may not be compatible with other systems.

You can do all this yourself, just get the Arch release and go to the RCN site and pickup one of the squeeze root file systems - that is what I did. So here are the steps for those who want to follow along ( these are the same steps, just different images for most arm based systems). We start by downloading images from Arch at http://archlinuxarm.org/platforms/armv7/beaglebone and go to the installation instructions tab. There you click on and download the bootloader tar ball or you can use mine arch_boot.tz . Next we will need the root file system and we get it from here - http://rcn-ee.net/deb/rootfs/squeeze/debian-6.0.4-minimal-armel-2012-05-29.tar.xz . In case that image is gone, try my image squeeze_rootfs.tz". Now this is from the eewiki's page on setting up the BeagleBone with Debian. That site is http://eewiki.net/display/linuxonarm/BeagleBone . I followed the instructions and the results failed to boot properly with both squeeze and wheezy images - your results may vary - so give it try if you want to. Mine failed due to "startpar" - the parallel init tool - just change in /etc/init.d/rc "CONCURRENTCY=makefile" to "CONCURRENCY=none" and you have a serialized init process that may work.

Next step is to put these two images onto a SD rom. I personally like to create images in my working directory structure and then copy those directories to SD devices. Thus, once you have a good working set of directory structures, you can make more than one copy, or edit the images as you learn more about what needs to be done. So let us make the two image directories, which on my system match the path to the device location, or /dev/sdd1 and /dev/sdd2 ( yours might be something like /dev/mmcblk... - I use "cat /proc/partitons" to see what the system knows about the devices). My directories are thus called sdd1 and sdd2 and the root is say "bb" - short for beaglebone. You will need an "arch" directory as well if you don't use my images. So we do these step if we take the original images:


> mkdir -p ~/bb/sdd1 ~/bb/sdd2 ~/bb/arch
> cd ~/bb
> wget -c http://archlinuxarm.org/os/omap/BeagleBone-bootloader.tar.gz
> wget -c http://archlinuxarm.org/os/ArchLinuxARM-am33x-latest.tar.gz
> wget -c http://rcn-ee.net/deb/rootfs/wheezy/debian-wheezy-minimal-armhf-2012-05-29.tar.xz
> tar xvf debian-wheezy-minimal-armhf-2012-05-29.tar.xz
> cd sdd1
> tar xvf ../BeagleBone-bootloader.tar.gz
> cd ../arch
> sudo tar xvf ../ArchLinuxARM-am33x-latest.tar.gz
> cd ../sdd2
> sudo tar xvf ../debian-6.0.4-minimal-armel-2012-05-29/armel-rootfs-201205291511.tar
> sudo cp -rp ../arch/lib/modules/* lib/modules
> sudo vi etc/fstab [ change "auto" for root or / to ext4 ]
> sudo vi etc/inittab [ add "ttyO0" to the last line after the "115200" ]
> sudo vi etc/network/interfaces { un-comment the eth0 lines ]

At this point we have the two stock directories setup for loading on a SD rom. You might like to check them out and see what is there. Also note the use of "sudo" as the file system is owned by root and only super user can edit - so you need to be in the sudoers files or switch to the root user for most of these steps - they can all be done as root and if so skip using the "sudo" in the command lines. You need to edit the "inittab" as the default does not have "ttyO0" for the console, and the auto in "fstab" should have ext4 in it's place. This is all covered in more details in the eewiki page. If you know of other changes to either image, you can do them now.

If you use my images do these steps:


> mkdir -p ~/bb/sdd1 ~/bb/sdd2
> cd ~/bb
> wget -c http://www.kiblerelectronics.com/corner/arch_boot.tz
> wget -c http://www.kiblerelectronics.com/corner/squeeze_rootfs.tz
> cd sdd1 
> tar xvf ../arch_boot.tz
> cd ../sdd2
> sudo tar xvf ../squeeze_rootfs.tz

Due to the size of the FlashBIOS (somewhat small) and it's early beginnings, it can only read FAT 16 file systems from the SD device. As I said earlier, it must be the first partiton, so to setup our SD rom we will need to partiton it and format it for our use. Once the u-boot.img has read and loaded instructions it will load the uImage or kernel and pass it data from the uEnv.txt file. If you watch the setup as it starts booting, you will see the extra instructions being passed to the kernel. It is important to note that the kernel that runs, is the one from the FAT 16 partiton and not from the root file system - which may not have one at all. However - to use the kernel, you need the modules from the Arch kernel and we get those from copying them out of the Arch file system - a step not needed if you use my images.

Here are my steps for formatting a SD device. I use fdisk because I have been using it for many years, and I feel it is pretty simple and does the trick. The FAT 16 size only needs to be about 65MB, while the rest is used for the "ext4" or root file system. A 2GB SD device should do, but 4GB seems to work as well, and will give you more room if needed. I however prefer to use real hard drives using USB hubs and adapters, but you should first get the SD setup working then simply change the "uEnv.txt" file to point at say /dev/sda1 from it's current mmcblk0p2 setting. Small steps first, then big ones once you know things work. A simple reminder that SD devices have special formatting data and thus using "dd" to copy an image may corrupt your device if the image used is from a different manufacturer - that is why we format and copy data and don't use dd!


> cat /proc/partitions [ get device ID - such as /dev/sdd ]
> sudo /sbin/fdisk /dev/sdd
> p   [ prints what is the current setup ]
> d   [ use this to delete any current partitons if they are not usable ]
> n   [ create a new partiton, primary, must be 1st partiton ]
      [ for size use "+65M" to create a 65MB partiton ]
> t   [ set the "tag" to say it is a FAT 16 partiton "0e" ]
> a   [ the set the partition to be bootable ]
> n   [ create our new partion for the rootfs - it will default to correct "tag" ]
      [ just use "default" settings and it will use the remainder of the device ]
> p   [ to see what it will be set to ]
> w   [ to write the partiton table and exit - forcing a re-sync ]
      [ doing "cat /proc/partition" will show the new sizes of un-formatted spaces ]
> sudo /sbin/mkfs.vfat -F 16 -n "bootloader" /dev/sdd1
> sudo /sbin/mkfs.ext4 /dev/sdd2
> sudo mkdir /mnt/sdd1 /mnt/sdd2
> sudo mount /dev/sdd1 /mnt/sdd1
> sudo mount /dev/ssd2 /mnt/sdd2
> df   [ check that all is good and mounted ]
> cd ~/bb/sdd1
> sudo cp -rp ./* /mnt/sdd1
> cd ../sdd2
> sudo cp -rp ./* /mnt/sdd2
> df   [ check that sizes changed ]
> sudo umount /dev/sdd1 /dev/sdd2
       [ note that it may take several minutes for buffers to flush all the data ]
       [ DO NOT remove the SD device before both partitons have been released by the system ]
> df   [ to see that both partitons are done and un-mounted ]
       [ OK now to remove the SD device and test in BeagleBone! ]

At this point insert the micro SD device in the BeagleBone, power on the system, use the USB interface to watch it work and interact with it. My image has the network come up in DHCP mode and as such can be accessed using SSH - root:root or guest as debian:temppwd. If you have a IP address you want it to use, just change the settings in etc/network/interfaces before you copy the image to SD device - the stock image has the eth0 items commented out. I use minicom and point it at /dev/ttyUSB1, however most of the support suggest using "screen", and I have done so using "screen /dev/ttyUSB1 115200" - use cntl a - k to exit. For me screen doesn't default to using buffers and thus I like minicom for cutting and pasting data.

A few important notes: a reminder that /dev/ttyUSB0 is direct into the cpu and should not be used except by the correct IDE interface tools. You might actually be better off to just SSH into the device at your next DHCP address from your router. I prefer that method myself, as capturing of data works great. Please note that there are several important little items mentioned in the SRM or support manual for the BeagleBone that need to be understood - like max USB host current is about 250MA even with external 5V - so only simple or external powered USB devices should be used. Lastly - the combination of Arch and Debian is more for learning than real production - the images will work, but I have noted minor issues with networking that require rebooting if you change anything - something not normal for linux.

Final words and some data

I did this article for two reasons, the first is based on all the failures I had trying to find and get a runing Debian system. I spent several hundred hours trying to make things work and just gave up for now. I expect that to change when Debian 7.0 is released, but I feel for now that users should be able to get a working set of images to use, without all the rebuilds and fancy scripts. A few simple working images from actual BeagleBone systems is all I am asking for.

My other reason for doing this article is related to all the other arm articles I have done. I still get emails and questions, that most often are answered in other articles. So I wanted to do a new article that might help clarify what to do. The arm systems really have not changed much - yes we support 4GB and ext4 now - but besides a few tweaks, all the user steps are pretty much the same. You get images, copy them to partitons, and insert SD Rom into system and boot - done. So hopefully you will read several of the past arm articles to follow my experiences and fill in some of the missing concepts along the way.

I think it might help to explain how I set my system up and then give you the output from the begining or reset. I like using Hard Drives over using exported file systems, both of which are better than swapping SD Roms in and out. The exported file system way - which is covered in a previous arm article - is fine for testing new whole file system that are being cross compiled. You do your work on your workstation, save data to directory, reset the target and test. However, for how I want to work, using a Hard Drive and doing all my work on the target seems easier. It does require a full working system where you can get all the proper packages to do what you want. I think I have that now with the Arch/Debian mix and in fact have been compiling gforth on it after loading the gforth package which is needed to build the newer gforth version from a git repo. Just like working from a regular i386 workstation, except it is Arm.

So what is my setup that you will see being booted? I tried using the Hard Drive, a 2.8in 80GB drive without a powered hub and saw strange errors. I then swtiched to a powered hub and all was fine from then on. I was using Arch for testing, with it all on one partition. As I got closer to trying other options, it became clear that the layout was less than ideal. So I repartitioned the drive with .5GB swap as SDA1 ( over kill for swap, but I have lots of space to play with), SDA2 and SDA3 at 20GB each, the rest for SDA4 - all as primary partitions and the most you can have without going to extents. SDA2 is the Arch filesystem. SDA3 is the mixed Arch/Debian. SDA4 is reserved for Debian armhf 7.0. The only change needed to boot from a different partiton is changing one character in the uEnv.txt file. For more details of the hardware of BeagleBone, go to CCII_23.html which is here and covers more of the steps in using the BeagleBone.

Speaking of data - here is the boot process using my setup:



U-Boot SPL 2011.09-00000-gf63b270-dirty (Nov 20 2011 - 19:58:24)
Texas Instruments Revision detection unimplemented
No AC power, disabling frequency switch
OMAP SD/MMC: 0
reading u-boot.img
reading u-boot.img


U-Boot 2011.09-00009-g4d90fb5 (Jan 27 2012 - 12:14:28)

I2C:   ready
DRAM:  256 MiB
No daughter card present
NAND:  HW ECC Hamming Code selected
nand_get_flash_type: unknown NAND device: Manufacturer ID: 0x10, Chip ID: 0x10
No NAND device found!!!
0 MiB
MMC:   OMAP SD/MMC: 0
*** Warning - readenv() failed, using default environment

Net:   cpsw
Hit any key to stop autoboot:  0 
U-Boot# help
?       - alias for 'help'
base    - print or set address offset
bdinfo  - print Board Info structure
boot    - boot default, i.e., run 'bootcmd'
bootd   - boot default, i.e., run 'bootcmd'
bootm   - boot application image from memory
bootp   - boot image via network using BOOTP/TFTP protocol
cmp     - memory compare
coninfo - print console devices and information
cp      - memory copy
crc32   - checksum calculation
dcache  - enable or disable data cache
dhcp    - boot image via network using DHCP/TFTP protocol
echo    - echo args to console
editenv - edit environment variable
env     - environment handling commands
exit    - exit script
ext2load- load binary file from a Ext2 filesystem
ext2ls  - list files in a directory (default /)
false   - do nothing, unsuccessfully
fatinfo - print information about filesystem
fatload - load binary file from a dos filesystem
fatls   - list files in a directory (default /)
go      - start application at address 'addr'
help    - print command description/usage
i2c     - I2C sub-system
icache  - enable or disable instruction cache
iminfo  - print header information for application image
imxtract- extract a part of a multi-image
itest   - return true/false on integer compare
loadb   - load binary file over serial line (kermit mode)
loads   - load S-Record file over serial line
loady   - load binary file over serial line (ymodem mode)
loop    - infinite loop on address range
md      - memory display
mm      - memory modify (auto-incrementing address)
mmc     - MMC sub system
mmcinfo - display MMC info
mtest   - simple RAM read/write test
mw      - memory write (fill)
nand    - NAND sub-system
nandecc - Switch NAND ECC calculation algorithm b/w hardware and software
nboot   - boot from NAND device
nfs     - boot image via network using NFS protocol
nm      - memory modify (constant address)
ping    - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
reset   - Perform RESET of the CPU
run     - run commands in an environment variable
saveenv - save environment variables to persistent storage
setenv  - set environment variables
sf      - SPI flash sub-system
showvar - print local hushshell variables
sleep   - delay execution for some time
source  - run script from memory
test    - minimal test like /bin/sh
tftpboot- boot image via network using TFTP protocol
true    - do nothing, successfully
version - print monitor, compiler and linker version

U-Boot# boot
SD/MMC found on device 0
reading uEnv.txt

424 bytes read
Loaded environment from uEnv.txt
Importing environment from mmc ...
reading uImage

2914952 bytes read
Booting from mmc ...
## Booting kernel from Legacy Image at 80300000 ...
   Image Name:   Linux-3.2.0
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2914888 Bytes = 2.8 MiB
   Load Address: 80008000
   Entry Point:  80008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
[    0.000000] Linux version 3.2.0 (nobody@titanium) (gcc version 4.6.2 20120120 (prerelease) (GCC) ) #1 Tue Feb 7 03:11:09 UT2
[    0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c53c7d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] Machine: am335xevm
[    0.000000] Memory policy: ECC disabled, Data cache writeback
[    0.000000] AM335X ES1.0 (neon )
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 65024
[    0.000000] Kernel command line: console=ttyO0,115200n8 root=/dev/sda3 rootfstype=ext4 noinitrd rootwait
[    0.000000] PID hash table entries: 1024 (order: 0, 4096 bytes)
[    0.000000] Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
[    0.000000] Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
[    0.000000] Memory: 256MB = 256MB total
[    0.000000] Memory: 253876k/253876k available, 8268k reserved, 0K highmem
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     vmalloc : 0xd0800000 - 0xff000000   ( 744 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xd0000000   ( 256 MB)
[    0.000000]     modules : 0xbf000000 - 0xc0000000   (  16 MB)
[    0.000000]       .text : 0xc0008000 - 0xc0523000   (5228 kB)
[    0.000000]       .init : 0xc0523000 - 0xc055b000   ( 224 kB)
[    0.000000]       .data : 0xc055c000 - 0xc05aa960   ( 315 kB)
[    0.000000]        .bss : 0xc05aa984 - 0xc05d6de4   ( 178 kB)
[    0.000000] NR_IRQS:396
[    0.000000] IRQ: Found an INTC at 0xfa200000 (revision 5.0) with 128 interrupts
[    0.000000] Total of 128 interrupts on 1 active controller
[    0.000000] OMAP clockevent source: GPTIMER1 at 24000000 Hz
[    0.000000] OMAP clocksource: GPTIMER2 at 24000000 Hz
[    0.000000] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 178956ms
[    0.000000] Console: colour dummy device 80x30
[    0.000246] Calibrating delay loop... 498.89 BogoMIPS (lpj=2494464)
[    0.058636] pid_max: default: 32768 minimum: 301
[    0.058799] Security Framework initialized
[    0.058878] Mount-cache hash table entries: 512
[    0.059332] CPU: Testing write buffer coherency: ok
[    0.060251] devtmpfs: initialized
[    0.065270] print_constraints: dummy: 
[    0.065684] NET: Registered protocol family 16
[    0.065808] GPMC revision 6.0
[    0.068468] OMAP GPIO hardware version 0.1
[    0.071841] omap_mux_init: Add partition: #1: core, flags: 0
[    0.072691] _omap_mux_get_by_name: Could not find signal uart1_cts.uart1_cts
[    0.072715] omap_hwmod_mux_init: Could not allocate device mux entry
[    0.073054] _omap_mux_get_by_name: Could not find signal uart2_cts.uart2_cts
[    0.073073] omap_hwmod_mux_init: Could not allocate device mux entry
[    0.073392] _omap_mux_get_by_name: Could not find signal uart3_cts_rctx.uart3_cts_rctx
[    0.073412] omap_hwmod_mux_init: Could not allocate device mux entry
[    0.074714]  omap_i2c.1: alias fck already exists
[    0.075439] failed to create an alias: icss_uart_gclk --> pruss
[    0.075478] failed to create an alias: gfx_fclk --> sgx_ck
[    0.075813]  omap2_mcspi.1: alias fck already exists
[    0.076089]  omap2_mcspi.2: alias fck already exists
[    0.104888] bio: create slab  at 0
[    0.106827] SCSI subsystem initialized
[    0.108870] usbcore: registered new interface driver usbfs
[    0.109282] usbcore: registered new interface driver hub
[    0.109544] usbcore: registered new device driver usb
[    0.109929] registerd cppi-dma Intr @ IRQ 17
[    0.109948] Cppi41 Init Done Qmgr-base(d083a000) dma-base(d0838000)
[    0.109961] Cppi41 Init Done
[    0.109992] musb-ti81xx musb-ti81xx: musb0, board_mode=0x13, plat_mode=0x3
[    0.110359] musb-ti81xx musb-ti81xx: musb1, board_mode=0x13, plat_mode=0x1
[    0.128691] omap_i2c omap_i2c.1: bus 1 rev2.4.0 at 100 kHz
[    0.131500] Advanced Linux Sound Architecture Driver Version 1.0.24.
[    0.132968] Switching to clocksource gp timer
[    0.155789] musb-hdrc: version 6.0, ?dma?, otg (peripheral+host)
[    0.155999] musb-hdrc musb-hdrc.0: dma type: dma-cppi41
[    0.157375] musb-hdrc musb-hdrc.0: USB OTG mode controller at d081e000 using DMA, IRQ 18
[    0.157562] musb-hdrc musb-hdrc.1: dma type: dma-cppi41
[    0.158368] musb-hdrc musb-hdrc.1: MUSB HDRC host driver
[    0.158493] musb-hdrc musb-hdrc.1: new USB bus registered, assigned bus number 1
[    0.158643] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[    0.158663] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    0.158682] usb usb1: Product: MUSB HDRC host driver
[    0.158697] usb usb1: Manufacturer: Linux 3.2.0 musb-hcd
[    0.158711] usb usb1: SerialNumber: musb-hdrc.1
[    0.159739] hub 1-0:1.0: USB hub found
[    0.159776] hub 1-0:1.0: 1 port detected
[    0.160448] musb-hdrc musb-hdrc.1: USB Host mode controller at d0832800 using DMA, IRQ 19
[    0.160970] NET: Registered protocol family 2
[    0.161203] IP route cache hash table entries: 2048 (order: 1, 8192 bytes)
[    0.161589] TCP established hash table entries: 8192 (order: 4, 65536 bytes)
[    0.161811] TCP bind hash table entries: 8192 (order: 3, 32768 bytes)
[    0.161945] TCP: Hash tables configured (established 8192 bind 8192)
[    0.161962] TCP reno registered
[    0.161979] UDP hash table entries: 256 (order: 0, 4096 bytes)
[    0.162011] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[    0.162275] NET: Registered protocol family 1
[    0.162605] RPC: Registered named UNIX socket transport module.
[    0.162623] RPC: Registered udp transport module.
[    0.162636] RPC: Registered tcp transport module.
[    0.162648] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.162921] NetWinder Floating Point Emulator V0.97 (double precision)
[    0.176550] VFS: Disk quotas dquot_6.5.2
[    0.176633] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[    0.177702] msgmni has been set to 495
[    0.178666] io scheduler noop registered
[    0.178684] io scheduler deadline registered
[    0.178765] io scheduler cfq registered (default)
[    0.179752] Could not set LED4 to fully on
[    0.181481] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[    0.183657] omap_uart.0: ttyO0 at MMIO 0x44e09000 (irq = 72) is a OMAP UART0
[    0.779065] console [ttyO0] enabled
[    0.783513] omap_uart.1: ttyO1 at MMIO 0x48022000 (irq = 73) is a OMAP UART1
[    0.791460] omap_uart.2: ttyO2 at MMIO 0x48024000 (irq = 74) is a OMAP UART2
[    0.799437] omap_uart.3: ttyO3 at MMIO 0x481a6000 (irq = 44) is a OMAP UART3
[    0.807382] omap_uart.4: ttyO4 at MMIO 0x481a8000 (irq = 45) is a OMAP UART4
[    0.815325] omap_uart.5: ttyO5 at MMIO 0x481aa000 (irq = 46) is a OMAP UART5
[    0.835822] brd: module loaded
[    0.845614] loop: module loaded
[    0.849018] at24 1-0051: 32768 byte 24c256 EEPROM, writable, 64 bytes/write
[    0.913025] No daughter card found
[    0.916679] at24 1-0050: 32768 byte 24c256 EEPROM, writable, 64 bytes/write
[    0.931937] Board name: A335BONE
[    0.935350] Board version: 00A5
[    0.938651] The board is a AM335x Beaglebone.
[    0.944062]  omap_i2c.3: alias fck already exists
[    0.963107] omap_i2c omap_i2c.3: bus 3 rev2.4.0 at 100 kHz
[    0.970403]  omap_hsmmc.0: alias fck already exists
[    0.976121] _omap_mux_get_by_name: Could not find signal leds-gpio
[    0.983603] at24 3-0054: 32768 byte 24c256 EEPROM, writable, 64 bytes/write
[    1.003082] usb 1-1: new high-speed USB device number 2 using musb-hdrc
[    1.063034] BeagleBone cape EEPROM: could not read eeprom at address 0x54
[    1.070228] at24 3-0055: 32768 byte 24c256 EEPROM, writable, 64 bytes/write
[    1.153061] BeagleBone cape EEPROM: could not read eeprom at address 0x55
[    1.160260] at24 3-0056: 32768 byte 24c256 EEPROM, writable, 64 bytes/write
[    1.168773] usb 1-1: New USB device found, idVendor=05e3, idProduct=0610
[    1.175852] usb 1-1: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[    1.183376] usb 1-1: Product: USB2.0 Hub
[    1.188835] hub 1-1:1.0: USB hub found
[    1.193097] hub 1-1:1.0: 4 ports detected
[    1.243029] BeagleBone cape EEPROM: could not read eeprom at address 0x56
[    1.250237] at24 3-0057: 32768 byte 24c256 EEPROM, writable, 64 bytes/write
[    1.313030] BeagleBone cape EEPROM: could not read eeprom at address 0x57
[    1.320170] BeagleBone cape: exporting ADC pins to sysfs
[    1.328246] mtdoops: mtd device (mtddev=name/number) must be supplied
[    1.335316] omap2-nand driver initializing
[    1.339918] OneNAND driver initializing
[    1.346298] CAN device driver interface
[    1.350337] CAN bus driver for Bosch D_CAN controller 1.0
[    1.403034] davinci_mdio davinci_mdio.0: davinci mdio revision 1.6
[    1.409543] davinci_mdio davinci_mdio.0: detected phy mask fffffffe
[    1.417041] davinci_mdio.0: probed
[    1.420629] davinci_mdio davinci_mdio.0: phy[0]: device 0:00, driver SMSC LAN8710/LAN8720
[    1.429703] usbcore: registered new interface driver cdc_ether
[    1.436074] usbcore: registered new interface driver cdc_subset
[    1.442352] Initializing USB Mass Storage driver...
[    1.447835] usbcore: registered new interface driver usb-storage
[    1.454174] USB Mass Storage support registered.
[    1.459758] mousedev: PS/2 mouse device common for all mice
[    1.466355] dev addr = c057af68
[    1.469660] pdev addr = c057af60
[    1.473827] usb 1-1.1: new high-speed USB device number 3 using musb-hdrc
[    1.481443] omap_rtc omap_rtc: rtc core: registered omap_rtc as rtc0
[    1.488195] omap_rtc: already running
[    1.492344] i2c /dev entries driver
[    1.594406] usb 1-1.1: New USB device found, idVendor=05e3, idProduct=0610
[    1.601648] usb 1-1.1: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[    1.609357] usb 1-1.1: Product: USB2.0 Hub
[    1.615441] OMAP Watchdog Timer Rev 0x01: initial timeout 60 sec
[    1.622540] hub 1-1.1:1.0: USB hub found
[    1.627087] hub 1-1.1:1.0: 4 ports detected
[    1.631523] cpuidle: using governor ladder
[    1.636936] cpuidle: using governor menu
[    1.649103] usbcore: registered new interface driver usbhid
[    1.655022] usbhid: USB HID core driver
[    1.659947] usbcore: registered new interface driver snd-usb-audio
[    1.668575] ALSA device list:
[    1.671699]   No soundcards found.
[    1.675315] oprofile: hardware counters not available
[    1.680624] oprofile: using timer interrupt.
[    1.685162] nf_conntrack version 0.5.0 (3966 buckets, 15864 max)
[    1.692102] ip_tables: (C) 2000-2006 Netfilter Core Team
[    1.697878] TCP cubic registered
[    1.701279] NET: Registered protocol family 17
[    1.705996] can: controller area network core (rev 20090105 abi 8)
[    1.712605] NET: Registered protocol family 29
[    1.717308] can: raw protocol (rev 20090105)
[    1.721797] can: broadcast manager protocol (rev 20090105 t)
[    1.727809] Registering the dns_resolver key type
[    1.732838] VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3
[    1.740937] ThumbEE CPU extension supported.
[    1.745763] mux: Failed to setup hwmod io irq -22
[    1.750771] omap2_set_init_voltage: unable to get clk dpll1_ck
[    1.756923] omap2_set_init_voltage: unable to set vdd_mpu_iva
[    1.762977] omap2_set_init_voltage: unable to get clk l3_ick
[    1.768940] omap2_set_init_voltage: unable to set vdd_core
[    1.774719] Power Management for AM33XX family
[    1.782096] Detected MACID=d4:94:a1:8a:42:ff
[    1.788450] omap_rtc omap_rtc: setting system clock to 2000-01-01 00:01:57 UTC (946684917)
[    1.797660] Waiting for root device /dev/sda3...
[    1.830974] mmc0: host does not support reading read-only switch. assuming write-enable.
[    1.841650] mmc0: new high speed SD card at address b368
[    1.847991] mmcblk0: mmc0:b368 LEXAR 953 MiB 
[    1.854374]  mmcblk0: p1
[    1.963264] usb 1-1.1.2: new high-speed USB device number 4 using musb-hdrc
[    2.064348] usb 1-1.1.2: New USB device found, idVendor=05e3, idProduct=0702
[    2.071766] usb 1-1.1.2: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[    2.079657] usb 1-1.1.2: Product: USB Storage
[    2.085731] usb-storage 1-1.1.2:1.0: Quirks match for vid 05e3 pid 0702: 520
[    2.093273] scsi0 : usb-storage 1-1.1.2:1.0
[    3.094156] scsi 0:0:0:0: Direct-Access     TOSHIBA  MK8009GAH        0014 PQ: 0 ANSI: 0
[    3.108285] sd 0:0:0:0: [sda] 156301488 512-byte logical blocks: (80.0 GB/74.5 GiB)
[    3.117103] sd 0:0:0:0: [sda] Write Protect is off
[    3.122765] sd 0:0:0:0: [sda] No Caching mode page present
[    3.128565] sd 0:0:0:0: [sda] Assuming drive cache: write through
[    3.137677] sd 0:0:0:0: [sda] No Caching mode page present
[    3.143486] sd 0:0:0:0: [sda] Assuming drive cache: write through
[    3.167481]  sda: sda1 sda2 sda3 sda4
[    3.175927] sd 0:0:0:0: [sda] No Caching mode page present
[    3.181713] sd 0:0:0:0: [sda] Assuming drive cache: write through
[    3.188153] sd 0:0:0:0: [sda] Attached SCSI disk
[    3.278601] EXT4-fs (sda3): recovery complete
[    3.283248] EXT4-fs (sda3): mounted filesystem with ordered data mode. Opts: (null)
[    3.291360] VFS: Mounted root (ext4 filesystem) on device 8:3.
[    3.324738] devtmpfs: mounted
[    3.328340] Freeing init memory: 224K
modprobe: FATAL: Could not load /lib/modules/3.2.0/modules.dep: No such file or directory

INIT: version 2.88 booting
Using makefile-style concurrent boot in runlevel S.
Starting the hotplug events dispatcher: udevd[    4.972200] udev[626]: starting version 164
.
Synthesizing the initial hotplug events...done.
Waiting for /dev to be fully populated...done.
Activating swap...[    7.075882] Adding 511996k swap on /dev/sda1.  Priority:-1 extents:1 across:511996k 
done.
[    7.134085] EXT4-fs (sda3): re-mounted. Opts: (null)
Checking root file system...fsck from util-linux-ng 2.17.2
/dev/sda3: clean, 23005/1310720 files, 259734/5242880 blocks
done.
[    7.686722] EXT4-fs (sda3): re-mounted. Opts: errors=remount-ro
Cleaning up ifupdown....
Setting up networking....
Loading kernel modules...done.
Activating lvm and md swap...done.
Checking file systems...fsck from util-linux-ng 2.17.2
done.
Mounting local filesystems...done.
Activating swapfile swap...done.
Cleaning up temporary files....
Configuring network interfaces...done.
Cleaning up temporary files....
Setting kernel variables ...done.
[    9.990944] 
[    9.990956] CPSW phy found : id is : 0x7c0f1
[    9.997902] PHY 0:01 not found
INIT: Entering runlevel: 2
Using makefile-style concurrent boot in runlevel 2.
modprobe: FATAL: Could not load /lib/modules/3.2.0/modules.dep: No such file or directory

Starting enhanced syslogd: rsyslogd.
Starting web server: apache2apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 foe
.
Starting periodic command scheduler: cron.
Starting system message bus: dbus.
Loading cpufreq kernel modules...[   12.983716] PHY: 0:00 - Link is Up - 100/Full
done (none).
CPUFreq Utilities: Setting ondemand CPUFreq governor...disabled, governor not available...done.
Starting OpenBSD Secure Shell server: sshd[   13.851833] sshd (1180): /proc/1180/oom_adj is deprecated, please use /proc/1180/.
.

Debian GNU/Linux 6.0 devel ttyO0

devel login: root
Password: 
Last login: Tue Jun 12 23:04:34 CDT 2012 on ttyO0
Linux devel 3.2.0 #1 Tue Feb 7 03:11:09 UTC 2012 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

root@devel:~# cat /boot/uboot/uEnv.txt
bootfile=uImage
address_uimage=0x80300000

console=ttyO0,115200n8

defaultdisplay=
dvimode=

mmcroot=/dev/sda3
mmcrootfstype=ext4 noinitrd rootwait 

rcn_mmcloaduimage=fatload mmc 0:1 ${address_uimage} ${bootfile}

mmc_args=run bootargs_defaults;setenv bootargs ${bootargs} root=${mmcroot} rootfstype=${mmcrootfstype}

mmc_load_uimage=run rcn_mmcloaduimage;  echo Booting from mmc ...; run mmc_args; bootm ${address_uimage}

root@devel:~# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda3             20907056    974580  18883900   5% /
tmpfs                   127048         0    127048   0% /lib/init/rw
udev                     10240       152     10088   2% /dev
tmpfs                   127048         0    127048   0% /dev/shm
/dev/mmcblk0p1           65390      3116     62274   5% /boot/uboot

root@devel:~# cat /proc/partitions
major minor  #blocks  name

 179        0     975872 mmcblk0
 179        1      65536 mmcblk0p1
   8        0   78150744 sda
   8        1     512000 sda1
   8        2   20971520 sda2
   8        3   20971520 sda3
   8        4   35694680 sda4

root@devel:~# cat /etc/fstab
proc /proc proc defaults 0 0
/dev/sda3        /           ext4   errors=remount-ro   0   1
/dev/mmcblk0p1   /boot/uboot auto   defaults            0   0
/dev/sda1        none        swap   sw                  0   0

root@devel:~# cat /etc/network/interfaces
auto lo
iface lo inet loopback

# The primary network interface
#auto eth0
#iface eth0 inet dhcp
# Example to keep MAC address between reboots
#hwaddress ether DE:AD:BE:EF:CA:FE
allow-hotplug eth0
iface eth0 inet static
  address 192.168.101.130
  netmask 255.255.255.0
  gateway 192.168.101.1
  network 192.168.101.0

# WiFi Example
#auto wlan0
#iface wlan0 inet dhcp
#    wpa-ssid "essid"
#    wpa-psk  "password"

root@devel:~# tail -6 /etc/inittab

# Example how to put a getty on a modem line.
#
#T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3

S:2345:respawn:/sbin/getty 115200 ttyO0

root@devel:~# cat /proc/cpuinfo
Processor       : ARMv7 Processor rev 2 (v7l)
BogoMIPS        : 498.89
Features        : swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls 
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x3
CPU part        : 0xc08
CPU revision    : 2

Hardware        : am335xevm
Revision        : 0000
Serial          : 0000000000000000

root@devel:~# cat /proc/meminfo
MemTotal:         254100 kB
MemFree:          224336 kB
Buffers:            3096 kB
Cached:            13648 kB
SwapCached:            0 kB
Active:            11396 kB
Inactive:          11032 kB
Active(anon):       5696 kB
Inactive(anon):      372 kB
Active(file):       5700 kB
Inactive(file):    10660 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:        511996 kB
SwapFree:         511996 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:          5696 kB
Mapped:             3760 kB
Shmem:               388 kB
Slab:               4436 kB
SReclaimable:       1512 kB
SUnreclaim:         2924 kB
KernelStack:         880 kB
PageTables:          568 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      639044 kB
Committed_AS:     489920 kB
VmallocTotal:     761856 kB
VmallocUsed:        9052 kB
VmallocChunk:     674896 kB

root@devel:~#  

Links

my image of arch_boot.tz
my image of squeeze_rootfs.tz
CircuitCo Main Page for access to SRM's
http://archlinuxarm.org/platforms/armv7/beaglebone
http://eewiki.net/display/linuxonarm/BeagleBone
http://elinux.org/BeagleBoardDebian
http://processors.wiki.ti.com/index.php/AM335x-PSP_04.06.00.02_Release_Notes
debian-administration - good site for help articles.


Kibler Electronics, PO Box 535, Lincoln, CA 95648-0535, USA.
Email: bill@kiblerelectronics.com
Copyright © 2012, Kibler Electronics