统信UOS系统如何将golang移植到mips架构下?

MoMo 2022年5月21日21:34:33
评论
27

go的编译

  • 官方参考手册:

http://www.loongson.cn/news/company/456.html

  • 编译步骤
  • 第一阶段:在X86平台上交叉编译出面向MIPS平台的Go语言自举编译工具链。

1.在x86下下载 go1.14.2.linux-amd64.tar.gz

$ tar xvzf go1.14.2.linux-amd64.tar.gz -C /opt
$ mv /opt/go /opt/go1.14.2

2.配置交叉编译的自举编译工具链

$ export GOROOT_BOOTSTRAP=/opt/go1.14.2

3.下载Go 1.14的源代码

$ cd ~
$ git clone https://gitlabwh.uniontech.com/wuhan/container/go-1.14.git

4.切换到Go 1.14的发行版

$ cd go
$ git checkout master

5.交叉编译 这一步通过执行脚本bootstrp.bash完成。该脚本执行前,需要通过环境变量GOOS和GOARCH分别指明交叉编译的目标操作系统和处理器架构。

$ cd ~/go/src
$ GOOS=linux GOARCH=mips64le ./bootstrap.bash

接下来就是等待交叉编译结束了。由于交叉编译无需执行Go语言官方自带的测试集,一般10分钟内即可完成编译。不出意外的话,整个过程应该非常顺利。如果您看到以下提示,则明交叉编译成功。

----
Bootstrap toolchain for linux/mips64le installed in /home/deepin/go-linux-mips64le-bootstrap.
Building tbz.
-rw-rw-r-- 1 fool fool 46736199  6月  3 09:08 /home/deepin/go-linux-mips64le-bootstrap.tbz

交叉编译所生成的面向MIPS平台的Go语言自举编译工具链位于压缩包/home/deepin/go-linux-mips64le-bootstrap.tbz中。将该压缩包拷贝到龙芯电脑中备用。

  • 第二阶段:在龙芯平台上从源代码构建Go 1.14开发环境。

1.解压交叉编译生成的面向MIPS平台的自举编译工具链

$ tar xvjf go-linux-mips64le-bootstrap.tbz -C ~

2.简单检验自举编译工具链是否可用

$ cd ~/workspace/go-linux-mips64le-bootstrap/bin
$ export GOROOT=/home/deepin/go-linux-mips64le-bootstrap
$ ./go version

如果观察到以下输出,则基本可以说明交叉编译没有问题。

go version go1.14.2 linux/mips64le

3.下载Go1.14的源代码并切换到Go1.14的发行版。

$ cd ~
$ https://gitlab.deepin.io/wuyong/go.git
$ cd go
$ git checkout release-branch.go1.14

4.编译配置 在当前目录创建名为env.sh的shell脚本,输入以下语句后保存退出。

#!/bin/bash
export GOROOT_BOOTSTRAP=/home/deepin/go-linux-mips64le-bootstrap
export GOROOT=/home/deepin/go

其中,GOROOT_BOOTSTRAP用于指向自举编译工具链的根目录,GOROOT指向Go 1.6源代码的根目录。 执行env.sh,以完成编译配置。

$ source env.sh

5.编译

$ cd src
$ ./all.bash

待脚本执行结束后,如果观察到如下输出信息,则说明龙芯平台上Go 1.6的编译和测试顺利完成。整个过程约半小时。

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

6.安装编译生成的Go 1.14.2 在~/.bashrc的末尾添加如下语句

export GOROOT=/home/deepin/go
export PATH=$PATH: $GOROOT/bin

然后执行

$ source ~/.bashrc

生效后,使用该指令

go version

出现如下信息示编译成功

go version go1.14.2 linux/mips64le

go1.14.2打包

  • 建立一个打包文件夹
$ mkdir page
$ cd page
  • 在该文件夹内分别创建一个DEBIAN目录,和一个目录树usr目录(用于deb包指定安装路径)
  • 在DEBIAN内创建一个control文件(打包规则
$ mkdir DEBIAN usr
$ cd DEBIAN
$ touch control
  • conrtol的编辑内容如下:
Package: golang
Version: 1.14.2
Architecture: mips64el
Maintainer: wuyong <wuyong@uniontech.com>
Installed-Size:616796
Depends:
Section: web
Priority: optional
Homepage: https://gitlab.deepin.io/wuyong
Description: golang
  • 接下来目录树的设置,usr根据仿照根目录路径而设置,想安装到哪就将源码放置到哪个文件夹,本次移植放置到usr/lib下:
$ cd usr
$ mkdir bin lib
$ mv ~/go1.14.2 ~/page/usr/lib
  • 并在同一级目录下创建bin目录,用于存放go命令(软链接)
  • ln -s 可执行文件相对路径 生成的软链接名
$ cd bin
$ ln -s ../lib/go1.14.2/bin/go go
  • 退回到page目录外执行如下指令
  • sudo dpkg -b DEBIAN所在路径 <package name> //打包相关操作
$ sudo dpkg -b page go1.14.2_mips64el.deb
https://xpanx.com/
MoMo
  • 本文由 发表于 2022年5月21日21:34:33
  • 转载请务必保留本文链接:https://xpanx.com/3938.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: