龍芯的go之路(一)-在龍芯中安裝go
工具與資源中心
幫助開發者更加高效的工作,提供圍繞開發者全生命週期的工具與資源
https://developer.aliyun.com/tool?spm=a1z389.11499242.0.0.6545241364KBGP&utm_content=g_1000295017
龍芯派2代的go語言配置,以及安裝go-opencv
- go語言作為後起之秀,我們在龍芯派這個國產硬體上配置go語言所需的環境顯得十分的有必要了,同時我們也安裝下go語言下的opencv
一.直接使用自帶的yum源安裝包裡的go進行安裝
- 直接使用yum install 即可 可以使用yum search 查詢一下
二、從原始碼構建Go語言環境
由於當前最新發布的Go語言的穩定版本為Go 1.6,並且官方從該版本開始正式支援MIPS架構的處理器,故筆者以Go 1.6為例展示Go語言環境在龍芯平臺上的構建方法。為了最大限度減少Go語言對其它程式設計工具的依賴,從Go 1.5開始,Go語言的編譯器、彙編器和連結器等底層工具鏈全部使用Go語言來實現。故自Go 1.5開始,從原始碼安裝Go語言環境時需要使用現成的Go語言編譯器來編譯Go的原始碼,上述過程稱為Go語言的自舉編譯。因此,從原始碼安裝Go 1.6時要求系統中存在Go 1.4及其以上的Go語言環境。 由於官方從Go 1.6才開始正式支援MIPS架構,因而無法找到現成的可用於在龍芯上進行自舉編譯的低版本Go編譯器。好在Go語言提供了友好的交叉編譯功能,我們可以藉助X86的機器編譯一個MIPS平臺的Go編譯器,用作在龍芯上從原始碼構建Go 1.6的自舉編譯器。因此,在龍芯平臺上從原始碼構建Go 1.6的環境必須分成兩個階段進行:
1) 在X86平臺上交叉編譯出面向MIPS平臺的Go語言自舉編譯工具鏈;
2) 在龍芯平臺上利用1)中的Go自舉編譯器構建Go 1.6開發環境。
下面筆者逐步向大家展示Go 1.6環境在龍芯平臺上的構建過程。等大家走完整個過程就會發現,在龍芯上從原始碼安裝Go語言環境非常簡單。
第一階段:在X86平臺上交叉編譯出面向MIPS平臺的Go語言自舉編譯工具鏈。
隨便找一臺裝有64位Linux作業系統的X86電腦,逐步執行以下命令。
1. 下載Go 1.4(或者更高版本)的二進位制發行版作為交叉編譯的自舉編譯工具鏈 筆者選擇Go 1.4的發行版作為在X86上編譯Go 1.6原始碼的自舉編譯器。由於官網 在國內無法正常訪問,可以透過其映象站點 。筆者下載的檔案為go1.4.2.linux-amd64.tar.gz,大小約59 M。下載後可以解壓到任意目錄,例如可以透過如下命令將其解壓到/opt資料夾下並重新命名為go1.4.2:
$ tar xvzf go1.4.2.linux-amd64.tar.gz -C /opt $ mv /opt/go /opt/go1.4.2
2. 配置交叉編譯的自舉編譯工具鏈
$ export GOROOT_BOOTSTRAP=/opt/go1.4.2
3. 下載Go 1.6的原始碼
$ cd ~/workspace/golang/$ git clone
4. 切換到Go 1.6的發行版
$ cd go$ git checkout release-branch.go1.6
5. 交叉編譯 這一步透過執行指令碼bootstrp.bash完成。該指令碼執行前,需要透過環境變數GOOS和GOARCH分別指明交叉編譯的目標作業系統和處理器架構。
$ cd ~/workspace/golang/go/src$ GOOS=linux GOARCH=mips64le ./bootstrap.bash
接下來就是等待交叉編譯結束了。由於交叉編譯無需執行Go語言官方自帶的測試集,一般10分鐘內即可完成編譯。不出意外的話,整個過程應該非常順利。如果您看到以下提示,則表明交叉編譯成功。
---- Bootstrap toolchain for linux/mips64le installed in /home/fool/workspace/golang/go-linux-mips64le-bootstrap. Building tbz. -rw-rw-r-- 1 fool fool 46736199 6月 3 09:08 /home/fool/workspace/golang/go-linux-mips64le-bootstrap.tbz
交叉編譯所生成的面向MIPS平臺的Go語言自舉編譯工具鏈位於壓縮包/home/fool/workspace/golang/go-linux-mips64le-bootstrap.tbz中。將該壓縮包複製到龍芯電腦中備用。
第二階段:在龍芯平臺上從原始碼構建Go 1.6開發環境。
1. 解壓交叉編譯生成的面向MIPS平臺的自舉編譯工具鏈
$ tar xvjf go-linux-mips64le-bootstrap.tbz -C ~/workspace
2. 簡單檢驗自舉編譯工具鏈是否可用
$ cd ~/workspace/go-linux-mips64le-bootstrap/bin$ export GOROOT=/home/loongson/workspace/go-linux-mips64le-bootstrap$ ./go version
如果觀察到以下輸出,則基本可以說明交叉編譯沒有問題。
go version go1.6.2 linux/mips64le
3. 下載Go 1.6的原始碼並切換到Go 1.6的發行版。
$ cd ~/workspace$ git clone $ cd go$ git checkout release-branch.go1.6
4. 編譯配置 在當前目錄建立名為env.sh的shell指令碼,輸入以下語句後儲存退出。
#!/bin/bashexport GOROOT_BOOTSTRAP=/home/loongson/workspace/go-linux-mips64le-bootstrapexport GOROOT=/home/loongson/workspace/go
其中,GOROOT_BOOTSTRAP用於指向自舉編譯工具鏈的根目錄,GOROOT指向Go 1.6原始碼的根目錄。 執行env.sh,以完成編譯配置。
$ source env.sh
5. 首次編譯
$ cd src$ ./all.bash
上述指令碼執行時,首先會利用自舉編譯工具鏈完成對Go 1.6原始碼的編譯,生成龍芯上的Go 1.6環境。隨後利用官方的測試集對生成的本地Go 1.6進行測試。測試的過程相對漫長,需要耐心等待。約20分鐘後,測試期間中突然列印如下錯誤資訊:
ok cmd/compile/internal/test 0.038s ok cmd/cover 18.360s ok cmd/doc 0.393s ok cmd/fix 0.192s panic: test timed out after 3m0s goroutine 489 [running]: panic(0x120552480, 0xc4203087f0) /home/loongson/workspace/go/src/runtime/panic.go:500 +0x4c4testing.startAlarm.func1() /home/loongson/workspace/go/src/testing/testing.go:918 +0x168created by time.goFunc /home/loongson/workspace/go/src/time/sleep.go:132 +0x5c… FAIL cmd/go 208.996s ok cmd/gofmt 0.270s ok cmd/internal/goobj 0.064s ok cmd/internal/obj 0.032s ok cmd/internal/obj/x86 0.067s ok cmd/internal/pprof/profile 0.048s ok cmd/link 0.077s ok cmd/nm 9.304s
測試專案cmd/go沒有透過測試。這是為什麼呢?筆者起初懷疑編譯生成的Go 1.6可能有問題,反覆檢查了編譯引數的設定,但錯誤依舊。後來,考慮到官方既然已經宣佈Go 1.6直接支援MIPS,編譯出錯的機率應極小,更何況前面那麼多的測試專案都能正確執行。於是將思路從對編譯引數的檢查轉向對測試引數的排查。顯然,錯誤由測試超時導致,而預設的超時閾值僅為3分鐘。對於龍芯和ARM等低主頻的處理器,cmd/go測試項的執行時間可能會超過3分鐘。因此,在龍芯平臺上有可能需要適當增大測試超時的閾值。後來,經過一系列分析和排查,終於找到了環境變數GO_TEST_TIMEOUT_SCALE,用於對測試超時的閾值進行倍增。例如,若設定GO_TEST_TIMEOUT_SCALE = 2,則測試超時的閾值擴大為原來的兩倍,即由3分鐘增大到6分鐘。
6. 重新編譯 根據具體平臺的需要在env.sh中增加對環境變數GO_TEST_TIMEOUT_SCALE的設定,例如以下為適用於龍芯平臺的env.sh。
#!/bin/bash export GOROOT_BOOTSTRAP=/home/loongson/workspace/go-linux-mips64le-bootstrapexport GOROOT=/home/loongson/workspace/go # Added for Loongsonexport GO_TEST_TIMEOUT_SCALE=2
上述修改完成後,重新執行env.sh和all.bash這兩個指令碼。
$ cd ~/workspace/go$ source env.sh$ cd src$ ./all.bash
待指令碼執行結束後,如果觀察到如下輸出資訊,則說明龍芯平臺上Go 1.6的編譯和測試順利完成。整個過程約半小時。
ALL TESTS PASSED ---Installed Go for linux/mips64le in /home/loongson/workspace/go Installed commands in /home/loongson/workspace/go/bin*** You need to add /home/loongson/workspace/go/bin to your PATH.
7. 安裝編譯生成的Go 1.6。 在~/.bashrc的末尾新增如下語句
export GOROOT=/home/loongson/workspace/goexport PATH=$PATH: $GOROOT/bin
然後執行
$ source ~/.bashrc
三、龍芯上Go語言對全世界的問候
激動人心的時刻終於到來了!我們先執行一下Go命令,列印一下版本資訊吧:
$ go versiongo version go1.6.2 linux/mips64le
接下來,我們來測試一下Go的“Hello World”!開啟任何一款文字編輯器,您可以使用Linux經典的vim,也可以使用更適合大眾的gedit,編寫hello.go檔案,僅需幾行程式碼:
package mainimport "fmt"func main() { fmt.Printf("Hello World!\n") }
首先編譯原始碼hello.go。Go和C/C++語言一樣,屬於靜態編譯型語言。Go的源程式必須經過編譯後才能執行。
$ go build hello.go
上述命令會生成名為hello的可執行檔案。執行hello
$ ./hello Hello World!
親自感受了Go語言在龍芯上的第一個HelloWorld,真是太令人興奮了! 上述編譯和執行的過程也可以使用go run命令一次性完成,例如
$ go run hello.goHello World!
本文轉自:https://developer.aliyun.com/article/790287?spm=a2c6h.12873581.0.0.6b4c767dbHK00x&groupCode=othertech
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70003733/viewspace-2791510/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 龍芯go之路(二)-安裝opencv-goGoOpenCV
- 龍芯 & Golang!Golang
- 龍芯(Loongarch64),在Linux虛擬一個龍芯OS體驗下Linux
- 龍芯2號系列功能及技術特點(龍芯2F,龍芯2H,龍芯2K1000)
- 龍芯 & Golang!Golang
- 龍芯 3A4000 安裝 Debian stable
- 龍芯+UOS系統下java環境安裝Java
- ARM 和 龍芯上 Arch Linux 安裝手記Linux
- 龍芯釋出新一代伺服器處理器:龍芯3C5000L伺服器
- 龍芯2號處理器,龍芯2K1000晶片引數晶片
- 龍芯原始碼編譯MySQL原始碼編譯MySql
- 龍芯應用技術合作研討會-龍芯和國產Linux謀求共同發展(轉)Linux
- 龍芯1D處理器datasheet
- 入門龍芯舊世界彙編指令
- 龍芯麒麟原始碼編譯MySQL生成軟體包進行安裝原始碼編譯MySql
- 龍芯筆記本: 將投產龍芯筆記本採用Linux系統受質疑(轉)筆記Linux
- 龍芯3A3000和龍芯3B3000晶片處理器引數比較晶片
- 龍芯開源社群上線.NET主頁
- 龍芯fedora28日常生存指南
- 製作一個龍芯舊世界的 dotnet sdk docker 映象Docker
- 崑崙芯科技加入龍蜥社群 ,賦能智慧開源,共築AI芯生態AI
- 龍芯1B晶片處理器介紹晶片
- 龍芯1A處理器引數介紹
- 龍芯1D晶片處理器介紹晶片
- 國產處理器龍芯地址空間詳解
- 龍芯PC生死由Linux說了算?(轉)Linux
- 龍芯吧小吧主彭東鋒(知乎直答)
- 比爾蓋子:關於龍芯開發的一點見解
- 龍芯團隊完成CoreCLR MIPS64移植,在github開源Github
- 龍芯釋出.NET 6.0.100開發者試用版
- 國產核心科技 龍芯機器人控制器首次亮相機器人
- 龍芯轉型:摘掉紅帽子,要建生態系統
- 龍芯(Loongson 3A3000)膝上型電腦作業系統安裝筆記作業系統筆記
- 龍芯釋出新一代CPU 騰訊安全完成認證適配
- 胡偉武訪談---龍芯"1號通用CPU的成功釋出
- 龍芯2H晶片處理器引數效能介紹晶片
- 最新龍芯2J處理器資料手冊/datasheet
- 【龍印】龍芯1c上雙路16位AD晶片TM7705的linux驅動晶片Linux