嵌入式课设报告---基于U盘的LINUX操作系统_第1页
嵌入式课设报告---基于U盘的LINUX操作系统_第2页
嵌入式课设报告---基于U盘的LINUX操作系统_第3页
嵌入式课设报告---基于U盘的LINUX操作系统_第4页
嵌入式课设报告---基于U盘的LINUX操作系统_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、华北水利水电学院课程设计报告课程名称: 嵌入式系统 姓 名: 学 号: 班 级: 专 业: 电子信息工程 日 期: 2013/7/4 目 录前言-21 课程设计的目的和要求-21.1课程设计的目的-21.2课程设计的基本要求-22 前期准备-22.1基本工作原理-32.2 开机载入程序GRUB2-32.3 Busybox简介-42.4 根文件系统简介- 42.5 实验平台-52.6 实验流程-53 编译linux内核-64 制作启动盘-65 建立根文件系统-8 5.1 编译Busybox-8 5.2 建立文件系统-96 系统整合及测试-127 实验心得-127 参考文献-13 附录-13前 言

2、现在的计算机技术简直日新月异,U盘,固态硬盘等等存储介质做的可以越来越大,并越来越便宜。电脑已经不是稀罕物了,办公室,家里都有,并且还不只一台。电脑多了,给我们带来方便的同时,有时候也会弄得很麻烦。比如开发工具,写的文档,编的程序,在家里,办公室的电脑上都要装一装。很多实验室,生产线的在线控制,监测等等,这些的维护对一个技术人员来说工作量是非常的繁复。也许这些都可以随着技术的发展越来越方便。如果把操作系统装在U盘里,在家里,办公室,随便插在哪台机器上都可以启动自己的定制的桌面,工作的环境,是多么的方便啊!不必好几台机器都要同步文档,程序等等。本课程设计就是构建一个基于U盘存储的linux操作系

3、统,通过支持USB硬盘启动方式的PC机,可以启动U盘上的linux系统。1 课程设计的目的和要求1.1课程设计的目的通过本次课程设计,学会如何构建一个基于U盘存储的linux操作系统,了解linux操作系统的具体的构建过程,和linux操作系统的基本组成部分,以及掌握linux 操作系统的基本操作1.2 课程设计的基本要求(1)通过实验开发平台提供的Linux操作系统中的make等工具重新配置新内核,在功能齐全的前提下,要求所配置的内核尽量小。(2)制作一张启动盘(Boot Disk)。要求将该启动盘放于一张U盘上,用GRUB2引导程序引导,其引导内核为上面新配置的内核,同时考虑将它所引导的根

4、文件系统放于同一U盘上。(3)制作根文件系统盘。要求该启动盘也能放于同一张U盘上,并能通过上面做成的启动盘成功引导并进入系统,从而得到一个微型的Linux 操作系统。2 前期准备2.1 基本工作原理一个Boot/Root 盘实际上是一个完整系统的缩影,基本上是放于一张U盘上的一个小型而自给自足的Linux系统,它能够执行一个完整系统的大部分功能。故在制作启动盘之前,你应该了解基本的Linux 启动流程。开机后,系统执行存放在ROM中的BIOS程序,然后根据的设置BIOS决定是从硬盘还是软盘启动。若是从硬盘启动,则读入0柱面0磁头1扇区的MBR,引导系统的执行。一般在Linux OS中启动盘的0

5、柱面0磁头1扇区中装的是启动装载器GRUB2,它定位内核并装载内核,最后执行内核。如果GRUB2装在MBR(Master Boot Record),则先由BIOS 把GRUB2代码调入内存,然后跳转执行GRUB2,再装载执行内核,即:BIOS > GRUB2(在MBR中)> KERNEL;一旦内核装载完毕后,开始初始化系统所有硬件设备,当硬件设备初始化完成后,启动过程会就此停止而等待根文件系统的装载。接着,系统在根文件系统上找到init 程序并执行它,init 程序寻找它的配置文/etc/inittab、/etc/rc.S,并开始执行其中的脚本,这些脚本是一些SHELL 命令的组合

