在 linkit smart 7688 寫 golang

appleboy · · 4528 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

## 原文來自: [在 linkit smart 7688 寫 golang](https://blog.wu-boy.com/2016/04/write-golang-in-linkit-smart-7688/) 很高興 [Mediatek][1] 在去年推出 [linkit smart 7688][2] 開發版,你可以把 7688 想成是一台迷你型 Router,如果不來拿開發,也可以當家用 Router 也是不錯的。7688 讓開發者可以在上面寫 [Node.js](https://nodejs.org/en/), Python 及 Native C,光是聽到 Node.js 就很興奮,用 JavaScript 控制硬體。但是本篇要介紹如何在 7688 執行 [Golang][3] 程式,其實不難,只要把 [OpenWrt][4] 支援 [gccgo][5] 及 [libgo][6] 即可。**底下步驟同步於我的 [Github Repo][8]** ### 用 Docker 安裝 7688 環境 我建立了一個 [Dockerfile][9],讓開發者可以透過 [Docker](https://www.docker.com/) 快速在任何作業系統產生開發環境,安裝步驟如下: ```bash $ git clone https://github.com/appleboy/linkit-smart-7688-golang.git $ cd linkit-smart-7688-golang && docker build -t mt7688 . ``` 開啟 7688 terminal 環境 ```bash $ docker run -ti --name 7688 mt7688 /bin/bash ``` ### 啟動 gccgo 和 libgo 底下步驟教您如何打開 gccgo 及 libgo 選單。打開 `package/libs/toolchain/Makefile` 找到 ```bash define Package/ldd ``` 在前面插入 ```bash define Package/libgo $(call Package/gcc/Default) TITLE:=Go support library DEPENDS+=@INSTALL_GCCGO DEPENDS+=@USE_EGLIBC endef define Package/libgo/config menu "Configuration" depends EXTERNAL_TOOLCHAIN && PACKAGE_libgo config LIBGO_ROOT_DIR string prompt "libgo shared library base directory" depends EXTERNAL_TOOLCHAIN && PACKAGE_libgo default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN default "/" if NATIVE_TOOLCHAIN config LIBGO_FILE_SPEC string prompt "libgo shared library files (use wildcards)" depends EXTERNAL_TOOLCHAIN && PACKAGE_libgo default "./usr/lib/libgo.so.*" endmenu endef ``` 找到 ```bash define Package/libssp/install ``` 在前面插入 ```bash define Package/libgo/install $(INSTALL_DIR) $(1)/usr/lib $(if $(CONFIG_TARGET_avr32)$(CONFIG_TARGET_coldfire),,$(CP) $(TOOLCHAIN_DIR)/lib/libgo.so.* $(1)/usr/lib/) endef ``` 找到 ```bash $(eval $(call BuildPackage,ldd)) ``` 在前面插入 ```bash $(eval $(call BuildPackage,libgo)) ``` 打開 `toolchain/gcc/Config.in` 最後面插入 ```bash config INSTALL_GCCGO bool prompt "Build/install gccgo compiler?" if TOOLCHAINOPTS && !(GCC_VERSION_4_6 || GCC_VERSION_4_6_LINARO) default n help Build/install GNU gccgo compiler ? ``` 打開 `toolchain/gcc/common.mk` 找到 ```bash TARGET_LANGUAGES:="c,c++$(if $(CONFIG_INSTALL_LIBGCJ),$(SEP)java)$(if $(CONFIG_INSTALL_GFORTRAN),$(SEP)fortran)" ``` 取代成 ```bash TARGET_LANGUAGES:="c,c++$(if $(CONFIG_INSTALL_LIBGCJ),$(SEP)java)$(if $(CONFIG_INSTALL_GFORTRAN),$(SEP)fortran)$(if $(CONFIG_INSTALL_GCCGO),$(SEP)go)" ``` 打開 Kernel Configuration ```bash $ make menuconfig ``` * Target System: Ralink RT288x/RT3xxx * Subtarget: MT7688 based boards * Target Profile: LinkIt7688 啟動 gccgo ```bash -> Advanced configuration options -> Toolchain options -> Select Build/Install gccgo -> C library implementation -> Use eglibc ``` ### 撰寫 golang hello world 用 `alias` 設定 mips gccgo 路徑 ```bash alias mips_gccgo='/root/openwrt/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_glibc-2.19/bin/mipsel-openwrt-linux-gccgo -Wl,-R,/root/openwrt/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_glibc-2.19/lib/gcc/mipsel-openwrt-linux-gnu/4.8.3 -L /root/openwrt/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_glibc-2.19/lib' ``` hello world 程式 ```go package main import "fmt" func main() { fmt.Println("hello world") } ``` 編譯執行檔 ```bash $ mips_gccgo -Wall -o helloworld_static_libgo helloworld.go -static-libgo ``` 在 7688 裝置內執行 `helloworld_static_libgo` ```bash root@mylinkit:/tmp/7688# ./helloworld_static_libgo hello world ``` 以上步驟就可以完成 hello world 程式,詳細步驟都記錄在 [linkit-smart-7688-golang][8] [1]: http://www.mediatek.com/zh-TW/ [2]: https://labs.mediatek.com/site/global/developer_tools/mediatek_linkit_smart_7688/whatis_7688/index.gsp [3]: https://golang.org/ [4]: https://openwrt.org/ [5]: https://golang.org/doc/install/gccgo [6]: https://github.com/golang/gofrontend/tree/master/libgo [7]: https://github.com [8]: https://github.com/appleboy/linkit-smart-7688-golang [9]: https://github.com/appleboy/linkit-smart-7688-golang/blob/master/Dockerfile

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4528 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传