当前位置:首页 » 编程软件 » linux单独编译arm

linux单独编译arm

发布时间: 2024-12-19 08:20:38

① 如何编译arm linux的go

Golang也就是Go语言,现在已经发行到1.4.1版本了,语言特性优越性和背后Google强大靠山什么的就不多说了。Golang的官方提供了多个平台上的二进制安装包,遗憾的是并非没有发布ARM平台的二进制安装包。ARM平台没办法直接从官网下载二进制安装包来安装,好在Golang是支持多平台并且开源的语言,因此可以通过直接在ARM平台上编译源代码来安装。整个过程主要包括编译工具配置、获取Golang源代码、设置Golang编译环境变量、编译、配置Golang行环境变量等步骤。
注:本文选用树莓派做测试,因为树莓派是基于ARM平台的。

1、编译工具配置
据说下个版本的golang编译工具要使用golang自己来写,但目前还是使用C编译工具的。因此,首先要配置好C编译工具:
1.1 在Ubuntu或Debian平台上可以使用sudo apt-get install gcc libc6-dev命令安装,树莓派的RaspBian系统是基于Debian修改的,所以可以使用这种方法安装。
1.2 在RedHat或CentOS 6平台上可以使用sudo yum install gcc libc-devel命令安装。
安装完成后可以输入 gcc --version命令验证是否成功安装。

2、获取golang源代码
2.1 直接从官网下载源代码压缩包。
golang官网提供golang的源代码压缩包,可以直接下载,最新的1.4.1版本源代码链接:https://storage.googleapis.com/golang/go1.4.1.src.tar.gz
2.2 使用git工具获取。
golang使用git版本管理工具,也可以使用git获取golang源代码。推荐使用这个方法,因为以后可以随时获取最新的golang源代码。
2.2.1 首先确认ARM平台上已经安装了git工具,可以使用git --version命令确认。一般linux平台都安装了git,没有的话可以自行安装,不同平台的安装方法可以参考:http://git-scm.com/download/linux
2.2.2 克隆远程golang的git仓库到本地
在终端cd到你想要安装golang的目录,确保该目录下没有名为go的目录。然后以下命令获取代码仓库:
git clone https://go.googlesource.com/go
大陆地区可能会获取失败,在不翻墙的情况下我试了几次都没成功,原因大家都懂的。好在google已经将golang也托管到github上面,所以也可以通过下面命令获取:
git clone https://github.com/golang/go.git
视网络情况,下载可能需要不少时间。我2M的带宽花了将近两个小时才下载完,虽然整个项目不过几十兆= =
下载完成后,可以看到目录下多了一个go目录,里面即为golang的源代码,在终端上执行cd go命令进入该目录。
执行下面命令检出go1.4.1版本的源代码,因为现在已经有新的代码提交上去了,最新的代码可能不是最稳定的:
git checkout go1.4.1
至此,最新1.4.1发行版的源代码获取完毕

3、设置golang的编译环境变量
主要有GOROOT、GOOS、GOARCH、GOARM四个环境变量需要设置,先解释四个环境变量的意义。
3.1 GOROOT
主要代表golang树结构目录的路径,也就是上面git检出的go目录。一般可以不用设置这个环境变量,因为编译的时候默认会以go目录下src子目录中的all.bash脚本运行时的父目录作为GOROOT的值。为了保险起见,可以直接设置为go目录的路径。
3.2 GOOS和GOARCH
分别代表编译的目标系统和平台,可选值如下:

GOOS GOARCH
darwin 386
darwin amd64
dragonfly 386
dragonfly amd64
freebsd 386
freebsd amd64
freebsd arm
linux 386
linux amd64
linux arm
netbsd 386
netbsd amd64
netbsd arm
openbsd 386
openbsd amd64
plan9 386
plan9 amd64
solaris amd64
windows 386
windows amd64
需要注意的是这两个值代表的是目标系统和平台,而不是编译源代码的系统和平台。树莓派的RaspBian是linux系统,所以这些GOOS设置为linux,GOARCH设置为arm。
3.3 GOARM
表示使用的浮点运算协处理器版本号,只对arm平台有用,可选值有5,6,7。如果是在目标平台上编译源代码,这个值可以不设置,它会自动判断需要使用哪一个版本。
总结下来,在树莓派上设置golang的编译环境变量,可编辑$HOME/.bashrc文件,在末尾添加下面内容:
export GOROOT=你的go目录路径
export GOOS=linux
export GOARCH=arm
编辑完后保存,执行source ~/.bashrc命令让修改生效。

