嵌入式操作系统实验一建立交叉编译环境文档格式.docx

上传人:b****1 文档编号:5314434 上传时间:2023-05-04 格式:DOCX 页数:13 大小:535.12KB
下载 相关 举报
嵌入式操作系统实验一建立交叉编译环境文档格式.docx_第1页
第1页 / 共13页
嵌入式操作系统实验一建立交叉编译环境文档格式.docx_第2页
第2页 / 共13页
嵌入式操作系统实验一建立交叉编译环境文档格式.docx_第3页
第3页 / 共13页
嵌入式操作系统实验一建立交叉编译环境文档格式.docx_第4页
第4页 / 共13页
嵌入式操作系统实验一建立交叉编译环境文档格式.docx_第5页
第5页 / 共13页
嵌入式操作系统实验一建立交叉编译环境文档格式.docx_第6页
第6页 / 共13页
嵌入式操作系统实验一建立交叉编译环境文档格式.docx_第7页
第7页 / 共13页
嵌入式操作系统实验一建立交叉编译环境文档格式.docx_第8页
第8页 / 共13页
嵌入式操作系统实验一建立交叉编译环境文档格式.docx_第9页
第9页 / 共13页
嵌入式操作系统实验一建立交叉编译环境文档格式.docx_第10页
第10页 / 共13页
嵌入式操作系统实验一建立交叉编译环境文档格式.docx_第11页
第11页 / 共13页
嵌入式操作系统实验一建立交叉编译环境文档格式.docx_第12页
第12页 / 共13页
嵌入式操作系统实验一建立交叉编译环境文档格式.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

嵌入式操作系统实验一建立交叉编译环境文档格式.docx

《嵌入式操作系统实验一建立交叉编译环境文档格式.docx》由会员分享,可在线阅读,更多相关《嵌入式操作系统实验一建立交叉编译环境文档格式.docx(13页珍藏版)》请在冰点文库上搜索。

嵌入式操作系统实验一建立交叉编译环境文档格式.docx

1、虚拟硬盘尽量分配大一些,之后再扩就比较麻烦。

2、共享文件夹不要有中文路径,不然挂载后看不到中文名称文件。

3、安装操作系统时,不能断网,需要下载各种资源,不然会异常。

详细内容2:

安装gcc-4.1替换操作系统中的gcc-4.4.5,用它编译交叉编译器gcc-3.4.5和库文件glibc-2.3.2、gdb-6.5。

为了完成这样的目标,我们需要安装与脚本相关的工具,需要修改crosstool中的配置文件arm.dat以指定编译的目标位arm-linux。

需要修改crosstool中的脚本文件,指定编译的源文件和目的文件夹(后来建立),指定配置文件为gcc-3.4.5-glibc-2.3.2.dat,在该配置文件中,指定了交叉编译器和调试器、C库的版本。

最后运行脚本,实现了对GCC工具包的安装,包括gcc预处理器、汇编器、编译器、链接器、调试器、反汇编工具等等。

整个实验中我们需要的资源是crosstool-0.43.tar、gdb-6.5.tar、linux-2.6.8.tar,将放置在共享文件夹的crosstool工具拷贝到主文件夹下并解压,将gbd和linux文件拷贝到crosstool文件夹,拷贝linux-2.6.8.tar是因为编译时需要内核文件。

实验步骤

实验准备:

在实验准备中,在安装完增强工具包(安装vmwaretools实现与XP文件共享)并重启之后,需要实现对共享文件夹的自动挂载,只需要修改etc目录中的配置文件rc.local,rc.local是很多linux系统管理员的偏爱,因为凡是需要随系统自动启动的服务、程序等,都可以放在里面。

$sudomkdir/mnt/share

$sudomount-tvboxsfembedded/mnt/shared

上面三句话实现了将共享文件夹embeded挂载到了share上。

gedit/etc/rc.local

将第2句命令添加在exit之前,实现了自动挂载功能。

一、搭建编译环境

1、安装于脚本运行相关及其他的工具bison、flex、build-essential、patch、libncurses5-dev。

$sudoapt-getinstallbisonflexbuild-essentialpatchlibncurses5-dev运行如下:

相关:

Linux下有一个SUDO命令,使得普通用户能够行使超级用户的部份权利,

在/etc/sudoers中设置了可执行sudo指令的用户。

若其XX的用户企图使用sudo,则会发出警告的邮件给管理员。

用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。

apt-get一个下载的命令参数有install安装update更新remove移除check检查。

比如:

sudoapt-getinstallsamba-3.0-7下载并安装一个名字为samba-3.0-7的程序

在UNIX早期时代,编写一个编译器是一件非常耗时的工作。

人们为了简化开发过程,开发了Lex和YACC程序来解决第一个任务,根据用户描述的语言,生成能够解决问题的C/C++语言代码,供开发者使用。

