Building for BeagleBone

= Arm Compiler =

Setting up cross-compile environment is the first and necessary step.

Distro provided
The easier way is install the default compiler provided by your distribution.

Ubuntu : gcc-arm-linux-gnueabi

Arch Linux : arm-linux-gnueabi-gcc

Debian : ??

Fedora : ??

Linux Mint : ??


 * Tip: Do a alias in your environment, where N is the number of processors cores plus one:

crosstool-NG
crosstool-NG aims at building toolchains. So, by this way you will build your own cross-compiler, but this requires that you choose an operation system and LibC. Therefore we will build a cross-compiler for Linux/gLibc.

= U-Boot =

Mainline U-boot
You can use the mainline u-boot for beaglebone.

Get: Clean: Configure for BeagleBone: Build:

Test your new U-Boot
You need a microSd card with 2Gb or more. In order to make U-Boot work you will need to create the first partion as FAT32 LBA, bootable, with something like 64 Megabytes. This command wipes everything from your sdcard and creates that partition.

This comand should print something like:

Disk /dev/sdb: 7948 MB, 7948206080 bytes 16 heads, 4 sectors/track, 242560 cylinders, total 15523840 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1c524301 Device Boot     Start         End      Blocks   Id  System /dev/sdb1  *        2048      133119       65536    c  W95 FAT32 (LBA) The U-Boot compilation generated two files, MLO and uboot.img. Mount the partition that you just created and copy FIRST the MLO file to partition. Then copy the u-boot.img.

Now with that sdcard in BeagleBone the output from serial should be:

U-Boot SPL 2014.07-rc4-00264-g23f23f2-dirty (Jul 05 2014 - 21:56:58) reading u-boot.img reading u-boot.img

U-Boot 2014.07-rc4-00264-g23f23f2-dirty (Jul 05 2014 - 21:56:58)

I2C:  ready DRAM: 512 MiB NAND: 0 MiB MMC:  OMAP SD/MMC: 0, OMAP SD/MMC: 1
 * Warning - readenv failed, using default environment

Net:  not set. Validating first E-fuse MAC cpsw, usb_ether Hit any key to stop autoboot: 0 switch to partitions #0, OK mmc0 is current device SD/MMC found on device 0 reading uEnv.txt switch to partitions #0, OK mmc1(part 0) is current device SD/MMC found on device 1 reading uEnv.txt 26 bytes read in 3 ms (7.8 KiB/s) Loaded environment from uEnv.txt Importing environment from mmc ... Booting from nand ...
 * Unable to read file uEnv.txt **
 * Invalid partition 2 **
 * File not found /boot/zImage **

no devices available

no devices available Bad Linux ARM zImage magic! U-Boot#

There are two problems in this output. First, you don't have a uEnv.txt, which configure the U-Boot and secondly you don't have a linux image.

= Kernel =

Mainline Kernel
You can use the mainline linux for beaglebone.

Get: Clean: Configure for BeagleBone: Check if two remaining configs are set: │ Symbol: MFD_TPS65217 [=n] │ Type : tristate │ Prompt: TI TPS65217 Power Management / White LED chips │  Location: │    -> Device Drivers │ (1)  -> Multifunction device drivers │  Defined at drivers/mfd/Kconfig:877 │  Depends on: HAS_IOMEM [=y] && I2C [=y] │  Selects: MFD_CORE [=y] && REGMAP_I2C [=y]

│ Symbol: REGULATOR_TPS65217 [=n] │ Type : tristate │ Prompt: TI TPS65217 Power regulators │  Location: │    -> Device Drivers │ (1)  -> Voltage and Current Regulator Support (REGULATOR [=y]) │  Defined at drivers/regulator/Kconfig:554 │  Depends on: REGULATOR [=y] && MFD_TPS65217 [=y] Build:

After build, there are two important files. Linux kernel at arch/arm/boot/zImage and Device Tree Blob arch/arm/boot/dts/am335x-boneblack.dtb or arch/arm/boot/dts/am335x-bone.dtb (for white). So copy that to memory card.

Test your new Kernel
TODO