4、编译源代码
环境变量配置完成自后就可以开始编译源代码。在go目录下的src子目录中,主要有all.bash和make.bash两个脚本(另外还有两个all.bat和make.bat脚本适用于window平台)。编译实际上就是执行其中一个脚本,两者的区别在于all.bash在编译完成后还会执行一些测试套件。如果希望只编译不测试,可以运行make.bash脚本。使用cd命令进入go下src目录,执行./all.bash或者./make.bash命令即可开始编译。由于硬件情况不同,编译耗费的时间不同。在我的B型树莓派编译过程花费了将近半个小时,编译完成后执行的测试套件又花费了差不多一个小时,总共花费了一个半小时左右。

5、配置golang运行环境变量
编译完成后,go目录下会生成bin目录,里面就是go的运行脚本。为了以后使用方法,可以将这个bin路径添加到PATH环境变量中。同样编辑~/.bashrc文件,因为前面设置过GOROOT环境变量指向go目录了,所以只需要在末尾加上
export PATH=$PATH:$GOROOT/bin
保存后同样执行source ~/.bashrc命令让环境变量生效。

至此,golang源代码编译安装成功。执行go version应该就能看到当前golang的版本信息,表示编译安装成功。

② 我是ARM初学者,请问嵌入式系统不移植操作系统用ADS编译好应用程序直接烧录行吗

单独的,用ads直接编译的程序当然能够 放入arm中执行
(指各种端口初始化什么都自己编写的,代码从初始位置开始的那种)

如果你说的应用程序是指在某个操作系统上运行的应用程序
那就不行了...

③ linuxarm开发需要全部重编译吗

不需要。
根据查询知乎网显示,在LinuxARM开发中,只需要针对新的ARM架构平台进行编译即可,与ARM架构无关的代码并不需要重新编译。

④ qemu怎样为选择arm linux内核镜像选择运行arm平台

下载Linux内核

下载内核有两种方法,一种是用git直接下载内核代码树,方便后面的内核开发。另一种是直接到内核社区下载对应版本的源码包。我采用第一种方法,但后面发现主线上3.18版本和后面版本的代码,使用这种搭建方法运行不起来。目前未查明问题的根因。如果读者想快速搭建成功,建议选用3.16版本的内核进行搭建。

安装arm的交叉编译工具链

想必做嵌入式开发的朋友,对交叉编译工具链不陌生。如果你订制一个交叉编译工具链,建议你使用crosstool-ng开源软件来构建。但在这里建议直接安装arm的交叉编译工具链:

sudoapt-getinstallgcc-arm-linux-gnueabi

编译Linux内核

生成vexpress开发板子的config文件:

makeCROSS_COMPILE=arm-linux-gnueabi-ARCH=armvexpress_defconfig

编译:

makeCROSS_COMPILE=arm-linux-gnueabi-ARCH=arm

生成的内核镱像位于arch/arm/boot/zImage,后续qemu启动时需要使用该镜像。

下载和安装qemu模拟器

其实Ubuntu12.04有qemu的安装包,但由于版本较低,对vexpress开发板支持不友好,建议下载高版本的qemu:

wget

配置qemu前,需要安装几个软件包:

sudoapt-getinstallzlib1g-dev

sudoapt-getinstalllibglib2.0-0

sudoapt-getinstalllibglib2.0-dev

配置qemu,支持模拟arm架构下的所有单板:

./configure--target-list=arm-softmmu--audio-drv-list=

编译和安装:

make

makeinstall

测试qemu和内核能否运行成功

qemu已经安装好了,内核也编译成功了,到这里最好是测试一下,编译出来的内核是否OK,或者qemu对vexpress单板支持是否够友好。

运行命令很简单:

qemu-system-arm-Mvexpress-a9-m512M-kernel/home/ivan/kernel_git/linux/arch/arm/boot/zImage-nographic-append"console=ttyAMA0"

如果看到内核启动过程中的打印,说明前的搭建是成功的。

这里简单介绍下qemu命令的参数:

-Mvexpress-a9模拟vexpress-a9单板,你可以使用-M?参数来获取该qemu版本支持的所有单板

-m512M单板运行物理内存512M

-kernel/home/ivan/kernel_git/linux/arch/arm/boot/zImage告诉qemu单板运行内核镜像路径

-nographic不使用图形化界面,只使用串口

-append"console=ttyAMA0"内核启动参数,这里告诉内核vexpress单板运行,串口设备是哪个tty。

注意:

我每次搭建,都忘了内核启动参数中的console=参数应该填上哪个tty,因为不同单板串口驱动类型不尽相同,创建的tty设备名当然也是不相同的。那vexpress单板的tty设备名是哪个呢?其实这个值可以从生成的.config文件CONFIG_CONSOLE宏找到。

如果搭建其它单板,需要注意内核启动参数的console=参数值,同样地,可从生成的.config文件中找到。

制作根文件系统

