太原理工大学嵌入系统实验报告文档格式.docx
《太原理工大学嵌入系统实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《太原理工大学嵌入系统实验报告文档格式.docx(20页珍藏版)》请在冰点文库上搜索。
![太原理工大学嵌入系统实验报告文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/7/aeab59db-a87d-4a22-8336-ae4b3de5f842/aeab59db-a87d-4a22-8336-ae4b3de5f8421.gif)
1.熟悉ARM虚拟平台Skyeye的搭建
2.熟悉交叉编译开发环境的搭建
3.熟悉编译ARM-Linux
4.熟悉在Skyeye平台上仿真ARM-Linux
5.拓展:
尝试移植其他版本的Linux,并且在Skyeye上运行
二、实验内容和原理
本实验是通过在PC机上搭建嵌入式开发环境虚拟环境(Skyeye),熟悉嵌入式交叉编译开发环境以及ARM-Linux系统移植的主要步骤。
实验虚拟平台SMDK2410
vCPU三星S3C2410(ARM920T),核心频率为62.400MHz,I-Cache16K,D-Cache16K
v内存32MB,内存频率62.400MHz
三、主要仪器设备
硬件:
a.PC机
软件:
a.VMwareworkstation9.0
b.Ubuntu10.04LTS
c.skyeye-1.2.5_REL.tar.gz
d.skyeye-testsuite-1.2.5.tar.bz2
e.arm-linux-gcc-3.4.1.tar.bz2
f.linux-2.6.14.tar.gz
g.cpp-4.1_4.1.2-27ubuntu1_i386.deb
h.g++-4.1_4.1.2-27ubuntu1_i386.deb
i.gcc-4.1_4.1.2-27ubuntu1_i386.deb
j.gcc-4.1-base_4.1.2-27ubuntu1_i386.deb
k.libstdc++6-4.1-dev_4.1.2-27ubuntu1_i386.deb
四、操作方法与实验步骤
1、安装虚拟机VMwareworkstation8.0
2、安装ubuntu10
3、安装使用gcc4.1版本编译器(编译Skyeye需要低版本gcc)
将相关安装包复制到虚拟机的相关目录,随后在命令行执行sudodpkg-i*.deb指令就可以成功安装相关编译器了,安装成功后还要设置默认gcc版本update,命令行输入相关指令后结果如下:
4、参考安装SkyEye
依次按照指导书操作输入指令后测试结果如下:
5、安装交叉编译环境(内核编译做准备)
将arm-linux-gcc-3.4.1.tar.bz2解压缩并复制到/usr/下。
6、编译内核
依据实验指导书的指导操作最后测试结果如下:
五、实验结果与分析
实验中我遇到了不少的报错,以下是我记录下来的几个
1、交叉编译器安装错误编译器未放入/usr/目录下,复制到/usr/目录后问题得到了解决。
2、交叉编译器虽复制到了/usr/目录下但仍存在不明错误,重新安装编译器后问题得到解决。
3、在试验最后输入skyeye–evmlinux出现了在测试过程中卡顿不能通过的情况,原因是往前在命令行中输入的指令前面未加sudo而导致权限不够以至于不能通过。
六、讨论、心得
实验一在这几个试验中算是最简单的,但我花的时间确实最多的,可能是因为初次接触在命令行状态下用指令来完成相应操作,十分不熟悉吧!
反正在第一次实验过程中一直是一脸茫然的状态,对各种命令行的操作不明白、不理解,在试验过程当中遇到了不少非常简单却把我难了好几天的问题,最后还是在同学大神的帮助下才终于将问题一一解决。
所以有了实验一的各种问题的经验,我在接下来的试验中还算顺利,而且这也使我认识到了当遇到超出自己能力范围的问题时要尽早寻求帮助,问题的解决过程也是知识的学习过程。
实验二嵌入式程序的开发与根文件系统的搭建
1.熟悉利用busybox建立ARM-Linux根文件系统(initrd)
2.熟悉修改现有根文件系统(initrd)的方法
3.熟悉利用交叉编译环境编译简单的C语言程序
4.将自己写好的C语言程序,进行交叉编译,写入根文件系统,并在实验一中搭建的虚拟环境中运行,显示正确的结果
5.回答后面遇到的4个问题
根文件系统就是一种目录结构,根文件系统就是要包括Linux启动时所必须的目录和关键性的文件,例如Linux启动时都需要有init目录下的相关文件,在Linux挂载分区时Linux一定会找/etc/fstab这个挂载文件等,根文件系统中还包括了许多的应用程序bin目录等,任何包括这些Linux系统启动所必须的文件都可以成为根文件系统。
利用BusyBox搭建根文件系统。
BusyBox是一个集成了一百多个最常用linux命令和工具的软件。
BusyBox包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例如grep、find、mount以及telnet。
这样的集合可以替代大部分常用工具比如的GNUfileutils,shellutils等工具,BusyBox提供了一个比较完善的环境,可以适用于任何小的或嵌入式系统。
将自己编译的程序保存到根文件系统中的目录下,就可以在嵌入式虚拟环境中运行。
a.实验一搭建好的嵌入式虚拟平台
b.busybox-1.19.4.tar.bz2
c.helloword.c
k.gcc-4.1_4.1.2-27ubuntu1_i386.deb
l.gcc-4.1-base_4.1.2-27ubuntu1_i386.deb
1、编译busybox
A.修改Makefile中的arch和编译工具链头
B.makemenuconfig修改编译配置选项
C.make编译报错如下
①
解决方法:
在命令行输入makemenuconfig而后按如下步骤修改
BusyboxSettings---->
BusyboxLibraryTuning---->
[]SupportinfinibandHW
修改后再次输入make编译
②
解决方法:
LinuxSystemUtilities---->
[]mkfs_ext2
修改后继续键入make编译
③
LinuxSystemUtilities---->
[]mkfs_vfat
到此,编译通过。
2.制作initrd.img
A.创建映像文件并挂到initrd目录
B.添加busybox到此映像文件
C.拷贝busybox需要的动态库到initrd/lib目录
D.创建必要的目录
创建脚本文件etc/inittab
创建脚本文件etc/init.d/rsC
3.测试initrd.img结果如下
五、实验中遇到的几个问题
1.实验中遇到几个报错见以上步骤部分。
2.为什么要修改busybox的属性?
答:
必须要修改busybox属性是因为如不修改在busybox中很多命令会受到限制。
比如:
$susu:
mustbesuidtoworkproperly
3.为什么busybox需要动态库?
因为没有动态库会导致接下来无法运行,如在这步initstarted:
Busyboxv1.9.2会提示找不到init!
4.如果现有initrd.img容量不够,如何扩容?
答:
可以通过在命令行输入改变后的下列语句进行扩容
#ddif=/dev/zeroof=initrd.imgbs=1kcount8192
实验二相对比较顺利,其中虽然也出现了几次报错但都是常规性的错误,在XX了相关的问题后很快就得到了解决没有耽搁太多的时间,分析一下出问题的地方还是多在make编译的时候出错,其中老师也给出了一部分常见问题的解决方案,可是我好像都完美的错过了老师给出的几个出错点,而在其他方面栽了跟头,所以说在操作过程中错误真是各种各样千变万化啊!
所以我们要养成记录问题及其解决方法的习惯,因为这将是十分宝贵的经验,毕竟某些错误出场率不高。
实验三arm-linux添加网络驱动程序
1.熟悉虚拟平台添加网卡驱动程序的步骤
2.通过在虚拟机下实现SkyEye虚拟平台的NFS访问,验证添加的驱动程序正确性
通过在ARM-Linux中添加CS8900a网卡驱动程序,实现嵌入式虚拟环境具备网络功能。
验证网卡工作是否正常。
在虚拟机中增加NFSServer,并且添加共享目录。
通过ARM-Linux映射NFSServer的共享目录,实现读、写和执行等操作。
如果读、写以及执行操作正常说明网卡驱动程序添加成功。
NFS是一种使用于分散式文件系统的协定,由SUNMicrosystems公司开发,于1984年向外公布。
NFS的功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据。
通过NFS,应用和程序可以像访问本地文件一样访问远端系统上的文件。
实现NFS对于调试嵌入式环境下的应用程序有很大帮助。
l.busybox-1.19.4.tar.bz2
1.进入内核目录
(1)为内核添加cs8900(见附件)网卡驱动,以支持NFS挂接
(2)修改drivers/net/arm目录下的Kconfig文件,在最后添加如下:
(3)修改drivers/net/arm目录下的Makefile文件,在最后添加如下内容:
(4)修改arch/arm/mach-s3c2410/mach-smdk2410.c在此文件中找到smdk2410_iodesc[]结构数组,添加如下如下内容:
并且添加一个头文件引用:
#include<
asm-arm/arch-s3c2410/smdk2410.h>
(5)在include/asm-arm/arch-s3c2410目录下创建文件smdk2410.h,内容如下:
7、制作根文件系统initrd.img(InitialRAMdisk)
8、虚拟机中ubuntu添加NFSServer
(1)在arm-linux的宿主机里配置NFSServer,配置结果如下图示:
(2)编辑文件/etc/exports,内容如下(具体需求由你而定),如下图:
(3)安装并重启nfsserver
(4)管理员身份启动skyeye,运行arm-linux为其配置ip
(6)测试结果最终如下图所示
五、报错及解决方法
1、实验的make过程出现了如下报错,原因是smdk2410.h中内容填写有误具体是少写了几个空格。
实验三总的来说是三个实验当中最难的也是最容易出错的,其中我发现了一个问题就是在配置NFSServer过程中的代码#apt-getinstallnfs-kernel-server与#apt-getinstallnfs-common不能正常执行,后来询问同学后知道这个命令有问题,需要在有网的条件下才能运行,但我尝试过后依然难以运行,最后还是通过dpkg指令将nfs-kernel-server与nfs-common安装成功的,其中在安装过程中由于几个软件之间有相互依赖的关系,再单独安装时如果不注意安装顺序会使得软件安装不完全,所以最终我采用sudodpkg-i*.deb将几个软件顺利安装。
还有在操作过程中我也遇到了因为粗心导致命令输错而报错耽误时间的问题,给我一个教训是在命令输入过程中要细心,因为可能就因为一个空格就会浪费很多时间。
而且在最后测试时也出了错误其原因是在操作过程中网络没有连接,导致arm-linux与宿主机不能通信而出现失误,其他的基本还算顺利。
实验四内核与根文件系统烧写实验
1.熟悉内核与根文件系统的烧写过程
在宿主机内核和根文件系统编译完成之后,就可以在开发板进行烧写过程。
本次实验烧写的uboot、kernel以及(system)rootfs都已经给定。
参考资源:
kernel.img
system.img
1.制作可用于烧写的SD卡(windows操作系统)。
想要在windows操作系统下制作烧写用的SD卡,则需要给SD进行分区,预留前10M给uboot。
若只需要使用SD卡启动uboot,或者在是linux操作系统(如ubuntu)下制作烧写用的SD卡,则可跳过这一步。
2.烧写SD启动的uboot(windows操作系统)。
(1)把SD卡格式化成FAT32,使用前最好先把SD卡格式化一下。
(2)打开烧写软件:
moviNAND_Fusing_Tool_v2.0。
(3)选择SD卡的盘号,选择烧写文件。
(4)点击START,弹出对话框显示成功。
3.使用sdfuse烧写系统(SD卡)
在SD卡上新建文件夹,命名为sdfuse,把需要烧写的文件放到sdfuse文件夹。
第一次烧写的话,烧写前最好先格式化一下nandflash。
单指令,自动烧写全部
sdfuse支持单条指令自动少写全部文件,uboot命令行输入以下指令:
sdfuseflashall
单个烧写文件
sdfuse支持单个烧写文件,每次更新不需要烧写全部。
(1)烧写nand启动uboot,uboot命令行输入以下指令sdfuseflashbootloaderu-boot.bin
(2)烧写Linux内核镜像,uboot命令行输入以下指令sdfuseflashkernelkernel.img
(3)烧写system分区(qtpia),uboot命令行输入以下指令,system分区需要较长时间,请耐心等待sdfuseflashsystemsystem.img
最终将内核和根文件系统烧写进了板子,由此板子可以进行触控以完成其他操作了!
实验过程中并未出现太大失误,按步骤一步步仔细操作就可以完成,但实验中有几点需要注意就是再对SD卡进行分区的时候要预留出10M的空间用于存放uboot并选择格式化后的系统类型为FAT32,而且在随后要记得把u-boot.bin复制进sdfuse文件内否则会出错。
其他,第一次烧写的话,烧写前最好先格式化一下nandflash。
实验四是比较简单的偏于硬件的操作,实验过程经过老师细心的讲解与实际演练,我在实验过程中很顺利的就完成了实验,这多亏有了老师的前车之鉴。
这实验虽然简单但实际意义很大,将内核与文件烧入板子内是十分实用的,主要是只有烧进内核后板子才能用。
其次,在试验过程中很好的达到了熟悉内核与文件系统的烧写过程,了解了在烧入过程中的应注意的方面等。