预备实验:交叉编译环境建立

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

预备实验:交叉编译环境建立
知识点储备:
1、熟练掌握shell指令:sudo 、cd 、ls、tar、pwd、vim、source、export (阅读“Linux 系统命令及其使用详解”,完成附录一“Linux指令的随堂测试”)
2、掌握添加环境变量的手段(参见附录二“关于在ubuntu下设置环境变量的三种方法”)
3、掌握编写Makefile的方法(阅读“跟我一起写Makefile”,完成附录三的“Makefile的随堂测试”)
4、关于64位ububuntu12.4系统安装32位依赖库的问题解答见附录四。

一、交叉编译的安装
步骤:(cd 切换工作目录;pwd:查看当前目录路径;exit:退出root)
1、将压缩包arm-linux-gcc-4.4.3.tar.gz存放在一个目录下,这个目录就是你等会解压缩的目录,以后这个目录就不能随便删掉了,我的存放路径是 /home/song/software,如下图,记住这个路径,等会还会用到。

(cd song后cd software)
2、使用tar命令:tar -zxvf arm-linux-gcc-4.4.3.tar.gz将software文件夹下的arm-linux-gcc-4.4.3.tar.gz解压缩安装到当前目录下如下图
通过下图可以看到解压成功了,并且解压后的文件存放在了
/home/song/software/opt/FriendlyARM/toolschain/4.4.3文件夹下,如下图所示,这个存放路径可得记住,如下图
(jack123@ubuntu:~/song/software/opt$ cd FriendlyARM
jack123@ubuntu:~/song/software/opt/FriendlyARM$ cd toolschain
jack123@ubuntu:~/song/software/opt/FriendlyARM/toolschain$ cd 4.4.3
jack123@ubuntu:~/song/software/opt/FriendlyARM/toolschain/4.4.3$ ls
jack123@ubuntu:~/song/software/opt/FriendlyARM/toolschain/4.4.3$ pwd
/home/jack123/software/opt/FriendlyARM/toolschain/4.4.3)
2:/home/jack123/software/opt/FriendlyARM/toolschain/4.4.3/bin
3、接下来配置系统环境变量,把交叉编译工具链的路径添加到环境变量PATH中去,这样就可以在任何目录下使用这些工具。

记下上一步中的安装路径,使用命令:vi
/etc/profile 编辑profile文件,添加环境变量。

(或sudo gedit /etc/bash.bashrc:if [ -d
/home/jack123/software/opt/FriendlyARM/toolschain/4.4.3 ] ; then
PATH=/home/jack123/software/opt/FriendlyARM/toolschain/4.4.3/bin:"${PATH}"
fi)
(export PATH=/opt/EmbedSky/4.3.3/bin:$PATH)
在profile中最后一行添加:
export(此处一个空格接下一行)
PATH=$PATH:/home/song/software/opt/FriendlyARM/toolschain/4.4.3/bin
这个路径就是那个bin目录所在的路径,可能你的不一样,按照你实际的目录填就可以了,如下图32行
编写完保存就好了
4、使用命令:source /etc/profile 使环境变量生效
5、在终端上输入命令arm-linux 再按Tab键,可以看到下图,说明环境变量设置成功了
6、使用命令:arm-linux-gcc -v 会出现下面的错误提示:
/home/song/software/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-gcc: 15: exec: /home/song/software/opt/FriendlyARM/toolschain/4.4.3/bin/.arm-none-linux-gnueab
i-gcc: not found
说是出现这种问题的原因是由于Ubuntu12.04用的是64位的,解决方法就是使用命令:sudo apt-get install ia32-libs 装一些32位的库
7、待安装完32位的库之后,再使用命令:arm-linux-gcc -v,这一次就成功了,如下图
8、验证,编译一个hello.c文件
使用命令:arm-linux-gcc hello.c -o hello 看是否编译成功
可见成功生成了二进制文件。

64位:这种情况是因为你的操作系统是Ubuntu 64位的,而交叉编译工具链都是32位执行程序。

要成功运行这些交叉编译工具链,需要与这些工具链相关的32位库。

安装命令如下:
1 s udo apt-get install libc6:i386 libstdc++6:i386 libncurses5:i386 zlib1g:i386
二、设备驱动的安装
在实验之前需要安装两种驱动,分别是USB转串口驱动和 USB下载驱动。

