龙芯编译go语言开发环境

龙芯 arch:mips64le

     由于官方从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!Go!Go!——龙芯平台上构建Go语言环境指南

 1、下载、解压

找一台装有64位Linux的系统,我用的是contos7.4

go1.4二进制发行版 Download and install - The Go Programming Language

下载Go 1.4(或者更高版本)的二进制发行版作为交叉编译的构建引导工具链

go1.14.6源码 Installing Go from source - The Go Programming Language

源码没有编译(没有bin目录);发行版是根据os编译过(有bin目录)

2、交叉编译

这一步通过执行脚本bootstrp.bash完成。该脚本执行前,需要通过环境变量

GOROOT_BOOTSTRAP:go构建引导程序位置

GOOS :目标操作

GOARCH:处理器架构

//解压
[root@baidu opt]# tar -xvf go1.4.linux-amd64.tar.gz 
[root@baidu opt]# mv go go1.4
[root@baidu opt]# tar -xvf go1.14.6.src.tar.gz 
[root@baidu opt]# mv go go1.14.6

//配置GOROOT_BOOTSTRAP
[root@baidu go1.4]# export GOROOT_BOOTSTRAP=/opt/go1.4
[root@baidu go1.4]# cd /opt/go1.14.6/src/
[root@baidu src]# pwd
/opt/go1.14.6/src
[root@baidu src]# GOOS=linux GOARCH=mips64le ./bootstrap.bash
...
Bootstrap toolchain for linux/mips64le installed in /opt/go-linux-mips64le-bootstrap.
Building tbz.
-rw-r--r--. 1 root root 114879161 Jul 29 16:37 /opt/go-linux-mips64le-bootstrap.tbz

大概10分钟,编译完成

交叉编译所生成的面向MIPS平台的Go语言构建引导工具链位于压缩包/opt/go-linux-mips64le-bootstrap.tbz中。

将该压缩包拷贝到龙芯电脑中备用

错误1:ERROR: Cannot find /opt/go1.4.2/bin/go.
Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.

解决办法:验证下$GOROOT_BOOTSTRAP值的正确性

错误2:文件已存在。../../go-linux-mips64le-bootstrap already exists; remove before continuing

解决办法:根据提示,删除go-linux-mips64le-bootstrap

 3、检测编译工具

上传go1.14.6(源码)和go-linux-mips64le-bootstrap.tbz(编译工具)到龙芯机器

[root@localhost go]# tar -xvf go1.14.6.src.tar.gz
[root@localhost go]# mv go go1.14.6
[root@localhost go]# tar -xvf go-linux-mips64le-bootstrap.tbz
[root@localhost go]# cd /opt/go/go-linux-mips64le-bootstrap/bin/
[root@localhost bin]# ./go version
go version go1.14.6 linux/mips64le

如果输出版本号,则基本可以说明交叉编译没有问题。

其实到这有个疑问,既然go能用了,为什么还要再去编译,目前我还无法解答,等明白再更新

4、配置编译环境变量

vi env.sh

#!/bin/bash
export GOROOT_BOOTSTRAP=/opt/go/go-linux-mips64le-bootstrap
#go编译目录
export GOROOT=/opt/go/go1.14.6

# Added for Loongson  (龙芯推荐,但是我用了会报错)
#export GO_TEST_TIMEOUT_SCALE=2

source env.sh 执行生效 

5、开始编译

[root@localhost go1.14.6]# cd $GOROOT/src
//If you do not want to run the test suite use make.bash (or make.bat) instead
//如果不想运行测试使用make.bash
[root@localhost go1.14.6]# ./all.bash
Building Go cmd/dist ...
...

我机器耗时40分钟左右,编译完成会提示,可以查看GOROOT下是否有bin目录,如果有就成功了。

ALL TESTS PASSED
---
Installed Go for linux/mips64le in /opt/go/go1.14.6/go
Installed commands in /opt/go/go1.14.6/bin
*** You need to add /opt/go/go1.14.6/bin to your PATH.

编译完成后,配置go环境变量,龙芯的root环境变量是vi .bashrc

vi .bashrc

export GOROOT=/opt/go/go1.14.6
export PATH=$PATH:$GOROOT/bin
#go workspace(go get下载的源码和资源都会在此),去执行下mkdir $HOME/workspace
export GOPATH=$HOME/GOPATH

# 启用 Go Modules 功能
export GO111MODULE=on
# 配置 GOPROXY 环境变量(version >= 1.11) 避免i/o timeout
export GOPROXY=https://goproxy.io

6、生效/验证

[root@localhost ~]# source .bashrc
[root@localhost ~]# go version
go version go1.14.6 linux/mips64le

7、Hello World

写一个go小程序,vi hello.go,将下面代码拷入

package main
import "fmt"
func main() {
    fmt.Printf("Hello World!\n")
}
[root@localhost ~]# go run hello.go
Hello World!

龙芯编译go语言结束

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
龙芯2K1000LA的开发流程可以简单概括为以下几个步骤: 1. 硬件准备:准备好龙芯2K1000LA处理器的开发板和相应的外设设备。 2. 配置内核:使用引用\[2\]中提到的命令,通过修改配置文件和使用menuconfig工具来配置内核。可以根据具体需求选择需要的功能和驱动程序。 3. 编译内核:使用引用\[2\]中提到的命令,通过交叉编译工具链编译内核。可以使用make命令来编译内核镜像。 4. 更新内核:可以选择使用网口或者U盘来更新内核。但是根据引用\[3\]的建议,使用U盘更新速度更快。将U盘插入开发板,开机后按照指定的步骤进入pmon命令行,然后将pmon引导程序和设备树写入flash中。 5. 测试和调试:完成内核更新后,可以进行测试和调试。可以验证系统的功能和性能,并进行必要的调整和优化。 需要注意的是,以上只是一个简单的概述,具体的开发流程可能会因为项目的不同而有所差异。在实际开发中,可能还需要进行驱动程序的开发、应用程序的编写等工作。建议参考相关的开发文档和资料,以获得更详细的指导。 #### 引用[.reference_title] - *1* *2* [龙芯2k1000LA之pmon学习](https://blog.csdn.net/m0_71897505/article/details/129523765)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [龙芯2K1000la开发之更新文件系统及内核](https://blog.csdn.net/hushichuanren/article/details/130860087)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值