嵌入式操作系统实验一建
立交叉编译环境
Last updated on the afternoon of January 3, 2021
嵌入式操作系统实验报告
队友:张圣苗亚
实验内容
1、准备工作工作:安装virtualbox虚拟机工具,并安装系统、增强型工具,实现共享文件夹的自动挂载。
2、利用crosstool提供的脚本安装和相关资源编译面向的ARM的GCC工具。
详细内容1:安装虚拟机软件和虚拟机时要完成的主要步骤有:安装virtualbox,建立一台虚拟机,分配内存和硬盘,指定共享文件夹(主机和虚拟机可共同操作),指定操作系统镜像文件路径(相当于光盘,第一次启动时安装),安装虚拟操作系统,安装增强工具包,实现共享文件夹的自动挂载。
有几点需要注意:
1、虚拟硬盘尽量分配大一些,之后再扩就比较麻烦。
2、共享文件夹不要有中文路径,不然挂载后看不到中文名称文件。
3、安装操作系统时,不能断网,需要下载各种资源,不然会异常。
详细内容2需要安装与脚本相关的工具,需要修改crosstool中的配置文件以指定编译的目标位arm-linux。
需要修改需要的资源
实验步骤
实验准备:
在实验准备中,在安装完增强工具包()并重启之后,需要实现对共享文件夹的自动挂载,只需要修改etc目录中的配置文件,是很多linux系统管理员的偏爱,因为凡是需要随系统自动启动的服务、程序等,都可以放在里面。
$sudomkdir/mnt/share
$sudomount-tvboxsfembedded/mnt/shared
上面三句话实现了将共享文件夹embeded挂载到了share上。
gedit/etc/
将第2句命令添加在exit之前,实现了自动挂载功能。
实验一
一、搭建编译环境
1、安装于脚本运行相关及其他的工具bison、flex、build-essential、patch、libncurses5-dev。
$sudoapt-getinstallbisonflexbuild-essentialpatchlibncurses5-dev运行如下:
相关:
Linux下有一个SUDO命令,使得普通用户能够行使超级用户的部份权利,
在/etc/sudoers中设置了可执行sudo指令的用户。
若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。
用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
apt-get一个下载的命令参数有install安装update更新remove移除check检查。
比如:下载并安装一个名字为的程序
在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
Depends:<libc-dev>
libc6-dev
Depends:gcc
Depends:g++
Depends:make
Depends:dpkg-dev
也就是说,安装了该软件包,编译c/c++所需要的软件包也都会被安装。
因此如果想在Ubuntu中编译c/c++程序,只需要安装build-essential软件包就可以了。
可以推测我们实验中的。
用makemenuconfig配置linux内核,要安装libncurses5-dev套件。
2、更换sh
更换shell语言解释器
$sudomv/bin/sh/bin境变量可由系统预定或由您自行定义及修改,又称为整体变量.也就是说:不管你身处何方,这些变量的值都跟着你的环境而存在。
常见的环境变量:
$SHELL使用哪一种shell
$TERM终端机的型态
$MAIL邮件收件位置
$PATH程序搜寻路径。
3、更换gcc
$gcc-v将crosstool工具拷贝到这个文件夹并解压
$tar-xvzf
$
$cp./
$cp.开始运行脚本,编译。
过一段时间之后,查看安装了哪些工具:
$ls
相当于手工安装了gcc、库文件、二进制开发包binutil、gbd等工具
四、配置环境变量
为了不使你每次使用交叉编译工具的时候都要输入绝对路径,你需要配置环境变量,将你的交叉编译工具存放的位置的路径增加到PATH变量中:
$vim~/.bashrc用VI编辑器打开bashrc文件
增加如下一行:
Export
添加程序搜索路径。
类似于在编译环境中添加头文件路径一样,系统自动会在添加的路径中自动寻找目标。
刷新bashrc
$source~/.bashrc
五、编译程序,测试安装的正确性
1.编写
$/编译该源程序
可看到输出了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的开发工具链。