到这里是否大功告成了呢?其实在上面的测试中,你会发现内核报panic,因为内核找不到根文件系统,无法启init进程。

根文件系统要考虑两个方面:

1.根文件系统的内容

如果你看过《LinuxFromScratch》,相信你会对这一步产生恐惧感,但如果一直从事嵌入式开发,就可以放下心来。根文件系统就是简单得不能再简单的几个命令集和态动态而已。为什么LinuxFromScratch会有那么复杂,是因为它要制作出一个Linux发生版。但在嵌入式领域,几乎所有的东西,都是mini版本,根文件系统也不例外。

本文制本的根文件系统=busybox(包含基础的Linux命令)+运行库+几个字符设备

2.根文件系统放在哪里

其实依赖于每个开发板支持的存储设备,可以放到NorFlash上,也可以放到SD卡,甚至外部磁盘上。最关键的一点是你要清楚知道开发板有什么存储设备。

本文直接使用SD卡做为存储空间,文件格式为ext3格式

下载、编译和安装busybox

wget

makedefconfig

makeCROSS_COMPILE=arm-linux-gnueabi-

makeinstallCROSS_COMPILE=arm-linux-gnueabi-

安装完成后,会在busybox目录下生成_install目录,该目录下的程序就是单板运行所需要的命令。

形成根目录结构

先在Ubuntu主机环境下,形成目录结构,里面存放的文件和目录与单板上运行所需要的目录结构完全一样,然后再打包成镜像(在开发板看来就是SD卡),这个临时的目录结构称为根目录

1.创建rootfs目录(根目录),根文件系统内的文件全部放到这里

sudomkdirrootfs

2.拷贝busybox命令到根目录下

sudocpbusybox-1.20.2/_install/*-rrootfs/

3.从工具链中拷贝运行库到lib目录下

sudocp-P/usr/arm-linux-gnueabi/lib/*rootfs/lib/

4.创建4个tty端终设备

sudomknodrootfs/dev/tty1c41

sudomknodrootfs/dev/tty2c42

sudomknodrootfs/dev/tty3c43

sudomknodrootfs/dev/tty4c44

制作根文件系统镜像

1.生成32M大小的镜像

ddif=/dev/zeroof=a9rootfs.ext3bs=1Mcount=32

2.格式化成ext3文件系统

mkfs.ext3a9rootfs.ext3

3.将文件拷贝到镜像中

sudomkdirtmpfs

sudomount-text3a9rootfs.ext3tmpfs/-oloop

cp-rrootfs/*tmpfs/

sudoumounttmpfs

系统启动运行

完成上述所有步骤之后,就可以启动qemu来模拟vexpress开发板了,命令参数如下:

qemu-system-arm-Mvexpress-a9-m512M-kernel/home/ivan/qemu/linux/arch/arm/boot/zImage-nographic-append"root=/dev/mmcblk0console=ttyAMA0"-sda9rootfs.ext3

从内核启动打印,到命令行提示符出现,激动人心的时刻出现了……

写在后面的话

通过上面的步骤,搭建出来一个最小的qemu+arm开发环境,你可以上面的基础上修改内核,或者增加一些测试程序在单板上运行,甚至使用单板的flash设备。

在此,你可以做纯arm架构的内核开发,或者与架构无关的内核开发,也可以做单板相关的驱动开发。

⑤ linux编译配置好的内核,编译镜像时候出现arm-linux-:命令未找到

解决方法:
1.先打开一个超级用户权限的shell:
命令:sudo –s
2.在当前shell下,设置环境变量:
命令:gedit /etc/profile
在文件末端加上 export PATH=$PATH:/usr/local/arm/4.4.3/bin,并保存。
3. 执行source /etc/profile 这是避免重新启动ubuntu而又使刚刚修改的环境变量生效的方法。
4、再进入到/opt/FriendlyARM/mini2440/linux-2.6.32.2 目录,执行make zImage(有可能加sudo),arm-linux-gcc了,可以编译了。

热点内容
一加保存的密码在哪里 发布:2025-03-12 01:13:06 浏览:88
微信第三方平台源码 发布:2025-03-12 01:12:21 浏览:780
服务器关闭怎么补偿 发布:2025-03-12 01:01:26 浏览:333
c语言复数的四则运算 发布:2025-03-12 01:01:22 浏览:802
我的世界电脑版新的服务器 发布:2025-03-12 01:00:27 浏览:378
网站数据库设置 发布:2025-03-12 00:52:13 浏览:310
安卓是哪个企业 发布:2025-03-12 00:41:23 浏览:91
javascript还是php 发布:2025-03-12 00:41:12 浏览:697
微博抽奖算法 发布:2025-03-12 00:41:10 浏览:112
抖音的麦克风在哪里打开安卓版 发布:2025-03-12 00:35:15 浏览:122