Chinaunix首页 | 论坛 | 博客
  • 博客访问: 129136
  • 博文数量: 38
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 191
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-16 11:31
个人简介

嵌入式新人

文章分类

全部博文(38)

文章存档

2016年(38)

我的朋友

分类: 嵌入式

2016-05-18 10:39:13

1.1 PC机配置

主机操作系统   ----Win10企业版

虚拟机软件     ----Vmware@workstation 10.0.4 build 2249910

虚拟机操作系统 ---- Win7 32bit 旗舰版

               ---- Ubuntu 14.04 LTSGNU/Linux 3.13.0-24-generic i686

控制台软件     ----SecureCRT 5.1.2 build 274

开发板         ----九鼎科技X210BV3S

1.2 交叉编译工具的选择

三星官方在开发S5PV210时使用交叉工具链是arm-2009q3.tar.bz2,因此我们也选择这个工具链,避免编译过程中出现一些莫名奇妙的问题。
虽然Ubuntu自带有gcc编译器,但gcc的编译结果仅适用我们编写的程序要在ARM上运行,因此应安装使用arm-linux-gcc(适用于 )。

1.3交叉编译工具的安装

1)将arm-2009q3.tar.bz2拷贝到U盘中,将U盘插到电脑上,Ubuntu会检测到U盘插入,自动连接成功。

2)在Ubuntu中执行

$ sudo su

# fdisk –l     可见U盘的盘符是sdb1FAT32格式

# 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.4 交叉工具链的使用

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不适用X86linux,仅适用于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

录入以下内容,保存后退出

点击(此处)折叠或打开

  1. ln arm-none-linux-gnueabi-addr2line -s arm-linux-addr2line
  2.  ln arm-none-linux-gnueabi-ar -s arm-linux-ar
  3.  ln arm-none-linux-gnueabi-as -s arm-linux-as
  4.  ln arm-none-linux-gnueabi-c++ -s arm-linux-c++
  5.  ln arm-none-linux-gnueabi-c++filt -s arm-linux-c++filt
  6.  ln arm-none-linux-gnueabi-cpp -s arm-linux-cpp
  7.  ln arm-none-linux-gnueabi-g++ -s arm-linux-g++
  8.  ln arm-none-linux-gnueabi-gcc -s arm-linux-gcc
  9.  ln arm-none-linux-gnueabi-gcc-4.4.1 -s arm-linux-gcc-4.4.1
  10.  ln arm-none-linux-gnueabi-gcov -s arm-linux-gcov
  11.  ln arm-none-linux-gnueabi-gdb -s arm-linux-gdb
  12.  ln arm-none-linux-gnueabi-gdbtui -s arm-linux-gdbtui
  13.  ln arm-none-linux-gnueabi-gprof -s arm-linux-gprof
  14.  ln arm-none-linux-gnueabi-ld -s arm-linux-ld
  15.  ln arm-none-linux-gnueabi-nm -s arm-linux-nm
  16.  ln arm-none-linux-gnueabi-objcopy -s arm-linux-objcopy
  17.  ln arm-none-linux-gnueabi-objdump -s arm-linux-objdump
  18.  ln arm-none-linux-gnueabi-ranlib -s arm-linux-ranlib
  19.  ln arm-none-linux-gnueabi-readelf -s arm-linux-readelf
  20.  ln arm-none-linux-gnueabi-size -s arm-linux-size
  21.  ln arm-none-linux-gnueabi-sprite -s arm-linux-sprite
  22.  ln arm-none-linux-gnueabi-strings -s arm-linux-strings
  23.  ln arm-none-linux-gnueabi-strip -s arm-linux-strip

然后

$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

阅读(6118) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~