WARNING: Support for Amlogic is old and never really evolved since the commit, using this platform isn't advised
John Wehle did incredible amount of work to make FreeBSD run on Amlogic SoC based boards such as Odroid-C1 and Visson ATV-102.
Currently FreeBSD successfully boots to the login prompt on an aml8726-m6 board (the box seems to be some type of Visson ATV-102) as well as on an aml8726-m8b board (a Hardkernel ODROID-C1) using a SD card and a serial console.
The following are supported:
- Basic machdep code
- SMP
- Interrupt controller
- Clock clock (aka gate)
- Pinctrl
- Timer
- Real time clock
- UART
- GPIO
- I2C
- SD controller
- SDXC controller
- USB
- Watchdog
- Random number generator
- PLL / Clock frequency measurement
- Frame buffer
- Gigabit ethernet
The u-boot sequence to use for the Visson ATV-102 is:
video dev open 480p mmc rescan 0 fatload mmc 0 0x80100000 kernel.bin go 0x80100000
The u-boot sequence to use for the Hardkernel ODROID-C1 is:
video dev open 480p fatload mmc 0 0x100000 kernel.bin go 0x100000
The current FreeBSD driver doesn't program the video clocks so the u-boot video commands are necessary in order for the frame buffer to be useful (otherwise they can be skipped).
The SD card for the Visson ATV-102 doesn't need anything special beyond creating a FAT16 and a UFS filesystem.
The SD card for the ODROID-C1 also needs to contain the Hardkernel bootloader as well as u-boot ...
https://people.freebsd.org/~ganbold/FreeBSD-amlogic-20150311/build/sd_freebsd_odroidc1.sh can be used to prepare the card. Also https://people.freebsd.org/~ganbold/FreeBSD-amlogic-20150311/build/make_sd.sh can make fully working SD card with rootfs image if it was prepared before.
https://people.freebsd.org/~ganbold/FreeBSD-amlogic-20150311/build/ contains some necessary files.
https://people.freebsd.org/~sanpei/ODROID-C1/boot.ini is for u-boot and msdos partition.
Steps to prepare SD card (it assumes head src tree exists in /usr/src locally):
truncate -s 1024M odroidc1.img mdconfig -f odroidc1.img -u0 newfs /dev/md0 mount /dev/md0 /mnt make TARGET_ARCH=armv6 kernel-toolchain make TARGET_ARCH=armv6 KERNCONF=ODROIDC1 buildkernel make TARGET_ARCH=armv6 buildworld make TARGET_ARCH=armv6 DESTDIR=/mnt installworld distribution umount /mnt mdconfig -d -u0 dd if=bl1.bin.hardkernel of=/dev/mmcsd0 bs=512 dd if=u-boot.bin of=/dev/mmcsd0 bs=512 seek=64 conv=sync dd if=/dev/zero of=/dev/mmcsd0 bs=512 seek=1024 count=64 gpart destroy -F mmcsd0 gpart create -s mbr mmcsd0 gpart add -t fat16 -b 1134 -s 64M mmcsd0 gpart add -t freebsd -b 132206 mmcsd0 dd if=bl1.bin.hardkernel bs=512 count=1 of=bl1-mbr.tmp gpart bootcode -b bl1-mbr.tmp mmcsd0 newfs_msdos -F 16 /dev/mmcsd0s1 newfs /dev/mmcsd0s2 mount -t msdosfs /dev/mmcsd0s1 /mnt cp /usr/obj/arm.armv6/usr/src/sys/ODROIDC1/kernel.bin /mnt/ cp boot.ini /mnt umount /mnt dd if=/usr/src/odroidc1.img of=/dev/mmcsd0s2 bs=4096k mount /dev/mmcsd0s2 /mnt cp fstab /mnt/etc/ umount /mnt growfs /dev/mmcsd0s2
The bootloader and u-boot can be obtained from the boot subdirectory of ArchLinuxARM-odroid-c1-latest.tar.gz which is available at:
The u-boot source code is available at:
which also contains a prebuilt bootloader in the sd_fuse subdirectory ... however currently there's no prebuilt u-boot present.
The frame buffer driver is very rudimentary.
The Pinctrl driver contains just a basic set of entries ... additional pins can be added as necessary.
The RTC on the ODROID-C1 requires the battery to be installed.
The SDXC driver works fine when controlling a SD card, it also seems talk to the eMMC on the ODROID-C1, however more work is necessary (some possibly at the MMC driver level) in order to support eMMC.