分类: 嵌入式
2016-05-18 10:39:13
主机操作系统 ----Win10企业版
虚拟机软件 ----Vmware@workstation 10.0.4 build 2249910
虚拟机操作系统 ---- Win7 32bit 旗舰版
---- Ubuntu 14.04 LTS(GNU/Linux 3.13.0-24-generic i686)
控制台软件 ----SecureCRT 5.1.2 build 274
开发板 ----九鼎科技X210BV3S
三星官方在开发S5PV210时使用交叉工具链是arm-2009q3.tar.bz2,因此我们也选择这个工具链,避免编译过程中出现一些莫名奇妙的问题。
虽然Ubuntu自带有gcc编译器,但gcc的编译结果仅适用;我们编写的程序要在ARM上运行,因此应安装使用arm-linux-gcc(适用于 )。
1)将arm-2009q3.tar.bz2拷贝到U盘中,将U盘插到电脑上,Ubuntu会检测到U盘插入,自动连接成功。
2)在Ubuntu中执行
$ sudo su
# fdisk –l 可见U盘的盘符是sdb1,FAT32格式
# mount –t vfat /dev/sdb1 /mnt 挂载U盘到/mnt
# ls 查看U盘中的内容,里面有arm-2009q3.tar.bz2
*******2016.5.18*************
在笔记本上安装交叉编译工具时,由于Vmware+linux和win7的共享文件夹winshare已经设置成功,故将arm-2009q3.tar.bz2放在winshare文件夹下,然后继续进行下一步,也安装成功。
******************************************************
3)在Ubuntu中执行
#mkdir /usr/local/armtoolchain 创建arm-2009q3.tar.bz2解压的目标文件夹
#cd /usr/local/armtoolchain
#tar –jxvf /mnt/arm-2009q3.tar.bz2 将arm-2009q3.tar.bz2解压armtoolchain文件夹
#cd arm-2009q3/bin
#./arm-none-linux-gnueabi-gcc –v 打印版本信息,看到gcc version 4.4.1 表明安装成功
# umount /dev/sdb1 弹出U盘
1)使用linux自带的GCC编译
在/home/eric下执行
$vi
hello.c 创建一个Hello World程序(vi中使用:wq保存退出)
$gcc hello.c –o hello.o 编译hello.c,指定目标文件名为hello.o
$./hello.o 执行hello.o,打印运行结果
2)使用arm-none-linux-gnueabi-gcc编译
在/home/eric下执行
$arm-none-linux-gnueabi-gcc Hello.c
-o Hello.o
提示Command not found,原因是linux系统找不到arm-none-linux-gnueabi-gcc的位置(位于/usr/local/armtoolchain/
arm-2009q3/bin)
$echo $PATH 打印当前环境变量(linux在执行命令时的搜索路径),没有/usr/local/armtoolchain/ arm-2009q3/bin
$export PATH=/usr/local/armtoolchain/ arm-2009q3/bin:$PATH
将/usr/local/armtoolchain/arm-2009q3/bin 添加到环境变量中(这是临时添加,exit 当前账户后,该设置就无用了,再次进入当前账号,也是无用了)
$echo $PATH 可见/usr/local/armtoolchain/arm-2009q3/bin 已添加到环境变量中
$arm-none-linux-gnueabi-gcc Hello.c -o Hello.o
$ls 编译成功,输出Hello.o
$./Hello.o 提示Exec format error,说明arm-none-linux-gnueabi-gcc不适用X86的linux,仅适用于ARM
3)存在的问题
一是使用export添加环境变量是临时的,有没有永久的方法?解决方法见3.1
二是arm-none-linux-gnueabi-gcc名字太长,能不能改用短一点的名字?解决方法见3.2和3.3
3.1)添加永久环境变量
在root用户下执行
# vi /etc/profile
最后一行增加export PATH=”/usr/local/armtoolchain/arm-2009q3/bin$PATH”,然后:wq退出
#source /etc/profile profile立刻生效,没有报错说明添加成功
#echo $PATH 可见/usr/local/armtoolchain/arm-2009q3/bin已被添加
重新登陆linux eric后,执行
$echo $PATH 可见/usr/local/armtoolchain/arm-2009q3/bin依然存在,说明永久添加成功
3.2)为arm-none-linux-gnueabi-gcc指定别名
在root用户下执行
# vi /etc/profile
最后一行增加alias armgcc=’ arm-none-linux-gnueabi-gcc’,然后:wq退出
#source /etc/profile 没有报错说明添加成功
重新登陆linux eric后,执行
$alias 可见 alias armgcc=’ arm-none-linux-gnueabi-gcc’,说明添加成功
$cd hello
$armgcc
Hello.c -o Hello.o
$ls
可见已经编译成功,输出Hello.o
3.3 为arm-none-linux-gnueabi-gcc建立软连接
在/usr/local/armtoolchain/ arm-2009q3/bin路径下执行
$vi mk-arm-linux-.sh
录入以下内容,保存后退出
点击(此处)折叠或打开
然后
$sudo su
$source mk-arm-linux-.sh
$ls //可以看到建立软连接
$ls –s //可以看到建立软连接
退出root,转到eric
$cd hello
$arm-linux-gcc Hello.c -o hello.o
$ls
可见已经编译成功,输出hello.o