6、,用来执行下面一些命令,如加载所需的模块、装载SWAP、初始化网络、装载fstab 中列出的所有驱动器等,至此,系统启动流程完毕图 1 LINUX的启动流程2.2 开机载入程序GRUB2.0GRUB2是一个在Linux 环境下编写的引导安装(Boot Loader)程序(故其安装和配置都要在Linux下进行),其主要功能是引导Linux OS的启动。GRUB不仅可作为Linux分区的引导扇区内的启动程序,而且可放入MBR中完全控制Boot Loader的全过程。此次课程设计使用的GRUB2,主要作用是引导扇区的启动程序,加载linux内核和根文件系统。2.3 Busybox简介Busybox

7、是一个集成了一百多个最常用linux命令和工具的软件。Busybox包含了一些简单的工具,例如ls、cat、cp等,甚至还集成了一个http服务器和一个telnet服务器,而所有这一切功能却只有区区1M左右的大小。我们平时用的那些linux命令就好比是分立式的电子元件,而Busybox就好比是一个集成电路,把常用的工具和命令集成压缩在一个可执行文件里,功能基本不变,而大小却小很多倍,在嵌入式linux中,Busybox有非常广的应用,另外,大多数linux发行版的安装程序中都有 Busybox的身影,安装linux的时候按ctrl+alt+F2就能得到一个控制台,而这个控制台中的所有命令都是指

8、向Busybox的链接。Busybox的小身材大作用的特性,给制作一张软盘的linux带来了及大方便。Busybox 被称作 “The Swiss Army Knife of Embedded Linux”,Busybox实质是提供一个很小的可执行程序,通过对其的链接,可以建立其他常用的linux系统命令。它仅仅用一个可执行文件就可以提供一个基本的 Linux 操作系统所需的常用命令。不但体积小,配置起来也方便,只需很少的配置文件即可以运行。一个由 Busybox 构成的 Linux 操作系统加上内核完全可以做到只占用 2、3M 空间,甚至可以更小。 Busybox 是 Linux下的一个开放

9、源代码软件,编译的时候需要 gcc和glibc的支持,也可以用 uClibc 代替 glibc。(glibc是gnu发布的libc库,即c运行库)。所以需要保证你的开发环境是否安装了gcc,若没安装,就可以通过命令apt-get install build-essential来安装。从Busybox的官方网站 上下载Busybox的源代码。本课程设计所用的busybox版本是busybox-1.2.0.tar.bz2。2.4 根文件系统简介Windows操作系统可以将硬盘划分为C,D,E,F等各个盘分别访问,linux同理将MTD设备划分为若干个分区,在不同的分区存放不同类别的文件。与wind

10、ows的C盘类似,linux一样要在一个分区上存放系统启动所必需的文件如下图所示:根文件系统必须包含支持完整Linux 系统运行所需要的每一个项目,为此它必须至少包括能让Linux系统运行的最起码需求(即基本的文件系统构架,其它需求可在系统运行时或系统运行之后动态加载):1 最起码的目录:/dev,/bin,/sbin,/etc,/usr;2 最基本的命令文件:ash(或bash 等,shell 是必不可少的),cp,rm,ls,mkdir,cd; 3 最起码的配置文件:rc,inittab,etc.;4 最起码的设备文件:/dev/fd0,/dev/tty*,/dev/hd*,console

11、,/dev/ram0,etc.;上述文件大小远远小于4M,所用U盘大小为1G。当用U盘启动时,文件自己先解压到内存中,形成一个虚拟启动盘(Ramdisk),通过Ramdisk来控制启动。因此,为了能够创建以上的根文件系统,必须有一个空闲的能放下约4M 文件的Ramdisk。2.5 实验平台开发环境:虚拟机VMware9.0、Ubuntu12.10开发工具:内核源码:linux-2.6.18.tar.bz2或安装linux的主机中/usr/kernel下的内核版本、Busybox版本:busybox-1.2.0.tar.bz2、U盘:Kingston2.0 4G 2.6 实验流程操作系统的设计本

