2023年嵌入式系统.docx





《2023年嵌入式系统.docx》由会员分享,可在线阅读,更多相关《2023年嵌入式系统.docx(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2023年嵌入式系统 嵌入式系统 实验报告 闻悦 孙恩比 虞淦超 孙德一 滑冰 2023年1月5日 一.选题 我们组的实验题目是:将配制过并且用Open64编译过的linux操作系统移植到ebox中。 这个实验是编译原理实验和嵌入式系统实验的结合。我们的小组成员有三位选了董渊老师的编译原理专题训练。当时董渊老师对大实验给出了一个提议,用open64编译器编译busybox,并且和嵌入式系统实验相结合。我们组员感觉这将是一个很好的尝试。另外,在ebox平台上运行linux,网上鲜有现成的案例。我们觉得,虽然ebox运行Embedded WinCE已经可以满足很多商业上的需求,但是linux有它的
2、许多特点是WinCE不具备的。显然最重要的就是它的开源特性,使得功能的开发变得更加灵活,虽然可能没有WinCE容易上手,但是linux可以支持更多的CPU类型,应用的场合也较多。 新的创意往往可以激发我们的干劲。实验刚一开始,我们就为这个前所未有的挑战而激动万分,跃跃欲试。我们也很想通过实验,使得我们在学习嵌入式系统新知识的同时,尝试运用编译知识和巩固以前学过的操作系统知识,以达到使知识融会贯通、学以致用的目的。 在接下来的实验报告中,我们将主要体现嵌入式实验部分的工作。 二.实验过程 嵌入式linux操作系统的三大要素是:bootloader, kernel image和根文件系统。我们也就
3、按照这三点要素来总结我们的实验流程。 1.初选bootloader 在查阅了一些嵌入式linux的资料后,我们把bootloader的备选集定位在了lilo、grub和syslinux上面。根据我们的实验设计,我们希望首先尝试用U盘引导,之后再尝试把U盘的内容写到ebox里面引导linux。明确了需求,我们就对这些bootloader的功能和适用性进行了比较。 Lilo是Grub的前身,grub在很多功能上加强了lilo,在实验设计做好之后,我们进一步询问业内人士并且得到了一些建议:GRUB不像LILO一样使用裸扇区,而是可以从ext2或ext3文件系统中加载Linux内核。这也就是说,如果用
4、U盘做引导,lilo可能不能用,而grub是可以的。syslinux相对于grub是一个更轻量级的引导器,一般用于光盘和U盘。原本我们认为syslinux可能比grub更适合我们的实验,但是由于网上关于grub的参考更多一些,并且我们认为grub是可以胜任预期的工作。于是我们没有实验syslinux,用grub开始了我们的初期实验之旅。 2.编译配制kernel 构建一个根文件系统首先需要的就是加载一个kernel。我们将busybox集成在内核中,这样kernel启动后,再加载initramfs,就可以直接进入带shell的linux环境中了。 kernel我们选择的是Linux2.6.31
5、.6的最新版本。由于ebox使用的Vortex也是x86系统的,因此不需要交叉编译。在编译kernel的时候,我们指定的是自己的initramfs。我们的initramfs只是增加了一个init文件。init是一个hello.c文件,如下: hello.c: #include #include int main(int argc,char argv) printf(hello world, from initramfs.n); sleep(9999999); return 0; 创建一个initramfs的源文件目录image,把hello程序拷入,并改名为init。在image下,创建一个d
6、ev/console的设备文件,否则无法输出helloworld。 mknod -m 600 dev/console c 5 1 在编译kernel时,在general setup配置目录下的initramfs sources配置项下输入image的路径名。 为我们的init程序是ELF格式的,所以内核需要支持ELF的可执行文件,否则启动这个init程序会失败。在内核的 Executable file formats配置目录下,选择 kernel support for ELF binaries,则可使内核支持ELF格式的可执行文件。 在编译kernel的时候,需要配置选项。kernel中有很
7、多可选模块,makeallconfig是加载所有模块,这样做编译完kernel会很大。makenoconfig是最小化kernel。我们一开始使用的是makedefconfig,使用默认的配置。但是事实证明这是不可取的。在后来grub加载kernel中,出现了cmov问题。kernel无法加载,这是由于可能ebox的主机不支持kernel中的cmov指令。后来我们从网上查找了相关的资料。.tw/tech/os-xlinux/详细介绍了在Vortex86上的移植。我们下载了kernel,它的kernel非常小,只有2.1Mb,这个kernel是可以用的,但是缺少了硬盘驱动。我们认为可能是在配置的
8、时候,在device一块少了写什么。我们详细试验了一下几个选项的配置: Generic Driver Options,Block devices,SCSI device support,Serial ATA and Parallel ATA drivers,Multi-device support (RAID and LVM),Input device support,ATA/ATAPI/MFM/RLL support,经过反复的调试,但是硬盘识别的问题还是没有解决,在进入根目录后,没有找到hd0或是sda文件夹,我们也很困惑。不知道是不是将busybox集成带来的问题。 3.内核中集成Bus
9、ybox构造根文件系统 一个简单的内核运行在ebox中是没有意义的,我们进而考虑了如何利用busybox构造基于linux的嵌入式根文件系统。Busybox是一种可以提供很多标准的Unix工具的开源软件,它是专门为linux量身打造的一个轻便的软件包,对于嵌入式系统来说是十分合适的。busybox的使用也是我们此次实验与编译原理专题训练相结合的地方,编译实验要求我们利用目前还不完善的Open64编译器对Busybox源码进行编译,这部分在这里不多说。 在构建根文件系统之前,我们并没有使用busybox,而是尝试构建一个最简单的根文件系统。经过查阅资料,我们发现在编译linux内核的过程中,可以
10、将文件系统部分直接编译到内核当中,这样在内核加载到内存中的时候,文件系统也会相应的随之加载。于是仿照一般的linux的文件系统的目录结构,我们尝试构建自己的文件目录(dev, sys, bin等)。linux内核成功加载之后,会首先运行一个根目录中的名字为init程序,于是我们写了一个打印helloworld的程序,编译之后生成名字为init的可执行文件。然后在qemu模拟器中运行,可以看到在内核加载完毕之后在屏幕上打印helloworld,初期的尝试性工作完成。 关于Busybox使用的第二个步骤是尝试将Busybox编译到内核当中,其中涉及到得问题是如何编译与安装Busybox。在安装Bu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 嵌入式 系统

限制150内