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:

http://archlinuxarm.org/developers/downloads

The u-boot source code is available at:

https://github.com/hardkernel/u-boot/tree/odroidc-v2011.03/

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.

  • arm/odroid-c1.txt
  • Last modified: 2019/09/06 21:32
  • by LorenzoSalvadore