12、身是一个非常复杂和困难的工作,本实验参考Linux 操作系统的启动流程和内核架构,按照如下流程实现了小型操作系统的设计:a.编译linux内核b.制作启动盘c.建立根文件系统盘d.系统整合及测试3 编译linux内核此步主要是剪裁linux内核,以求简洁实用,适合U盘(或嵌入式)系统。裁减内核的流程如下:1、在编译之前需要准备以下几个软件包:build-essential,libcurses5-dev、kernel-package(注:(1)#apt-cache policy XXX,查看软件XXX是否安装。(2)使用apt-get 所下载的用于安装的软件包,在/var/cache/apt/a

13、rchives中,如果执行过apt-get clean,那么原始下载包就找不到了。)=> apt-get install build-essential /安装gcc, make等=> apt-get install libncurses5-dev /安装make menuconfig时必须的库文件=> apt-get install kernel-package2、下载linux内核,解压安装可以从 上下载linux内核,可以直接使用安装linux的主机中/usr/kernel下的内核版本。在内核版本使用的问题,觉得应

14、该多尝试几个不同的版本,内核版本不是越新越好,也不是越老越好。本课程设计编译内核版本为linux-2.6.18.tar.bz2,但在测试时使用的内核是主机本身的内核。具体操作如下:=>mkdir /usr/myos=>cp linux-2.6.18.tar.bz2  /usr/myos/=>cd/usr/myos=>tar -jxvf linux-2.6.18.tar.bz2=>cd linux-2.6.183、配置内核选项=>make menuconfig配置menuconfig里选项详见附录4、编译内核=>makemake完成后会在/us

15、r/myos/linux-2.6.18/arch/i386/boot/目录下生成内核文件bzImage。这就是我们需要拷贝到U盘下的内核。4制作启动盘准备一个U盘,并在其上面建立linux分区和ext2文件格式。在对U盘进行分区之前必须知道U盘在系统中设备文件,U盘在linux被识别scsi设备,因此系统分配给U盘在系统中的设备文件一般为sda、sdb、sdc等,如果系统中只有一个scsi设备,则插入的第一个U盘的设备文件一般为/dev/sda。对于VMware下安装的linux系统而言,第一个U盘设备文件一般为/dev/sdb。实际的设备文件可以通过“fdisk - l“指令来查看。知道U盘

16、设备文件之后,就可以对U盘进行分区和格式化,具体操作如下:1、利用linux自带的fdisk工具格式化u盘为启动盘=> fdisk -l /查看u盘的挂载点=> fdisk /dev/sdb1 /进入fdisk,格式化u盘(注释,U盘在电脑上为第二块设备,故是sdb1)=>Command (m for help ): m /输命令m查看可用命令及说明=>Command (m for help ): d /删除旧分区=>Command (m for help ): n /增加一个新分区=>p /输入p,回车,设置该分区为主分区;=>partition n

17、umber(1-4):1 /输入1,建立一个分区,分区号为1=>First cylinder(1-1019,default 1): /回车,选择默认=>Last cylinder or +size or +sizeM or +sizeK(1-1019,default 1019):/同上=>a /输入a,激活分区命令=>1 /激活刚建的分区1=>p /查看分区表,此时boot选项下出现号,说明分区已被激活=>w /将分区表写入并退出2、将u盘格式化为 ext2格式=> umount /dev/sdb1 /先卸载u盘=> mke2fs /dev/sd

18、b1 /格式化u盘3、安装GRUB2=>mount /dev/sdb1 /mnt /挂载u盘=>grub-install -root-directory=/mnt /dev/sdb /安装开发主机的grub到u盘4、在grub目录下建立配置文件grub.cfg=>cp /boot/grub/grub.cfg /mnt/boot/grub /拷贝主机的grub.cfg=>cd /mnt/boot/grub=>gedit grub.cfg /删除不必要的菜单项 并添加自己的菜单项,但需要权限menuentry “Hello My Mini OSinsmod ext2s