将源代码文件分解为各种词汇(Lex);

找到这些词汇的组成方式(YACC);

GNU软件协会开发了Flex和BISON,其功能与LEX和YACC基本兼容,并且在Lex和YACC提供的功能的基础上进行了各种扩展。

FLex能够将输入数据流分类为各类词汇,为后来的语法分析做准备

Bison该文件本质上就是一个C语言的源代码,作用就是对输入文件进行语法分析。

GNUBison在Linux下的安装非常简单。

你可以去它的官方网站上下载安装包自行安装,ubuntu系统下更简单的方法同样是直接在命令行敲入命令实现。

Ubuntu缺省情况下,并没有提供C/C++的编译环境,因此还需要手动安装。

如果单独安装gcc以及g++比较麻烦,幸运的是,Ubuntu提供了一个build-essential软件包。

查看该软件包的依赖关系,可以看到以下内容:

$apt-cachedepends"

build-essential"

build-essential

Depends:

libc6-dev

<

libc-dev>

Depends:

gcc

g++

make

dpkg-dev

也就是说,安装了该软件包,编译c/c++所需要的软件包也都会被安装。

因此如果想在Ubuntu中编译c/c++程序,只需要安装build-essential软件包就可以了。

可以推测我们实验中的gcc-4.4.5就是在安装这个软件包时安装的。

用makemenuconfig配置linux内核,要安装libncurses5-dev套件。

2、更换sh

更换shell语言解释器

$sudomv/bin/sh/bin/sh.old//备份解释器

$sudoln-sfbash/bin/sh//更改软链接,规定使用bash对脚本进行解释

$echo$SHELL运行如下:

//显示环境变量的值

ln是linux中一个非常重要命令。

它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:

ln-s源文件目标文件。

当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。

我们输入gcc时,执行的就是它的链接。

用ls-l命令去察看,可以看到link的路径了。

Ubuntu默认使用dash,而不是bash,这是因为由于dash更小,运行更快,还与POSIX兼容而crosstool脚本运行需要用bash进行解释。

需要把Ubuntu默认的dash改为bash。

表现为/bin/sh软链接到了/bin/dash,而不是传统的/bin/bash。

echo$SHELL功能是显示获知环境变量$SHELL的值。

何谓环境变量?

在所处的环境中,那些供系统或应用程序取用而固定存在的一种特殊变量。

称之.环境变量可由系统预定或由您自行定义及修改,又称为整体变量.也就是说:

不管你身处何方,这些变量的值都跟着你的环境而存在。

常见的环境变量:

$SHELL使用哪一种shell

$TERM终端机的型态

$MAIL邮件收件位置

$PATH程序搜寻路径。

3、更换gcc

$gcc-v//查看当前的GCC版本信息显示如下:

gccversion4.4.5

我们需要用gcc-4.1版本来生成交叉编译器。

$sudoapt-getinstallgcc-4.1//获取并安装gcc-4.1

lsgcc*//使用通配符,显示usr/bin目录下与gcc有关的目录

Filegcc//file是检测文件类型的命令,显示当前的gcc指向gcc-4.4编译器

rmgcc//删除gcc命令

lsgcc*//看到,已经没有了gcc

ln-sgcc-4.1gcc//建立从gcc到gcc-4.1的链接

Lsgcc*//新的gcc

gcc-v/查看新的编译器版本信息,显示已经更换到了gcc-4.1

2、准备相关资源

$mkdir/home/ww/embedded//在主文件夹下建立一个文件夹

$cd/home/ww/embedded//进入该文件夹

$cp/mnt/shared/crosstool-0.43.tar.gz./将crosstool工具拷贝到这个文件夹并解压

$tar-xvzfcrosstool-0.43.tar.gz

$cdcrosstool-0.43

$cp/mnt/shared/gdb-6.5.tar.bz2./

$cp/mnt/shared/linux-2.6.8.tar.bz2.///进入工具文件夹,并把gdb和内核文件拷贝进来,以供脚本运行时使用。

3、修改配置文件

Crosstol工具要想在本机上顺利运行必须修改其配置文件,也就是做一下移植。

表现为修改编译的目标,告诉它源文件在哪,编译到什么地方,编译什么版本的gcc和C库函数。

1、修改arm.dat,指定编译目标为:

TARGET=arm-linux

geditarm.dat//使用gedit比使用vi要方便的多

 

2、修改demo-arm.sh。

指定源文件所在的位置和编译结果存放的位置

Geditdemo-arm.sh

在执行过程中创建这个文件夹会出现权限错误,需要用管理员权限创建目标文件夹,并修改文件属性,命令如下:

$sudomkdir/opt/crosstool//建立文件夹

