This is a page about TI's BeagleBoard and BeagleBoard xM.
Availability:
BeagleBoard Cx at Digi-Key
BeagleBoard xM at Digi-Key
CircuitCo 7inch LCD at Digi-Key
Basic Requirements
- ARM Cross Compiler
- Ubuntu (10.10 (Maverick Meerkat) mininum): sudo apt-get install gcc-arm-linux-gnueabi
- Linaro: https://launchpad.net/linaro-toolchain-binaries
- Bootloader
- Das U-Boot – the Universal Boot Loader http://www.denx.de/wiki/U-Boot
- Source – http://git.denx.de/?p=u-boot.git;a=summary
- Linux Kernel
- Linus's Mainline tree: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=summary
- Linux omap tree: http://git.kernel.org/?p=linux/kernel/git/tmlind/linux-omap.git
- ARM based rootfs
- Debian Squeeze: http://www.debian.org/
Bootloader
Das U-Boot – the Universal Boot Loader http://www.denx.de/wiki/U-Boot
- Note: Ubuntu Oneiric (11.10): "arm-linux-gnueabi-gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1" is currently broken to build this.
U-Boot Download:
Download U-Boot Tarball:
wget ftp://ftp.denx.de/pub/u-boot/u-boot-2012.07.tar.bz2 tar xjf u-boot-2012.07.tar.bz2 cd u-boot-2012.07/
Or via git:
Download U-Boot via git:
git clone git://git.denx.de/u-boot.git cd u-boot/ git checkout v2012.07 -b tmp
U-Boot Patches:
wget https://raw.github.com/RobertCNelson/Bootloader-Builder/master/patches/v2012.07/0001-enable-bootz-support-for-ti-omap-targets.patch wget https://raw.github.com/RobertCNelson/Bootloader-Builder/master/patches/v2012.07/0001-beagle-fix-dvi-variable-set-higher-resolution.patch wget https://raw.github.com/RobertCNelson/Bootloader-Builder/master/patches/v2012.07/0001-beagle-ulcd-passthru-support.patch wget https://raw.github.com/RobertCNelson/Bootloader-Builder/master/patches/v2012.07/0002-beagle-add-kmsmode-for-ulcd-and-default-dtb_file.patch patch -p1 < 0001-enable-bootz-support-for-ti-omap-targets.patch patch -p1 < 0001-beagle-fix-dvi-variable-set-higher-resolution.patch patch -p1 < 0001-beagle-ulcd-passthru-support.patch patch -p1 < 0002-beagle-add-kmsmode-for-ulcd-and-default-dtb_file.patch
U-Boot Configure and Build:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- omap3_beagle_config make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
Linux Kernel
Linux Build Script:
git clone git://github.com/RobertCNelson/stable-kernel.git cd stable-kernel/
For Mainline v3.5.x
git checkout origin/v3.5.x -b v3.5.x
Run Build Script:
./build_kernel.sh
The kernel zImage and modules will be under the deploy directory.
Debian Squeeze 6.0.5 (armel based) Root File System
Default User: debian
Password: temppwd
Root User: root
Root Password: root
wget -c http://rcn-ee.net/deb/rootfs/squeeze/debian-6.0.4-minimal-armel-2012-05-29.tar.xz
verify the image with:
md5sum debian-6.0.4-minimal-armel-2012-05-29.tar.xz 1b866cc9639ab2afc6df0e1827de09fe debian-6.0.4-minimal-armel-2012-05-29.tar.xz
Extract Image:
tar xJf debian-6.0.4-minimal-armel-2012-05-29.tar.xz
Debian Wheezy (snapshot) (armhf based) Root File System
Default User: debian
Password: temppwd
Root User: root
Root Password: root
wget -c http://rcn-ee.net/deb/rootfs/wheezy/debian-wheezy-minimal-armhf-2012-05-29.tar.xz
verify the image with:
md5sum debian-wheezy-minimal-armhf-2012-05-29.tar.xz afe04e3b54706b67099d54f3337cb347 debian-wheezy-minimal-armhf-2012-05-29.tar.xz
Extract Image:
tar xJf debian-wheezy-minimal-armhf-2012-05-29.tar.xz
Setup microSD card
For these instruction, we are assuming: DISK=/dev/mmcblk0, "sudo fdisk -l" is useful for determining the device id..
export DISK=/dev/mmcblk0
Erase microSD card:
sudo parted --script ${DISK} mklabel msdos
Setup Boot Partition:
sudo fdisk ${DISK} << __EOF__ n p 1 +64M t e p w __EOF__
Set Boot Flag
sudo parted --script ${DISK} set 1 boot on
Format as fat
DISK=/dev/mmcblk0 sudo mkfs.vfat -F 16 ${DISK}p1 -n boot (or) DISK=/dev/sdb sudo mkfs.vfat -F 16 ${DISK}1 -n boot
Create Partition Layout:
rootfs: ext3/4, rest of microSD card.
Mount the boot/rootfs partitions
Copy Boot Files:
Copy MLO to the boot partition
sudo cp -v ./u-boot/MLO /media/boot/
Copy u-boot.img to the boot partition
sudo cp -v ./u-boot/u-boot.img /media/boot/
Create U-Boot "uEnv.txt" boot script: (nano uEnv.txt)
console=ttyO2,115200n8 #These are now set by default: uncomment/change if you need something else #defaultdisplay=dvi #dvimode=1280x720MR-16@60 mmcroot=/dev/mmcblk0p2 ro mmcrootfstype=ext4 rootwait fixrtc optargs=console=tty0 mmc_load_image=fatload mmc 0:1 0x80300000 zImage mmc_load_initrd=fatload mmc 0:1 0x81600000 initrd.img; setenv initrd_size ${filesize} deviceargs=setenv device_args buddy=${buddy} buddy2=${buddy2} mmcargs=setenv bootargs console=${console} ${optargs} vram=${vram} omapfb.mode=${defaultdisplay}:${dvimode} omapdss.def_disp=${defaultdisplay} root=${mmcroot} rootfstype=${mmcrootfstype} ${device_args} #Just: zImage xyz_mmcboot=run mmc_load_image; echo Booting from mmc ... loaduimage=run xyz_mmcboot; run deviceargs; run mmcargs; bootz 0x80300000 #zImage and initrd #xyz_mmcboot=run mmc_load_image; run mmc_load_initrd; echo Booting from mmc ... #loaduimage=run xyz_mmcboot; run deviceargs; run mmcargs; bootz 0x80300000 0x81600000:${initrd_size}
Copy uEnv.txt to the boot partition
sudo cp -v ./uEnv.txt /media/boot/
Note: This repo tree is under active development, so the Kernel version can change on a daily basis...
Copy Kernel zImage:
sudo cp -v ./stable-kernel/deploy/3.2.24-x14.zImage /media/boot/zImage
Copy Root File System:
sudo tar xfvp ./debian-*-minimal-arm*-*/armel-rootfs-*.tar -C /media/rootfs/
Copy Kernel modules:
sudo tar xfv ./stable-kernel/deploy/3.2.24-x14-modules.tar.gz -C /media/rootfs/
Tweak "/etc/fstab", the defaults should work for most boards:
sudo nano /media/rootfs/etc/fstab /dev/mmcblk0p2 / auto errors=remount-ro 0 1 /dev/mmcblk0p1 /boot/uboot auto defaults 0 0
Add Serial Login:
sudo nano /media/rootfs/etc/inittab
edit last line:
from: S:2345:respawn:/sbin/getty 115200 to: T2:23:respawn:/sbin/getty -L ttyO2 115200 vt102
Remove microSD card:
sync sudo umount /media/boot sudo umount /media/rootfs
FAQ
No Ethernet:
- Check Power (aka use 5Volt DC Plug): The USB bus allows up to 100mA on initial connection and up to a max of 500mA can be requested by the end USB device. On the xM this is not enough to power the whole device and on the xM C there is an actual hardware switch to disable the smsc95xx usb hub/ethernet when powered by OTG (to prevent out of power crashes seen on the xM A/B with when users powered by OTG).
- Check Ethernet Cable/Plug: Is the Ethernet Cable actually plugged into the Beagle and Router?
- Check Modules: The smsc95xx kernel driver is usually built as an external module, double check that your kernel modules for this device are installed.
debian@devel:~$ find /lib/modules/`uname -r`/kernel/ | grep smsc95xx /lib/modules/3.2.26-x14/kernel/drivers/net/usb/smsc95xx.ko
debian@devel:~$ lsmod | grep smsc95xx smsc95xx 11302 0
- Reload smsc95xx kernel module (Checked all the above and the LAN LED's are still off)
sudo rmmod smsc95xx sudo modprobe smsc95xx sudo /etc/init.d/networking restart