A client asked for more recent Linux kernel support for a Marvell Kirkwood/Orion 88F6281 based board made by KaRo, the TK71. This is a Q7 form factor CPU module running @ 1.2GHz with two GBit Ethernet ports, two SATA ports, USB2.0 and PCIe support. The TK71 usually comes with 256MB of RAM, a 512MB version is available upon request. The Marvell Kirkwood CPU was intended for network appliances like routers or small NAS systems.
Originally I did the U-Boot and Linux kernel adaptations for the Warpcomm project in 2010, a joint venture of Avnet, Marvell and KaRo. At that time I ported a Linux mainline 2.6.36 kernel, later upgraded this to 2.6.38 but did no further updates.
Today I resurrected the old boards and gave them a small test drive 🙂
I started from a vanilla defconfig for Orion5 and used the ARM cross toolchain from Debian:
export ARCH=arm export CROSS_COMPILE=arm-linux-gnueabi- make orion5x_defconfig make zImage
Since the U-Boot version does not yet have device tree support I attached a device tree binary to the zImage and built the uImage from it:
make dtbs cat arch/arm/boot/zImage arch/arm/boot/dts/kirkwood-openrd-base.dtb > zImage-openrd-base /bin/sh ./scripts/mkuboot.sh -A arm -O linux -C none -T kernel -a 0x00008000 -e 0x00008000 -n 'Linux-4.12.5' -d ./zImage-openrd-base uImage-openrd-base
Looks a little scary but works nicely. On the TK71 I can load this kernel image via dhcp/tftp and boot into it:
TK71>> dhcp uImage-openrd-base BOOTP broadcast 1 DHCP client bound to address 10.37.3.136 Using egiga0 device TFTP from server 10.37.3.254; our IP address is 10.37.3.136 Filename 'uImage-openrd-base'. Load address: 0x800000 Loading: ################################################################# ################################################################# ################################## done Bytes transferred = 2394329 (2488d9 hex) TK71>> bootm ## Booting kernel from Legacy Image at 00800000 ... Image Name: Linux-4.12.5 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 2394265 Bytes = 2.3 MB Load Address: 00008000 Entry Point: 00008000 Verifying Checksum ... OK Loading Kernel Image ... OK OK Starting kernel ... Uncompressing Linux... done, booting the kernel. Booting Linux on physical CPU 0x0 Linux version 4.12.5 (nica@sourceress) (gcc version 4.9.2 ( 4.9.2-10) ) #6 PREEM PT Tue Aug 8 17:39:55 CEST 2017 CPU: Feroceon 88FR131 [56251311] revision 1 (ARMv5TE), cr=0005397f ...
Excellent!
The most important peripherals are working, like first Ethernet interface, serial console and NAND flash so I can continue from there. I guess that most of the work will be in properly configuring a devicetree for the TK71.