Gentoo on SABRE Lite
I recently received several SABRE Lite BD-SL-i.MX6 boards for running ARM benchmarks on DataMill. To install Gentoo on it, you need a USB-to-serial cable converter. It came with a 4GB SD card, which is large enough to get you started.
Overview of the installation:
- Reset board and format SD card (optional)
- Compile kernel with btrfs support (optional)
- Copy boot script and kernel
- Extract stage3 and portage snapshot
- Configure the install
- Backup and clone (optional)
Reset board and format SD card
When I first tried to boot images extracted to the SD card on the board, it always got stuck at the U-Boot prompt. It turned out that there were environment variables left over from previous uses for these boards. Here is the way to reset board variables:
U-Boot > reset
After I managed to boot Linux images on it, I went onto formatting the card for a Gentoo install. I used sfdisk so that formatting can be scripted with a file which I saved as mmc_partitions:
unit: sectors
/dev/sdd1 : start= 2048, size= 102400, Id=83
/dev/sdd2 : start= 104448, size= 7669760, Id=83
/dev/sdd3 : start= 0, size= 0, Id= 0
/dev/sdd4 : start= 0, size= 0, Id= 0
I formatted the second partition as btrfs so that compression could be used on the small SD card. You may want to format it as ext3 to save time. If you have problems getting it to boot, check to make sure your btrfs-progs are not newer than the btrfs version the kernel is built to support. sys-fs/btrfs-progs-0.20_rc1 worked for the January 2014 kernel source.
# mkfs.btrfs -f /dev/sdd2 && mkfs.ext2 /dev/sdd1
Compile kernel with btrfs support
The git tree for the kernel is available at https://github.com/boundarydevices/linux-imx6/. There are two main branches, one for Android and one for non-Android. Use the most recent one for non-Android.
# unzip boundary-imx_3.0.35_4.1.0.zip
# cd linux-imx6-boundary-imx_3.0.35_4.0.0
# make ARCH=arm imx6_defconfig
# vim .config
Make the following changes to the kernel config:
CONFIG_BTRFS_FS=y
CONFIG_CRYPTO_CRC32C=y
CONFIG_LIBCRC32C=y
Gentoo requires a devtmpfs filesystem to mount at /dev while selecting btrfs also selects LIBCRC32C. The CRC32c CRC algorithm is used by btrfs for checksums.
Now cross compile the kernel
Copy boot script and kernel
Download 6x_bootscript-20121110 available from a blog post and rename it 6x_bootscript. Get the kernel from one of the i.MX6 builds if you decided to skip building it.
# cp 6x_bootscript /mnt/p1/boot
# cp uImage /mnt/p1/boot
uImage is located in /usr/src/linux/arch/arm/boot if you compiled the kernel.
Extract stage3 and portage snapshot
Download the latest stage3 tarball and extract it
If you get errors trying to run emerge --sync, it is because downloading the portage tree is not optional unlike other guides indicate. Simply download it from your nearest mirror and extract it
Configure the install
If you compiled the kernel with btrfs, edit /mnt/p1/etc/fstab file so that zlib compression is enabled
/dev/mmcblk0p2 / btrfs noatime,compress=zlib
0 1
Set kernel boot argument in /mnt/p1/etc/inittab. Change the console= argument to ttymxc1. eg "$bootargs console=ttymxc1,115200 vmalloc=400M consoleblank=0 rootwait"
The rest of the process is the same as for other ARM boards, such as the Trimslice. The guide for it is available at http://dev.gentoo.org/~armin76/arm/trimslice/install.xml.
Backup and clone
First make the backup in a folder
tar -cvpzf backup.tar.gz /mnt/p1/
After unmounting the SD card and testing it on the device, put in a new one and clone it with the following commands
mkfs.btrfs -f /dev/sdd2 && mkfs.ext2 -FF /dev/sdd1
mount -o compress=zlib /dev/sdd2 /mnt/p1 && mkdir /mnt/p1/boot && mount /dev/sdd1 /mnt/p1/boot
tar xzpf backup.tar.gz -C /mnt/p1
vim /mnt/p1/etc/conf.d/hostname
umount /mnt/p1/boot && umount /mnt/p1
The Funtoo ARM Guide has up to date sections on setting the root password and using swclock. If you decide to use swclock, update the last shutdown time to set the clock with touch /tmp/mnt/p1/lib/rc/cache/shutdowntime after extracting the tarball.