$sudochmod777/opt/crosstool//修改读写属性

Ubuntu的许多操作是在终端中进行的在图形界面上,我们可以通过属性中的权限选项夹进行操作。

但是一旦文件的属性显示当前用户没有读写权力时,无法在图形界面上修改权限。

,通过sudo命令管理的文件是由root持有权限的,一般用户是无法改变的。

常用方法如下:

sudochmod600×

×

(只有所有者有读和写的权限)

sudochmod644×

(所有者有读和写的权限,组用户只有读的权限)

sudochmod700×

(只有所有者有读和写以及执行的权限)

sudochmod666×

(每个人都有读和写的权限)

sudochmod777×

(每个人都有读和写以及执行的权限)

3、修改要编译的gcc版本和库文件版本。

选用gcc-3.4.5-glibc-2.3.2,在最后一行前加上#表示注释。

geditgcc-3.4.5-glibc-2.3.2.dat查看要编译的gcc/glibc/gbd版本

4、开始编译

$cpdemo-arm.sharm.sh//备份脚本

$./arm.sh/开始运行脚本,编译。

过一段时间之后,查看安装了哪些工具:

$ls/opt/crosstool/gcc-3.4.5-glibc-2.3.2/arm-linux/bin

相当于手工安装了gcc、库文件、二进制开发包binutil、gbd等工具

5、配置环境变量

为了不使你每次使用交叉编译工具的时候都要输入绝对路径,你需要配置环境变量,将你的交叉编译工具存放的位置的路径增加到PATH变量中:

$vim~/.bashrc用VI编辑器打开bashrc文件

增加如下一行:

ExportPATH=${PATH}:

/opt/crosstool/gcc-3.4.5-glibc-2.3.2/arm-linux/bin

添加程序搜索路径。

类似于在编译环境中添加头文件路径一样,系统自动会在添加的路径中自动寻找目标。

刷新bashrc

$source~/.bashrc

6、编译程序,测试安装的正确性

1.编写hello.c

$arm-linux-gcchello.c//编译该源程序

可看到输出了ARM体系结构下的可执行文件,格式为ELF,当前的X86是没法办运行的,交叉编译,面向不同的处理器。

收获:

1、虚拟机的安装流程,共享文件夹的自动挂载,及添加自启动指令的方法。

2、学会了如何利用crosstool脚本安装交叉编译环境,课堂上讲了如何手工安装gcc/库文件/binutil开发包,加上嵌入式系统设计实验课上直接获取GUN工具链,基本掌握了三种建立交叉编译环境的方法。

3、Linux的基本指令如:

cdlscprmmkdirexittarfile连接指令ln超级用户指令sudo获取安装指令apt-getinstallmv更新系统指令sudoaptitudeupdate、获取变量值echo通配符的使用,cd+..tab、

4、设置环境变量的方法,可以大大方便开发,而且对指令的运行,有了更深的认识。

可以想象,cd/ls/cp等这些在usr/bin中的基本应用程序的路径已经添加在了PATH中。

这样用户在中断中输入的时候,内核可以找到这个程序并执行。

5、接触了两种不同的脚本命令解释器。

6、利用ln链接和环境变量都可以方便开发,但是降低了可读性,增加了理解难度

7、学会使用sudochmod修改文件夹的属性

8、VI指令:

i插入、dd删去一行,shift+zz保存并退出。

Delete删除字符。

9、对于编辑类的工作,gdit更好用

10、新建虚拟机就是新买了一台机器,其实就是在硬盘里多了两个文件夹,一个配置文件夹,一个虚拟机文件夹,删掉之后就什么都没了。

11、为什么使用交叉开发?

嵌入式系统多采用交叉编译的方式,在本机编译好的程序是不能在本机运行的,需要通过特定的手段(例如烧写,下载等)安装到目标系统上执行。

这种编译运行的方法比较繁琐,是受到实际条件限制的。

大多数的嵌入式系统目标板系统资源都很有限,无论是存储空间还是CPU处理能力,都很难达到编译程序的要求。

而且很多目标板是没有操作系统的,需要通过其他的机器编译操作系统和应用程序。

12、交叉开发又为什么选择LINUX?

按照直觉的想法,开发嵌入式linux程序主机当然用linux系统,没错,直觉是正确的。

只有每天使用linux,你才能不断的了解linux,才能成为一个优秀的嵌入式linux开发人员。

这是最重要的

windows上一个的问题是缺少GNU的工具链,虽然有的公司和开源社区发布了windows下的GNU工具链。

但他们往往更新较慢,而且也未必可靠。

cygwin提供了一个linux的模拟环境,在上面可以建立嵌入式linux工具链,但它依然更新较慢,可靠性依然可能是一个问题。

Linux环境下有完整的而强大GUN的开发工具链。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2