嵌入式系统导论实验报告(2)
1. 实验题目
DOL开发环境配置
2. 实验结果
(1) 实验过程
a. 安装必要环境
(在ubuntu中依次输入以下命令行语句进行安装)
更新源:
$ sudo apt-get update
安装包ant:
$ sudo apt-get install ant
安装包openjdk-7-jdk:**
$ sudo apt-get install openjdk-7-jdk
安装包unzip:
$ sudo apt-get install unzip
b .下载文件(从网站上下载压缩包)
systemc-2.3.1:
$ sudo wget
http://www.accellera.org/images/downloads/standards/systemc/systemc-2.3.1.tgz
dol_ethz.zip:
$ sudo wget
http://www.tik.ee.ethz.ch/~shapes/downloads/dol_ethz.zip
c .解压文件(在HOME文件夹中,非权限)
新建名为dol的文件
$ mkdir dol
将dol_ethz.zip解压到新建的dol文件中
$ unzip dol_ethz.zip -d dol
解压systemc
$ tar -zxvf systemc-2.3.1.tgz
d .编译systemc
解压后进入systemc-2.3.1的目录下
$ cd systemc-2.3.1
新建一个临时文件夹objdir
$ mkdir objdir
进入该文件夹objdir
$ cd objdir
运行configure(能根据系统的环境设置一下参数,用于编译)
$ sudo ../configure CXX=g++ --disable-async-updates
运行后的结果如下:
编译
$ sudo make install
编译完后文件目录如下( cd.. ls):
记录当前的工作路径(会输出当前所在路径,记下来,待会有用)
我的地址为:
/home/yangkk/systemc-2.3.1
e. 编译dol
进入dol,并修改build_zip.xml文件
$ cd ~/dol
$ sudo gedit build_zip.xml
找到systemc编译的位置,把YYY改成上页pwd得到的结果。
(对于64位 系统的机器,lib-linux要改成lib-linux64。)<property name="systemc.inc" value="YYY/include"/>
<property name="systemc.lib" value="YYY/lib-linux/libsystemc.a"/>
如图:
编译
$ sudo ant -f build_zip.xml all
编译成功视图:
f. 运行第一个例子
进入build/bin/main路径下
$ cd build/bin/main
运行第一个例子
$ sudo ant -f runexample.xml -Dnumber=1
解决方法:
打开runexample.xml找到其中关于datetime的代码语句注释掉或者删除(215-217行)即可.这里要注意gedit需要使用root权限.修改后保存.
重新编译后运行成功
(2)实验结果.dot截图
生成的.dot文件双击打开前,需要预先安装好xdot软件:
sudo apt-get install xdot
.dot展示:
3. 实验心得
(1)环境与工具
DOL(分布式操作系统)
- 实验课上的介绍:
Distributed Operation Layer :
The distributed operation layer (DOL) is a software development framework to program parallel applications. The DOL allows to specify applications based on the Kahn process network model of computation and features a simulation engine based on SystemC. Moreover, the DOL provides an XML-based specification format to describe the implementation of a parallel application on a multi-processor systems, including binding and mapping.- 维基百科上的相关介绍:
分布式操作系统,是支持分布式处理的软件。它是许多独立的,网络连接的,通讯的,并且物理上分离的计算节点的集合 。每个节点包含全局总操作系统的一个特定的软件子集。每个软件子集是两个不同的服务置备的复合物。第一个服务是一个普遍存在的最小的内核,或微内核,直接控制该节点的硬件。第二个服务是协调节点的独立的和协同的活动系统管理组件的更高级别的集合。这些组件抽象微内核功能,和支持用户应用程序。
make和Makefile工具
make 是 Linux 开发套件里面自动化编译的一个控制程序。主要被用来进行工程编译和程序链接,在比较对应文件(规则的目标和依赖)的最后修改时间之后决定哪些文件需要更新、那些文件不需要更新。进行自动化的调用 gcc 、ld 以及运行某些需要的程序进行编译的程序。
make通过一个描述了整个工程的编译、连接规则的Makefile文件里编写的编译规范(语法挺多,可以理解为一个可以运行的脚本文件)来完成并自动维护编译工作。
make自动完成的编译工作包括:
如果修改了某几个源文件,则只重新编译这几个源文件。
如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。
本次实验中用到的
$ sudo make install
,表示make从Makefile文件里读取指令后进行编译,然后实现安装。同理,$ sudo make uninstall
就是卸载。此处都没有加参数,则为默认进行源代码编译。利用make工具,可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序而言,使用make工具和makefile文件就可以清晰地理顺各个源文件之间的关系。而且如此多的源文件,如果每次都要输入gcc命令进行编译的话,对程序员来说是很难忍受的。make工具可以自动完成编译工作,并且只对程序员在上次编译后修改过的部分进行编译。因此,有效地利用make工具可以大大提高项目开发的效率。
关于Make的具体全面的用法和功能以及configure/make/Makefile的区别,请查看本报告最后的"实验参考"。
Ant
Ant是一种基于Java的build工具。与基于shell命令的扩展模式不同,Ant用Java的类来扩展。(用户)不必编写shell命令,配置文件是基于XML的,每一个XML是由一个Project组成的,而一个Project又可分成可多target,target再细分又分成很多task,每一个task都是通过一个实现特定接口的java类来完成的。
当一个代码项目大了以后,每次重新编译,打包,测试等都会变得非常复杂而且重复,因此c语言中有make脚本来帮助这些工作的批量完成。而在Java 中应用是平台无关性的,当然不会用平台相关的make脚本来完成这些批处理任务了,ANT本身就是这样一个流程脚本引擎,用于自动化调用程序完成项目的编译,打包,测试等。除了基于JAVA是平台无关的外,脚本的格式是基于XML的,比make脚本来说还要好维护一些。
Ant是Apache软件基金会JAKARTA目录中的一个子项目,它有以下的优点:
跨平台性
Ant是纯Java语言编写的,具有很好的跨平台性。
操作简单
Ant是由一个内置任务和可选任务组成的。Ant运行时需要一个XML文件(构建文件)。
容易维护和书写,结构清晰
Ant通过调用target树,就可以执行各种task。每个task实现了特定接口对象。由于Ant构建文件时XML格式的文件,所以和容易维护和书写,而且结构很清晰。
Ant可以集成到开发环境中。
由于Ant的跨平台性和操作简单的特点,它很容易集成到一些开发环境中去。
Java & JavaC
Java编译过程主要使用了Javac和Java两个命令:
JavaC
Javac用于将java文件编译成byte-code class文件。
使用方法如下:javac [options][sourcefiles][classes][@argfiles]
其中options有几个关键参数:
-d:指定编译成的class文件的存放位置。默认情况下,编译生成的class文件和源java文件在同一目录下。
-classpath(-cp):用于搜索编译所需要的class文件,指出编译所用到的class文件的位置。Java
java用于执行程序,格式如下:
java [options] classfile
其中,options一般需要指定-classpath参数,用于指定要执行的文件所在的位置以及需要用到的类的路径。
(2)Linux Ubuntu 命令行语句
sudo
sudo[substitute user [或 superuser] do],是一种程序,用于类Unix操作系统如BSD,Mac OS X,以及GNU/Linux以允许用户通过安全的方式使用特殊的权限运行程序(通常为系统的超级用户)。
系统管理员可以通过sudo 实用程序让用户或组能够作为另一个用户运行命令。 换句话说,可以分派命令特权,而不需要另一个用户的密码。
语法: sudo [-bhHpV][-s][-u <用户>][指令] 或 sudo [-klv] 参数: -b 在后台执行指令。 -h 显示帮助。 -H 将HOME环境变量设为新身份的HOME环境变量。 -k 结束密码的有效期限,也就是下次再执行sudo时便需要输入密码。 -l 列出目前用户可执行与无法执行的指令。 -p 改变询问密码的提示符号。 -s 执行指定的shell。 -u <用户> 以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份。 -v 延长密码有效期限5分钟。 -V 显示版本信息。 -S 从标准输入流替代终端来获取密码
cd
cd命令是改变子目录的命令。
格式:cd [路径] 。 cd命令只能进入当前盘符中的文件夹,改变操作的根目录(改变操作盘符),则不需用cd。 进入子目录就输入cd+空格+子目录名,想返回上一层目录,就输入cd ..(两点),cd \可以一次回到根目录。
mkdir
mkdir命令用来创建目录。该命令创建由dirname命名的目录。如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录;如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录。在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。
语法:mkdir [选项][参数] 选项: -Z:设置安全上下文,当使用SELinux时有效; -m<目标属性>或--mode<目标属性>建立目录的同时设置目录的权限; -p或--parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录; --version 显示版本信息。
rm
rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。
语法:rm [选项][参数] 选项: -d:直接把欲删除的目录的硬连接数据删除成0,删除该目录; -f:强制删除文件或目录; -i:删除已有文件或目录之前先询问用户; -r或-R:递归处理,将指定目录下的所有文件与子目录一并处理; --preserve-root:不对根目录进行递归操作; -v:显示指令的详细执行过程。
apt
apt-get 是一个下载安装软件包的简单命令行接口。
最常用的命令是update(更新) 和install(安装)。常用实例: apt-cache search packagename 搜索包 apt-cache show packagename 获取包的相关信息, 说明、大小、版本等 apt-get install packagename 安装包 apt-get install packagename - - reinstall 重新安装包 apt-get -f install 修复安装"-f = --fix-missing" apt-get remove packagename 删除包 apt-get remove packagename - - purge 删除包,包括删除配置文件等 apt-get update 更新源 apt-get upgrade 更新已安装的包 apt-get dist-upgrade 升级系统 apt-get dselect-upgrade 使用 dselect 升级 apt-cache depends packagename 了解使用依赖 apt-cache rdepends packagename 是查看该包被哪些包依赖 apt-get build-dep packagename 安装相关的编译环境 apt-get source packagename 下载该包的源代码 apt-get clean 清理无用的包 apt-get autoclean 清理无用的包 apt-get check 检查是否有损坏的依赖
gedit
gedit是一个GNOME 桌面环境下的文本编辑器,它同样也是一款自由软件。它简单易用,有良好的语法高亮,对中文支持很好,与Windows下的记事本类似。
gedit 的启动与打开文本:
gedit的启动、打开及关闭文件非常简单。可以从命令行运行 gedit,并且打开一个文件或多个文件。要从命令行打开多个文件,请键入下面的命令,然后按下回车键:
gedit file1.txt file2.txt
file3.txt另外,也可以指定一个 URI 作为文件名。
vi
- 在linux系统下关于vi的命令有很多,具体的分类以及使用方法请产看”实验参考”。
…
实验参考:
Linux工具入门:make工具与Makefile文件-Blog