主页 > 软件 > Ubuntu下交叉编译kcptun go语言源码 for openwrt

Ubuntu下交叉编译kcptun go语言源码 for openwrt

2016年12月26日 没有评论

1、安装go 1.8环境

golang从1.8开始官方支持mips32了,执行效率比之前非官方版gomini的快很多

以下操作以root用户执行,如以其他用户执行,需修改为对应路径

下载版本:

 git clone https://go.googlesource.com/go
 cd go
要安装1.8版本,先要安装1.4版本,不然会出错

 git checkout go1.4 
安装go 1.4:

 cd src
 ./all.bash
 export GOROOT_BOOTSTRAP=~/go1.4
 cp ~/go ~/go1.4 -rf 
清除环境

 cd ~/go 
 git clean -dfx
安装go 1.8:

 git checkout go1.8beta2
 cd src
 ./all.bash

安装成功后会提示:

加入路径

 export PATH=$PATH:~/go/bin
 #go version 
  go version devel +9cd3c06 Thu Dec 15 20:06:07 2016 +0000 linux/386 
设置profile

echo 'export PATH=$PATH:~/go/bin' >> /etc/profile

2、编译kcptun

设置环境变量

 export GOARCH=mips
 export GOPATH=~/go/src/gocode 
 export GOOS=linux 
 export GOROOT=~/go 
下载必要的包,需确认下载正确

 go get -v golang.org/x/crypto/pbkdf2  
 go get -v github.com/xtaci/kcp-go 
 go get -v github.com/urfave/cli 
 go get -v github.com/hashicorp/yamux
 go get -v github.com/golang/snappy 
 go get -v golang.org/x/net/ipv4 
 go get -v github.com/xtaci/kcptun/client 
 go get -v github.com/xtaci/kcptun/server 
 go get -v github.com/klauspost/cpuid 
开始编译

 cd ~
 git clone https://github.com/xtaci/kcptun.git
 cd kcptun  
 ./build-release.sh  
或者按如下方式编译

VERSION=`date -u +%Y%m%d`
LDFLAGS="-X main.VERSION=$VERSION -s -w"
env CGO_ENABLED=0 GOOS=linux GOARCH=mips go build -ldflags "$LDFLAGS" -o client_linux_mips github.com/xtaci/kcptun/client

编译完成:

编译后的软件如果在openwrt上运行出现如下错误:

root@wndr3800:/usr/bin/kcptun# ./client_linux_mips
Illegal instruction

那是因为内核中没有开启FPU

开启方法:

在openwrt的编译目录执行:

make kernel_menuconfig

选中上述选项后重新编译

 

或者也可以用gomini编译kcptun,不需要开FPU

gomini 1.4版本编译过程:

首先要看你使用的路由器cpu架构,是big还是little

https://dev.openwrt.org/wiki/platforms

big用mips,little用mipsel,ar71xx是big,小米、极路由等MT76xx是little

little编译参考:

https://github.com/xtaci/kcptun/issues/79

 

ar71xx编译过程:

git clone https://github.com/gomini/go-mips32.git
cd go-mips32/src
export GOOS=linux
export GOARCH=mips32
./make.bash
mkdir ~/kcp
cd ~/kcp

export GOPATH=~/go-mips32/src/gocode
export GOOS=linux
export GOARCH=mips32
export GOROOT=~/go-mips32
export PATH=~/go-mips32/bin:$PATH

go get -v golang.org/x/crypto/pbkdf2
go get -v github.com/xtaci/kcp-go
go get -v github.com/urfave/cli
go get -v github.com/hashicorp/yamux
go get -v github.com/golang/snappy

go get -v golang.org/x/net/ipv4

到这一步我这里提示:

ywb@ubuntu:~/kcp$ go get -v golang.org/x/net/ipv4
golang.org/x/net/ipv4
# golang.org/x/net/ipv4
../go-mips32/src/gocode/src/golang.org/x/net/ipv4/zsys_linux_ppc.go:7: sysIP_TOS redeclared in this block
previous declaration at ../go-mips32/src/gocode/src/golang.org/x/net/ipv4/zsys_linux_mips.go:7

定义重复,临时解决方法(没时间深究原因):

将此目录(~/go-mips32/src/gocode/src/golang.org/x/net/ipv4/)下除了zsys_linux_mips.go外的所有zsys_*_*.go名称改成zsys_*_*.go1:

再执行go get -v golang.org/x/net/ipv4成功,继续

go get -v github.com/xtaci/kcptun/client
go get -v github.com/xtaci/kcptun/server

VERSION=`date -u +%Y%m%d`
LDFLAGS="-X main.VERSION=$VERSION -s -w"
env CGO_ENABLED=0 GOOS=linux GOARCH=mips32 go build -ldflags "$LDFLAGS" -o client_linux_mips github.com/xtaci/kcptun/client
env CGO_ENABLED=0 GOOS=linux GOARCH=mips32 go build -ldflags "$LDFLAGS" -o server_linux_mips github.com/xtaci/kcptun/server

搞定收工

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>