19、et root=(hd0,1) linux /bzImage root=/dev/sdb1 root=UUID=e3c3f63c-9224-47cf-b0fb-47b4155cfe34 /我的U盘设备号initrd /image.gz/测试时内核用的是主机的内核vmlinuz-3.5.0-34-generic5 建立根文件系统5.1 编译BusyboxBusyBox是实现标准Linux工具的一个独立可执行方案。不但包含有简单的工具,如cat、ls等,还集成压缩了Linux更大、更复杂的工具和命令,例如grep、find、mount以及telnet。利用它,我们可以建立我们需要的系统命令。具体操

20、作如下:1、下载解压安装Busybox=>cp busybox-1.2.0.tar.bz2 /usr/myos/=>cd /usr/myos=>tar -jxvf busybox-1.2.0.tar.bz2=>cd busybox-1.2.02、配置Busybox=> make menuconfig里面要选择的配置选项:1).选择Busyboxsetting=>Build Options=>Build BUsyBox as a static binary (no shared libs)2).Busyboxsetting=>Installatio

21、n Options=>Dont use /usr 3).shell=>job control(若不加,则tty can not access)4). shell里面的ash5). init utility里面的init6).在coreutils里面,可选一些其他常用命令如ls、cd,mkdir其它选项可以采用默认值。之后选择保存,退出配置环境。3、编译Busybox=>make4、安装Busybox=>mkdir /home/filesystem /建立临时目录;=>make PREFIX=/home/filesystem install /将编译busybox生

22、成的文件保存到/home/filesystem目录下安装完成后,会在/home/filesystem目录下建立bin和sbin子目录,其中包含busybox可执行文件和所有busybox支持的命令对其的链接。通过查看bin和sbin可以清楚的看到busybox中究竟支持了那些命令和工具。如果需要的命令没有出现在这些目录中,就需要重新配置、编译busybox,使其支持。5.2 建立文件系统1、创建一些系统启动需要的配置文件inittab,rc.S,fstab=> mkdir /home/filesystem/etc=> cd /home/filesystem/etc=> ged

23、it inittab在inittab文件中写入::sysinit:/etc/rc.S:askfirst:/bin/ash:respawn:-/bin/ash:restart:/sbin/inittty2:askfirst:-/bin/ash:ctrlaltdel:/bin/umount -a r:shutdown:/bin/umount -a r:shutdown:/sbin/swapoff ainittab文件中每一行的格式如下所示:            id:runle

24、vel:action:process对BusyBox而言,id用来指定启动进程的控制tty。如果所启动的进程并不是可以交互的shell,例如BusyBox的sh(ash),应该会有个控制tty,如果控制tty不存在,Busybox的sh会报错。BusyBox将会完全忽略runlevel字段,所以空着它就行了, process字段用来指定所执行程式的路径,包括命令行选项。action字段用来指定下面表中8个可应用到process的动作之一。动作结果sysinit为init提供初始化命令行的路径respawn每当相应的进程终止执行便会重新启动askfirst类似respawn,不过它的主要用途是减

25、少系统上执行的终端应用程序的数量。它将会促使init在控制台上显示“Please press Enter to active this console”的信息,并在重新启动之前等待用户按下enter键wait告诉init必须等到相应的进程完成之后才能继续执行once仅执行相应的进程一次,而且不会等待它完成ctratldel当按下Ctrl+Alt+Delete组合键时,执行相应的进程shutdown当系统关机时,执行相应的进程restart当init重新启动时,执行相应的进程,通常此处所执行的进程就是init本身=>gedit rc.S在rc.S文件中添加以下内容:#!/bin/ashcd

26、 /mkdir /procmkdir /usr/sbinecho "Processing etc/rc.S"/bin/mount -t proc /proc /procecho"mount proc is done"export PATH=/bin/:/sbin/:/usr/sbin/mount -aecho "*"echo " Created by maoxinglin 2013.07.01"echo " Good Luck"echo "*"这是一个脚本文件,可以在里面添加