(1)USB转串口驱动
现在很多的电脑都没有串口了,对于我们开发人员来说,只能购买一个 USB 转串口,本文对 USB 转串口在ARM 开发板上的使用做一个简单的介绍:
首先我们需要安装 USB 转串口的驱动,打开设备管理器,右击端口,选择“更新驱动程序软件”如图所示:
会出现如何搜索驱动程序软件?选择“浏览计算机查找”并找到解压后的“USB转串口
驱动”目录,选择目录下的,点击进行安装,安装完成即可,若安装不成功则禁用端口,并以管理员身份运行windows 7_vista_32_64目录下的进行安装驱动。

安装完成以后,接上 USB 转串口,这时在我的电脑的设备管理器中,我们可以看到它,如下图所示:
这时我们看到的是,但有时候我们看到COM号是大于4的,改成COM1-4,
更改方案:
右键端口,选择“属性”选项,点击“端口设置”→“高级”
注意左下角的就是我们需要更改的端口号,改成COM1-4任何中的一个。

(2)UBS下载驱动
插入下载线后,设备管理器会出现其他设备,
按以上方面点击右键选择“更新程序软件驱动”选择浏览路径,选择解压后的文件路径到,并安装,选择“始终安装”。

三、代码的编写以及烧录
插入USB接口和串口转USB接口,按ARM板上RESET键
若驱动安装良好,则最上方显示串口名以及连接成功
此时出现如图程序
按a键进入下载,点击USB下载——uboot——选择对应的二进制文件即可片刻即可下载成功
附录一:随堂练习--linux 常用指令
1.利用sudo -s 指令切换到root用户
2.利用pwd显示当前路径
3.利用ls -l指令列出当前文件夹下的各个文件的属性
4.将路径切换到opt目录之下cd /opt
5.在opt目录下新建arm 文件夹,并修改属性,使其具有可读写可执行的权限创建文件夹:mkdir arm;具有可读写可执行:sudo chmod 777 /opt/arm
6.在arm 文件夹下,利用vim编写hello.c 文件,输入以下内容,并保存退出Qw 保存shift+zz 退出
7.#include <stdio.h>
main()
{printf("Hello World!\n");
}
8.在opt 目录下新建tmp文件夹,将步骤5编写的hello.c 文件拷贝到tmp文件
夹下:mkdir tmp cp -i hello.c /opt/tmp
9.将tmp 文件夹压缩为tmp.tgz (# tar cvfz tmp.tgz tmp)
10.删除tmp 文件夹rm -r tmp
11.将tmp.tgz解压缩到当前文件夹下(tar -zxvf tmp.tgz)
12.进入tmp 文件夹,利用cat、more、less 指令查看hello.c,体会区别Cat(#include <stdio.h> main() {printf("Hello World!\n");})
More(同上)less (#include <stdio.h> main(){printf("Hello World!\n");}hello.c (END))
13.利用date 指令查看当前的时间六3月 4 22:28:30 CST 2017
14.利用date 指令设置当前时间date --date 12:34:56
15.利用ps指令显示当前的进程号
PID TTY TIME CMD
5156 pts/9 00:00:00 su
5157 pts/9 00:00:00 bash
5312 pts/9 00:00:00 ps
16.利用Kill指令删除某一运行的进程bash: kill: (456) - No such process
Kill 对应PID pkill对应的com
17.利用echo指令输出一段字符串“#It is add”到hello.c 文件中
/opt/tmp# echo "#It is add">> hello.c
>输入
18.利用export 指令查看环境变量$PATH
bash:export:`/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/ usr/local/games': not a valid identifier
19.利用find命令查找/opt 目录下所有的c 文件
/opt
/opt/arm
/opt/arm/hello.c
/opt/arm/.hello.c.swp
/opt/tmp
/opt/tmp/hello.c
/opt/tmp.tgz
find /opt -name *.c
20.用ctrl+c 中止进程
CTRL-Z和CTRL-C都是中断命令,但是他们的作用却不一样.
CTRL-C是强制中断程序的执行,
而CTRL-Z的是将任务中断,但是此任务并没有结束,他仍然在进程中他只是维持挂起的状态,用户可以使用fg/bg操作继续前台或后台的任务,fg命令重新启动前台被中断的任务,bg命令把被中断的任务放在后台执行.
21.用mount 指令挂载u盘
1.在插入U盘前和插入U盘后,都输入同一个命令,检查多了哪个盘
cat /proc/partitions
这里我发现多了
8 16 7827424 sdb
8 17 7825423 sdb1
sdb是统称,所以新插入的U盘就是/dev/sdb1
2.用命令检查新的U盘的文件系统格式
root@ www :/# fdisk -l /dev/sdb
Disk /dev/sdb: 8015 MB, 8015282176 bytes
247 heads, 62 sectors/track, 1022 cylinders, total 15654848 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0001fce0
Device Boot Start End Blocks Id System
/dev/sdb1 * 62 15650907 7825423 c W95 FAT32 (LBA)
看到这里是FAT32格式。

3.mount
mount -t vfat /dev/sdb1 /media/usb
注意:
mount -t 按两次tab键会提示输入什么文件系统类型
/media/usb是我自己创建的目录
4.umount 移除//
umount /media/usb
22.试编写shell 指令脚本
vim hello.sh
进入vim后按i键,然后输入
Perl code?
1 2 #!/bin/bash
echo "Hello world!" 然后shift+z 两次(保存)
在命令行输入:chmod +x hello.sh(赋予执行权限)
运行:./hello.sh
附录二:在ubuntu 下设置环境变量有三种方法
一、临时设置
export PATH=/home/yan/share/usr/local/arm/3.4.1/bin:$PATH
二、当前用户的全局设置
$ vim ~/.bashrc ,添加行:
export PATH=/home/yan/share/usr/local/arm/3.4.1/bin:$PATH
使生效
$ source .bashrc
三、所有用户的全局设置
$ vim /etc/profile
在里面加入:
export PATH=/home/yan/share/usr/local/arm/3.4.1/bin:$PATH
使生效
$ source profile
测试当前的环境变量;
输入$ echo $PATH ,查看输出是否已包含路径
********************************************************************* *
用户登录后加载profile和bashrc的流程如下:
1)/etc/profile-------->/etc/profile.d/*.sh
2)$HOME/.bash_profile-------->$HOME/.bashrc---------->/etc/bashrc
说明:
bash首先执行/etc/profile脚本,/etc/profile脚本先依次执行/etc/profile.d/*.sh
随后bash会执行用户主目录下的.bash_profile脚本,.bash_profile脚本会执行用户主目录下的.bashrc脚本,
而.bashrc脚本会执行/etc/bashrc脚本
至此,所有的环境变量和初始化设定都已经加载完成.
bash随后调用terminfo和inputrc,完成终端属性和键盘映射的设定.
PATH变量特殊说明一下:
1、如果是超级用户登录,在没有执行/etc/profile之前,PATH已经设定了下面的路径:
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
2、如果是普通用户,PATH在/etc/profile执行之前设定了以下的路径:
/usr/local/bin:/bin:/usr/bin
********************************************************************* 关于ubuntu14.04以上版本的环境变量修改可参考:
/ITBread/p/3925014.html
/linux/14436.html
附录三 Makefile的随堂测试
1、输入书中P32的例子,运行gcc变量
2、了解Makefile中变量的赋值方法,说明“=、:=、?=、+=”的区别
3、参考书中P51页Makefile的写法,重新对P32的例子编译,并注释P52页例子中Makefile的每条语句
附录四:关于64位ububuntu12.4系统安装32位依赖库的问题解答Q:在ubuntu12.04上,要运行32的程序,需要安装32位的兼容库。

会遇到如下问题:
以前在10.04上成功安装过,方法是
sudo apt-get install ia32-libs
但是在12.04上遇到了困难,遇到下面这种错误
$ sudo apt-get install ia32-libs
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
有一些软件包无法被安装。

如果您用的是unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。

该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。

下列信息可能会对解决问题有所帮助:
下列软件包有未满足的依赖关系:
ia32-libs : 依赖: ia32-libs-multiarch
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系
网上也没有找到合适的方法。

A:安装需要的32位库,输入如下命令:
$ sudo apt-get install libc6:i386 libgcc1:i386 gcc-4.6-base:i386 libstdc++5:i386 libstdc++6:i386
Q:还是出现问题,例如还是有些安装包安装不上。

A:更新自带的源
1、更新ia32-libs软件
装好ubuntu系统后的第一见事就是替换自带的更新源,原因是系统自带的源有些在中国访问不了,可以访问的速度又特别慢。

幸好国内的一些公司和大学提供了速度不错的更新源。

下面介绍如何使用更快的更新源
方法/步骤:
1.1
备份sources.list文件(其中opt/etc-apt-source.list为备份路径):cp /etc/apt/sources.list opt/etc-apt-source.list
2.2
打开sources.list:
sudo gedit /etc/apt/sources.list
3.3
修改sources.list,将sources.list内容全部替换为以下内容:# 电子科大(教育网用户推荐)
deb /ubuntu/ precise main restricted u niverse multiverse
deb /ubuntu/ precise-backports main r
estricted universe multiverse
deb /ubuntu/ precise-proposed main re stricted universe multiverse
deb /ubuntu/ precise-security main rest ricted universe multiverse
deb /ubuntu/ precise-updates main rest ricted universe multiverse
deb-src /ubuntu/ precise main restricte d universe multiverse
deb-src /ubuntu/ precise-backports mai n restricted universe multiverse
deb-src /ubuntu/ precise-proposed main restricted universe multiverse
deb-src /ubuntu/ precise-security main restricted universe multiverse
deb-src /ubuntu/ precise-updates main restricted universe multiverse
# 中国科技大学(教育网用户推荐)
iverse multiverse
deb /ubuntu/ precise-backports restricte d universe multiverse
deb /ubuntu/ precise-proposed main rest ricted universe multiverse
deb /ubuntu/ precise-security main restr icted universe multiverse
deb /ubuntu/ precise-updates main restr icted universe multiverse
deb-src /ubuntu/ precise main restricted universe multiverse
deb-src /ubuntu/ precise-backports main restricted universe multiverse
deb-src /ubuntu/ precise-proposed main restricted universe multiverse
deb-src /ubuntu/ precise-security main r estricted universe multiverse
estricted universe multiverse
# 北京理工(教育网用户推荐)
deb /ubuntu/ precise main multiverse re stricted universe
deb /ubuntu/ precise-backports main mul tiverse restricted universe
deb /ubuntu/ precise-proposed main mult iverse restricted universe
deb /ubuntu/ precise-security main multi verse restricted universe
deb /ubuntu/ precise-updates main multi verse restricted universe
deb-src /ubuntu/ precise main multiverse restricted universe
deb-src /ubuntu/ precise-backports main multiverse restricted universe
deb-src /ubuntu/ precise-proposed main
multiverse restricted universe
deb-src /ubuntu/ precise-security main m ultiverse restricted universe
deb-src /ubuntu/ precise-updates main m ultiverse restricted universe
# 163(非教育网推荐)
deb /ubuntu/ precise main restricted
deb-src /ubuntu/ precise main restricted deb /ubuntu/ precise-updates main restrict ed
deb-src /ubuntu/ precise-updates main res tricted
deb /ubuntu/ precise universe
deb-src /ubuntu/ precise universe
deb /ubuntu/ precise-updates universe deb-src /ubuntu/ precise-updates universe deb /ubuntu/ precise multiverse
deb-src /ubuntu/ precise multiverse
deb /ubuntu/ precise-updates multiverse deb-src /ubuntu/ precise-updates multivers e
deb /ubuntu/ precise-backports main restr icted universe multiverse
deb-src /ubuntu/ precise-backports main r estricted universe multiverse
deb /ubuntu/ precise-security main restric ted
deb-src /ubuntu/ precise-security main res tricted
deb /ubuntu/ precise-security universe deb-src /ubuntu/ precise-security universe deb /ubuntu/ precise-security multiverse deb-src /ubuntu/ precise-security multivers e
deb /ubuntu precise main
deb-src /ubuntu precise main
# sohu(非教育网推荐)
deb /ubuntu/ precise main restricted
deb-src /ubuntu/ precise main restricted deb /ubuntu/ precise-updates main restri cted
deb-src /ubuntu/ precise-updates main re stricted
deb /ubuntu/ precise universe
deb-src /ubuntu/ precise universe
deb /ubuntu/ precise-updates universe deb-src /ubuntu/ precise-updates universe deb /ubuntu/ precise multiverse
deb-src /ubuntu/ precise multiverse
deb /ubuntu/ precise-updates multiverse
deb-src /ubuntu/ precise-updates multiver se
deb /ubuntu/ precise-backports main rest ricted universe multiverse
deb-src /ubuntu/ precise-backports main restricted universe multiverse
deb /ubuntu/ precise-security main restri cted
deb-src /ubuntu/ precise-security main re stricted
deb /ubuntu/ precise-security universe deb-src /ubuntu/ precise-security universe deb /ubuntu/ precise-security multiverse deb-src /ubuntu/ precise-security multiver se
deb /ubuntu precise main
deb-src /ubuntu precise main
4.4
保存对source.list的修改。

更新源信息:
sudo apt-get update
重新执行
$ sudo apt-get install libc6:i386 libgcc1:i386 gcc-4.6-base:i386 libstdc++5:i386
$sudo apt-get update。

相关文档
最新文档