Litao OK Blog

A little blog for my life.

Building Go 1.5.x on the Raspberry Pi

参考资料: http://dave.cheney.net/2015/09/04/building-go-1-5-on-the-raspberry-pi

下面讲到方法在我的Pi 1 Model B(ARMv6 512MHz, 512M RAM, BCM2708)和Pi 2 Model B(ARMv7 1GHz, 1G RAM)测试通过。

步骤一: 下载Go 1.4编译器

Go1.5采用了Go开发虚拟机,所以需要Go1.4进行编译,可以直接下载编译好的二进制包: http://dave.cheney.net/paste/go-linux-arm-bootstrap-c788a8e.tbz

1
2
% cd $HOME
% curl http://dave.cheney.net/paste/go-linux-arm-bootstrap-c788a8e.tbz | tar xj

步骤二: 下载Go 1.5源码包

1
2
% cd $HOME
% curl https://storage.googleapis.com/golang/go1.5.src.tar.gz | tar xz

步骤三: 配置环境,开始build

Go 1.5编译需要设置个别参数来保证编译过程顺利。

降低默认堆栈大小从8MB改为1MB

这是因为runtime测试时会创建很多系统线程,每个线程8MB,会突破32位用户模式地址空间。

1
2
3
% ulimit -s 1024  # set the thread stack limit to 1mb
% ulimit -s       # check that it worked
1024

增加scaling因子来避免测试超时

默认scaling因子针对amd64的设备很适用,但是对于32位机器来说太激进了。可以通过参数GO_TEST_TIMEOUT_SCALE来调整。

步骤四: Build

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
% cd $HOME/go/src
% env GO_TEST_TIMEOUT_SCALE=10 GOROOT_BOOTSTRAP=$HOME/go-linux-arm-bootstrap ./all.bash
# Building C bootstrap tool.
cmd/dist

# Building compilers and Go bootstrap tool for host, linux/arm.
lib9
libbio
liblink
...
##### ../test

##### API check
Go version is "go1.5", ignoring -next /home/pi/go/api/next.txt

ALL TESTS PASSED

---
Installed Go for linux/arm in /home/pi/go
Installed commands in /home/pi/go/bin

在我们的设备上测试,整个build过程很漫长,一个小时以上。

最后,把$HOME/go添加到$PATH环境中,然后可以删除$HOME/go-linux-arm-bootstrap目录,以便节省树莓派的磁盘空间。