27、自动执行的命令。把rc.S文件的权限改为777=>gedit fstab添加以下内容:# <file system> <mount point> <type> <options> <dump> <pass>proc/proc proc defaults 0 0/dev/sdb1 /media auto rw,user,noauto,exec,utf8 0 02、建立设备结点文件=>mkdir /home/filesystem/dev=>cd /home/filesystem/dev=>mknod c

28、onsole c 5 1=>mknod fb0 c 29 0=>mknod hda b 3 0=>mknod hda1 b 3 1=>mknod loop0 b 7 0=>mknod null c 1 3=>mknod ram0 b 1 0=>mknod tty c 5 0=>mknod tty0 c 4 0=>mknod tty1 c 4 1=>mknod tty2 c 4 2=>mknod tty3 c 4 3=>mknod tty4 c 4 4=>mknod tty5 c 4 5=>ln -s fb0 f

29、b3、制作文件系统映像。=> dd if=/dev/zero of=/home/image bs=1024 count=16384 /新建一个空的文件,大小为16M=> losetup /dev/loop1 /home/image /把整个空文件映射到一个设备文件上面=> mke2fs /dev/loop1 /格式化映像为ext2格式=> mount /dev/loop1 /mnt/ /将格式化好的映像挂载到主机的文件系统上面来=> cp /home/filesystem/* /mnt/ -ar /把我们建立好的文件系统从/home/filesystem拷贝过来,

30、 其中参数a表示拷贝符号链接=> umount /dev/loop1 /把映像从系统中卸载出来=> losetup -d /dev/loop1=> sync /更新 i-node 表,并将缓冲文件写到硬盘中=> cd /home=> gzip -9 image /压缩制作好的映像完成压缩文件系统镜像后,可以在/home下看到image.gz的压缩文件。这个就是我们需要拷贝到U盘中文件系统镜像。6 系统整合及测试把在上面步骤中制作好的文件系统 image.gz 拷贝到U盘的/boot/下面。将内核镜像bzImage文件,也拷贝它到u盘的/boot下面。卸载U盘。重新

31、开机,进入BIOS,设置USB为第一启动项,若进入引导界面,则grub启动成功,否则,grub程序错误,或者发生不可预知的错误,如果出现grub提示符,则表示找不到grub.cfg文件,需要考虑重做grub程序了,或者通过修改命令root hdx,y,(x表示第x块硬盘,y表示第y分区),重启,若再不行,就需要重做grub。正常出现菜单,则选择进入你所编写的linux,本设计为 Hello My MiNi OS,若点击出现file not found,则表示找不到内核,(我之前用2.6.18版本的内核,就是无法加载内核,更改为主机的内核版本时,就可以加载内核,并顺利进入文件系统)按ctr+al

32、t+delete重启(虚拟机中按ctr+alt+insert重启),若正常,则进入程序,内核加载完之后跳转到busybox,出现命令提示符,因为本设计没有采用login程序,所以最后进入不需要登入。关于测试命令行,输入一些在busybox编译时已加入的指令,如果可用,则这个设计已经基本能够顺利走下来,如果提示有需要用到命令没有找到,则在表示在编译busybox时没有加入这项命令,需要重新编译。关于进一步测试系统是否能够识别U盘自身时,发现无法识别。这就意味着这个U盘系统只能在这个虚拟的文件系统下运行,无法从busybox中出来执行其他的程序。虽然后来经过尝试,但还是无法从busybox中出来,

33、只能执行一些busybox的指令,如reboot、poweroff等。据初步估计这应该跟USB驱动模块以及一些库有些关系,内核没有把这些模块加载上,建文件系统时没有把与之相关的一些库拷贝进出。7 实验心得此次嵌入式系统课程设计让我进一步巩固了在课堂上所学到的知识,并运用到实际的设计当中。通过此次课设让我对嵌入式有了更深层次的了解,激发了对嵌入式的兴趣。其间,查阅资料、老师指导、与同学交流,反复修改,反复调试、虽然最终并没有做到老师的最终要求,从虚拟的文件系统中出来,执行自己的程序。但我还是收获很多,这其中的每一个过程都是对自己能力的一次检验和充实。比如学会了查阅相关资料、分析问题,学会在一种方

34、法走不通的时候,尝试其他别的方法来实现同一目的。这也提高了自己解决问题的能力。 通过这次课设了解嵌入式操作系统的启动流程,熟悉了内核裁剪移植以及根文件系统的设计步骤。学习了grub如何引导内核及文件系统镜像的方法,同时锻炼了工程设计实践能力,培养了自己独立设计能力,更加坚固了自己学习的信心,完善了自己前期理论学习的同时加强了自己的动手实践能力。 但通过此次课程设计也暴露了我们自己专业基础知识的很多不足之处,比如缺乏综合应用知识的能力,对材料的不了解等。明白自己知识还很浅薄,在以后的学习中不断的改进自身的这些缺点,提升自己。8 参考文献1 嵌入式系统原理与设计 王勇编著.杭州

35、:浙江大学出版社.2007.22 3 4 5 6 附录在menuconfig中配置:详细介绍内核配置选项及删改情况第一部分:全部删除Code maturity level options -> 代码成熟等级选项Prompt for development and/or incomplete code/drivers 默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动.不选。第二部分:除以下选项,其它全部删除General setupSystem V IPC (IPC:Inter Process Communication)第三部分:除以下选项,其它全部删除Loa

36、dable module support -> 可引导模块支持建议作为模块加入内核 Enable loadable module support Automatic kernel module loading 第四部分:全部删除Block layer-块设备第五部分:除以下选项,其它全部删除Processor type and features -> 处理器类型Subarchitecture Type (PC-compatible) -> 这选项的主要的目的,是使Linux可以支持多种PC标准,一般我们使用的PC机是遵循所谓IBM兼容结构(pc/at)。这

37、个选项可以让你选择一些其它架构。我们一般选择PC-compatible就可以了。Processor family(386) : 它会对每种CPU做最佳化,让它跑的好又快,一般来说,你是什么型号的就选什么型号的就好。我选的是386,这样内核会省下不少空间第六部分:除以下选项,其它全部删除Power management options (ACPI, APM) -> 电源管理选项 Power Management Debug Support 电源管理的调试信息支持,如果不是要调试内核有关电源管理部份,请不要选择这项。ACPI Support -高级电源接口配置支持,如果BIOS支持,建议选上

38、这项Button 第七部分:除以下选项,其它全部删除Bus options (PCI, PCMCIA, EISA, MCA, ISA) -> 总线选项PCI supportPCI access mode (Any) -> PCI外围设备配置,强列建议选Any,系统将优先使用MMConfig,然后使用BIOS,最后使用Direct检测PCI设备。第八部分:除以下选项,其它全部删除Executable file formats ->Kernel support for ELF binaries ELF是开放平台下最常用的二进制文件,它支持不同的硬件平台。一定要选。第九部

39、分:除以下选项,其它全部删除NetworkingNetworking options ->Unix domain socketsTCP/IP networking第十部分:除以下选项,其它全部删除Device Drivers ->设备驱动Block devices-Compaq SMART2 support Compaq Smart Array 5xxx supportLoopback device support  RAM disk supportSCSI device support -> 里面有关于USB支持的,要选择SCSI device support U

40、SB要用,必须选择legacy /proc/scsi/ support USB要用,必须选择SCSI disk support USB要用,必须选择SCSI Low-level driversSerial ATA(SATA) supportIntel PIIX/ICH SATA support 这个必须选择,否则无法产生引导文件Via SATA supportNetworking device support -> 这个下面是选网卡驱动,一定要选Ethernet(1000mbit)-?我的电脑是千兆网卡所以就选这个broadcom Tigon3supportInput device support -> 这个里面要设置你的鼠标键盘什么的Provide legacy /dev/psaux deviceGraphics support ->Support for frame buffer devices

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论