Golang on Onion Omega



  • Does anyone know how one would go about cross compiling golang for the onion omega?



  • @Ben-Goldberg Very good question. While this is something we haven't spent a huge amount of time on, we have played around with it a few months ago. This repo here: https://github.com/GeertJohan/openwrt-go offers openwrt buildroot with gccgo and libgo. You will need to clone the repo, check out branch add-gccgo-and-libgo, and run make menuconfig from there.

    The only problem right now is that the Omega profile isn't currently in this buildroot version, so you will to add support for it yourself. Here's a patch file that adds Omega support to the buildroot that we use:

    This patch adds support for the Onion Omega.
    
    https://onion.io/omega
    
    Signed-off-by: L. D. Pinney <ldpinney@gmail.com>
    Acked-by: Boken Lin <bl@onion.io>
    Tested-by: Jacky Huang <huangfangcheng@163.com>
    ---
    v2 @ kernel 3.18
    v3 bumps the kernel to 4.1
    
    target/linux/ar71xx/base-files/etc/diag.sh                            |  3 +++
    target/linux/ar71xx/base-files/etc/uci-defaults/02_network            |  4 ++++
    target/linux/ar71xx/base-files/lib/ar71xx.sh                          |  3 +++
    target/linux/ar71xx/base-files/lib/upgrade/platform.sh                |  1 +
    target/linux/ar71xx/config-4.1                                        |  1 +
    target/linux/ar71xx/files/arch/mips/ath79/mach-onion-omega.c          | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    target/linux/ar71xx/generic/profiles/onion.mk                         | 16 ++++++++++++++
    target/linux/ar71xx/image/Makefile                                    |  9 ++++++++
    target/linux/ar71xx/patches-4.1/700-MIPS-ath79-openwrt-machines.patch | 24 +++++++++++++++------
    tools/firmware-utils/src/mktplinkfw.c                                 |  6 ++++++
    10 files changed, 145 insertions(+), 6 deletions(-)
    
    diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
    index 12c31c4..97ba1d8 100644
    --- a/target/linux/ar71xx/base-files/etc/diag.sh
    +++ b/target/linux/ar71xx/base-files/etc/diag.sh
    @@ -173,6 +173,9 @@ get_status_led() {
    	om5p-an)
    		status_led="om5p:blue:power"
    		;;
    +	onion-omega)
    +		status_led="onion:amber:system"
    +		;;
    	pb44)
    		status_led="pb44:amber:jump1"
    		;;
    diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
    index e7dc538..c010d3f 100755
    --- a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
    +++ b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
    @@ -277,6 +277,10 @@ mynet-n750)
    	[ -n "$mac" ] && ucidef_set_interface_macaddr "wan" "$mac"
    	;;
    
    +onion-omega)
    +	ucidef_set_interface_lan "wlan0"
    +	;;
    +
    dhp-1565-a1 |\
    dir-835-a1 |\
    wndr3700v4 | \
    diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
    index 9edd0cd..91e1629 100755
    --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
    +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
    @@ -556,6 +556,9 @@ ar71xx_board_detect() {
    	*"OM5P AN")
    		name="om5p-an"
    		;;
    +	*"Onion Omega")
    +		name="onion-omega"
    +		;;
    	*PB42)
    		name="pb42"
    		;;
    diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
    index 98e607c..f5d67ef 100755
    --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
    +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
    @@ -312,6 +312,7 @@ platform_check_image() {
    	el-mini | \
    	gl-inet | \
    	mc-mac1200r | \
    +	onion-omega | \
    	oolite | \
    	smart-300 | \
    	tl-mr10u | \
    diff --git a/target/linux/ar71xx/config-4.1 b/target/linux/ar71xx/config-4.1
    index 23ba27d..2982196 100644
    --- a/target/linux/ar71xx/config-4.1
    +++ b/target/linux/ar71xx/config-4.1
    @@ -90,6 +90,7 @@ CONFIG_ATH79_MACH_NBG460N=y
    CONFIG_ATH79_MACH_NBG6716=y
    CONFIG_ATH79_MACH_OM2P=y
    CONFIG_ATH79_MACH_OM5P=y
    +CONFIG_ATH79_MACH_ONION_OMEGA=y
    CONFIG_ATH79_MACH_PB42=y
    CONFIG_ATH79_MACH_PB44=y
    CONFIG_ATH79_MACH_PB92=y
    diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-onion-omega.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-onion-omega.c
    new file mode 100644
    index 0000000..c739840
    --- /dev/null
    +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-onion-omega.c
    @@ -0,0 +1,84 @@
    +/*
    + *  Onion Omega board support
    + *
    + *  Copyright (C) 2015 Boken Lin <bl@onion.io>
    + *
    + *  This program is free software; you can redistribute it and/or modify it
    + *  under the terms of the GNU General Public License version 2 as published
    + *  by the Free Software Foundation.
    + */
    +
    +#include <linux/gpio.h>
    +
    +#include <asm/mach-ath79/ath79.h>
    +
    +#include "dev-eth.h"
    +#include "dev-gpio-buttons.h"
    +#include "dev-leds-gpio.h"
    +#include "dev-m25p80.h"
    +#include "dev-usb.h"
    +#include "dev-wmac.h"
    +#include "machtypes.h"
    +
    +#define OMEGA_GPIO_LED_SYSTEM	27
    +#define OMEGA_GPIO_BTN_RESET	11
    +
    +#define OMEGA_GPIO_USB_POWER	8
    +
    +#define OMEGA_KEYS_POLL_INTERVAL	20  /* msecs */
    +#define OMEGA_KEYS_DEBOUNCE_INTERVAL	(3 * OMEGA_KEYS_POLL_INTERVAL)
    +
    +static const char *omega_part_probes[] = {
    +	"tp-link",
    +	NULL,
    +};
    +
    +static struct flash_platform_data omega_flash_data = {
    +	.part_probes    = omega_part_probes,
    +};
    +
    +static struct gpio_led omega_leds_gpio[] __initdata = {
    +	{
    +		.name       = "onion:amber:system",
    +		.gpio       = OMEGA_GPIO_LED_SYSTEM,
    +		.active_low = 1,
    +	},
    +};
    +
    +static struct gpio_keys_button omega_gpio_keys[] __initdata = {
    +	{
    +		.desc       = "reset",
    +		.type       = EV_KEY,
    +		.code       = KEY_RESTART,
    +		.debounce_interval = OMEGA_KEYS_DEBOUNCE_INTERVAL,
    +		.gpio       = OMEGA_GPIO_BTN_RESET,
    +		.active_low = 0,
    +	}
    +};
    +
    +static void __init onion_omega_setup(void)
    +{
    +	u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);
    +	u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
    +
    +	ath79_register_m25p80(&omega_flash_data);
    +	ath79_register_leds_gpio(-1, ARRAY_SIZE(omega_leds_gpio),
    +				omega_leds_gpio);
    +	ath79_register_gpio_keys_polled(-1, OMEGA_KEYS_POLL_INTERVAL,
    +					ARRAY_SIZE(omega_gpio_keys),
    +					omega_gpio_keys);
    +
    +	gpio_request_one(OMEGA_GPIO_USB_POWER,
    +			GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
    +			"USB power");
    +	ath79_register_usb();
    +
    +	ath79_init_mac(ath79_eth0_data.mac_addr, mac, -1);
    +
    +	ath79_register_mdio(0, 0x0);
    +	ath79_register_eth(0);
    +
    +	ath79_register_wmac(ee, mac);
    +}
    +
    +MIPS_MACHINE(ATH79_MACH_ONION_OMEGA, "ONION-OMEGA", "Onion Omega", onion_omega_setup);
    diff --git a/target/linux/ar71xx/generic/profiles/onion.mk b/target/linux/ar71xx/generic/profiles/onion.mk
    new file mode 100644
    index 0000000..dd5874e
    --- /dev/null
    +++ b/target/linux/ar71xx/generic/profiles/onion.mk
    @@ -0,0 +1,16 @@
    +#
    +# Copyright (C) 2014 OpenWrt.org
    +#
    +# This is free software, licensed under the GNU General Public License v2.
    +# See /LICENSE for more information.
    +#
    +
    +define Profile/OMEGA
    +   NAME:=Onion Omega
    +   PACKAGES:=kmod-usb-core kmod-usb2 kmod-usb-storage kmod-i2c-core kmod-i2c-gpio-custom kmod-spi-bitbang kmod-spi-dev kmod-spi-gpio kmod-spi-gpio-custom kmod-usb-serial
    +endef
    +
    +define Profile/OMEGA/Description
    +   Package set optimized for the Onion Omega development platform.
    +endef
    +$(eval $(call Profile,OMEGA))
    diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
    index ec394dd..5c76a55 100644
    --- a/target/linux/ar71xx/image/Makefile
    +++ b/target/linux/ar71xx/image/Makefile
    @@ -388,6 +388,15 @@ define Device/mc-mac1200r
    endef
    TARGET_DEVICES += mc-mac1200r
    
    +define Device/onion-omega
    +    $(Device/tplink-16mlzma)
    +    BOARDNAME := ONION-OMEGA
    +    DEVICE_PROFILE := OMEGA
    +    TPLINK_HWID := 0x04700001
    +    CONSOLE := ttyATH0,115200
    +endef
    +TARGET_DEVICES += onion-omega
    +
    define Device/tl-mr10u-v1
        $(Device/tplink-4mlzma)
        BOARDNAME := TL-MR10U
    diff --git a/target/linux/ar71xx/patches-4.1/700-MIPS-ath79-openwrt-machines.patch b/target/linux/ar71xx/patches-4.1/700-MIPS-ath79-openwrt-machines.patch
    index 02d9966..02ebd1b 100644
    --- a/target/linux/ar71xx/patches-4.1/700-MIPS-ath79-openwrt-machines.patch
    +++ b/target/linux/ar71xx/patches-4.1/700-MIPS-ath79-openwrt-machines.patch
    @@ -1,6 +1,6 @@
    --- a/arch/mips/ath79/machtypes.h
    +++ b/arch/mips/ath79/machtypes.h
    -@@ -16,24 +16,206 @@
    +@@ -16,24 +16,207 @@
    
     enum ath79_mach_type {
     	ATH79_MACH_GENERIC = 0,
    @@ -82,6 +82,7 @@
    +	ATH79_MACH_OM2P,		/* OpenMesh OM2P */
    +	ATH79_MACH_OM5P_AN,		/* OpenMesh OM5P-AN */
    +	ATH79_MACH_OM5P,		/* OpenMesh OM5P */
    ++	ATH79_MACH_ONION_OMEGA,		/* ONION OMEGA */
    +	ATH79_MACH_PB42,		/* Atheros PB42 */
    +	ATH79_MACH_PB92,		/* Atheros PB92 */
    +	ATH79_MACH_QIHOO_C301,		/* Qihoo 360 C301 */
    @@ -300,7 +301,7 @@
     config ATH79_MACH_AP121
     	bool "Atheros AP121 reference board"
     	select SOC_AR933X
    -@@ -11,62 +95,1097 @@ config ATH79_MACH_AP121
    +@@ -11,62 +95,1107 @@ config ATH79_MACH_AP121
     	select ATH79_DEV_M25P80
     	select ATH79_DEV_USB
     	select ATH79_DEV_WMAC
    @@ -1006,6 +1007,16 @@
    +	select ATH79_DEV_M25P80
    +	select ATH79_DEV_WMAC
    +
    ++config ATH79_MACH_ONION_OMEGA
    ++	bool "ONION OMEGA support"
    ++	select SOC_AR933X
    ++	select ATH79_DEV_ETH
    ++	select ATH79_DEV_GPIO_BUTTONS
    ++	select ATH79_DEV_LEDS_GPIO
    ++	select ATH79_DEV_M25P80
    ++	select ATH79_DEV_USB
    ++	select ATH79_DEV_WMAC
    ++
    +config ATH79_MACH_MR12
    +	bool "Meraki MR12 board support"
    +	select SOC_AR724X
    @@ -1426,7 +1437,7 @@
    
     config ATH79_MACH_UBNT_XM
     	bool "Ubiquiti Networks XM/UniFi boards"
    -@@ -83,6 +1202,97 @@ config ATH79_MACH_UBNT_XM
    +@@ -83,6 +1212,97 @@ config ATH79_MACH_UBNT_XM
     	  Say 'Y' here if you want your kernel to support the
     	  Ubiquiti Networks XM (rev 1.0) board.
    
    @@ -1524,7 +1535,7 @@
     endmenu
    
     config SOC_AR71XX
    -@@ -134,7 +1344,10 @@ config ATH79_DEV_DSA
    +@@ -134,7 +1354,10 @@ config ATH79_DEV_DSA
     config ATH79_DEV_ETH
     	def_bool n
    
    @@ -1536,7 +1547,7 @@
     	def_bool n
    
     config ATH79_DEV_GPIO_BUTTONS
    -@@ -164,6 +1377,11 @@ config ATH79_PCI_ATH9K_FIXUP
    +@@ -164,6 +1387,11 @@ config ATH79_PCI_ATH9K_FIXUP
     	def_bool n
    
     config ATH79_ROUTERBOOT
    @@ -1550,7 +1561,7 @@
     endif
    --- a/arch/mips/ath79/Makefile
    +++ b/arch/mips/ath79/Makefile
    -@@ -38,9 +38,132 @@ obj-$(CONFIG_ATH79_ROUTERBOOT)		+= route
    +@@ -38,9 +38,133 @@ obj-$(CONFIG_ATH79_ROUTERBOOT)		+= route
     #
     # Machines
     #
    @@ -1613,6 +1624,7 @@
    +obj-$(CONFIG_ATH79_MACH_NBG460N)	+= mach-nbg460n.o
    +obj-$(CONFIG_ATH79_MACH_OM2P)		+= mach-om2p.o
    +obj-$(CONFIG_ATH79_MACH_OM5P)		+= mach-om5p.o
    ++obj-$(CONFIG_ATH79_MACH_ONION_OMEGA)  += mach-onion-omega.o
    +obj-$(CONFIG_ATH79_MACH_PB42)		+= mach-pb42.o
     obj-$(CONFIG_ATH79_MACH_PB44)		+= mach-pb44.o
    +obj-$(CONFIG_ATH79_MACH_PB92)		+= mach-pb92.o
    diff --git a/tools/firmware-utils/src/mktplinkfw.c b/tools/firmware-utils/src/mktplinkfw.c
    index 8c543eb..99338d4 100644
    --- a/tools/firmware-utils/src/mktplinkfw.c
    +++ b/tools/firmware-utils/src/mktplinkfw.c
    @@ -34,6 +34,7 @@
    #define HWID_ANTMINER_S3	0x04440003
    #define HWID_GL_INET_V1		0x08000001
    #define HWID_GS_OOLITE_V1	0x3C000101
    +#define HWID_ONION_OMEGA	0x04700001
    #define HWID_TL_MR10U_V1	0x00100101
    #define HWID_TL_MR13U_V1	0x00130101
    #define HWID_TL_MR3020_V1	0x30200001
    @@ -420,6 +421,11 @@ static struct board_info boards[] = {
    		.hw_rev		= 1,
    		.layout_id	= "16Mlzma",
    	}, {
    +		.id		= "ONION-OMEGA",
    +		.hw_id		= HWID_ONION_OMEGA,
    +		.hw_rev		= 1,
    +		.layout_id	= "16Mlzma",
    +	}, {
    		.id		= "ANTMINER-S1",
    		.hw_id		= HWID_ANTMINER_S1,
    		.hw_rev		= 1,
    

    Happy hacking!



  • I have a bunch of instructions on building and running Go on the Omega here. It's based on the info above.



  • I know that this topic is quite old, but I thought it is worth mentioning that now you can compile Golang directly for mips.
    You would use something like:

    GOARCH=mipsle GOOS=linux go build main.go

    You can thus compile your program on any computer and just copy the resulting executable on your Onion.

    The resulting executable will be able to run on Onion directly.


Log in to reply
 

Looks like your connection to Community was lost, please wait while we try to reconnect.