Jetson TK1的交叉编译工具链

Jetson TK1是NV推出的非常强大的开发板。除了硬件以外,NV还提供L4T这个以Ubuntu 14.04为基础的Linux系统作为示例软件。但是,不知道何种原因,NV并没有在文档中明确指出如何对Jetons TK1的L4T发行版做交叉编译。于是,我花了一些时间研究一下这个问题并且将结果简单的记在这里。

简而言之,对于在ARM CPU上运行的代码,全部都可以采用Ubuntu Precise提供的工具链进行交叉编译。因为Debian系发行版——包括Ubuntu——很早就开始支持Multiarch,开发者需要做的仅仅是安装支持multiarch的gcc等编译工具而已。具体步骤如下:

## Create backup files
$ sudo mkdir /etc/apt/bak/
$ sudo cp /etc/apt/sources.list /etc/apt/bak/sources.list
$ sudo cp -R /etc/apt/sources.list.d/ /etc/apt/bak/

## Prevent host architecture from pollution
$ sudo sed -i "s/deb /deb [arch=amd64,i386] /g" /etc/apt/sources.list
$ sudo sed -i "s/deb /deb [arch=amd64,i386] /g" /etc/apt/sources.list.d/*

## Add debian percise repository
$ sudo sh -c 'echo "deb http://jp.archive.ubuntu.com/ubuntu/ precise main universe" >> /etc/apt/sources.list'
$ sudo sh -c 'echo "deb-src http://jp.archive.ubuntu.com/ubuntu/ precise main universe" >> /etc/apt/sources.list'

## Update apt
$ sudo apt-get update

## Install armhf toolchain
$ sudo apt-get install g++-4.6-arm-linux-gnueabihf g++-arm-linux-gnueabihf

安装结束后可有用yavta项目来做工具链的验证。

$ git clone git://git.ideasonboard.org/yavta.git
$ cd yavta
$ CROSS_COMPILE=arm-linux-gnueabihf- make

检查交叉编译的的结果。

$ file ./yavta 
./yavta: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.31, BuildID[sha1]=9d2e056f30c0e01bdab26b64c97a5647b304d131, not stripped

然后就可以将编译好的二进制文件拷贝到target系统上运行了。

因为这样的工具链仅仅可以编译在CPU上运行的代码,对于在GPU上运行的代码来说仍然是无效的。所以,要彻底得做到对CUDA代码进行编译的话,还需要做更多努力。持续探索中。

One thought on “Jetson TK1的交叉编译工具链

发表评论