操作系统构成实验(使用U盘启动计算机).doc

上传人:asd****56 文档编号:70340226 上传时间:2023-01-19 格式:DOC 页数:15 大小:1.65MB
返回 下载 相关 举报
操作系统构成实验(使用U盘启动计算机).doc_第1页
第1页 / 共15页
操作系统构成实验(使用U盘启动计算机).doc_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《操作系统构成实验(使用U盘启动计算机).doc》由会员分享,可在线阅读,更多相关《操作系统构成实验(使用U盘启动计算机).doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、目 录1.课程设计实习目的12.准备知识12.1 Linux操作系统的启动流程12.2开机载入程序GRUB212.3 Linux根文件系统简介32.4 BusyBox介绍33. 实习内容44. 实习指导44.1实验设计思想54.2配置新内核bzImage54.3制作启动盘(boot盘)74.4制作根文件系统盘(Root Filesystem 盘)84.5系统整合124.6系统测试125. 习题练习126. 小组成员负责项目及参考文献12操作系统构成实验报告1.课程设计实习目的一了解一个操作系统的基本组成部件二掌握Linux 操作系统的基本操作三构造一个微型Linux 操作系统2.准备知识2.1

2、 Linux操作系统的启动流程一个Boot/Root 盘实际上是一个完整系统的缩影,基本上是放于一张U盘 上的一个小型而自给自足的Linux 系统,它能够执行一个完整系统的大部分功能。故在制作Boot/Root 盘之前,你应该了解基本的Linux 启动流程。开机后,系统执行存放在ROM 中的BIOS 程序,然后根据的设置BIOS 决定是从硬盘还是软盘启动。若是从硬盘启动,则读入0 柱面0 磁头1 扇区的MBR,引导系统的执行。一般在Linux OS 中启动盘的0 柱面0 磁头1 扇区中装的是启动装载器GRUB2,它定位内核并装载内核,最后执行内核。如果GRUB2装在MBR(Master Boo

3、t Record),则先由BIOS 把GRUB2代码调入内存,然后跳转执行GRUB2,再装载执行内核,即:BIOS GRUB2(在MBR中) KERNEL;一旦内核装载完毕后,开始初始化系统所有硬件设备,当硬件设备初始化完成后,启动过程会就此停止而等待根文件系统的装载。接着,系统在Root Filesystem 上找到init 程序并执行它,init 程序寻找它的配置文/etc/inittab,并开始执行其中的脚本,这些脚本是一些SHELL 命令的组合,用来执行下面一些命令,如加载所需的模块、装载SWAP、初始化网络、装载fstab 中列出的所有驱动器等,至此,系统启动流程完毕2.2开机载入程

4、序GRUB2GRUB2是一个在Linux 环境下编写的引导安装(Boot Loader)程序(故其安装和配置都要在Linux 下进行),其主要功能是引导Linux OS 的启动。GRUB 不仅可作为Linux 分区的引导扇区内的启动程序,而且可放入MBR 中完全控制Boot Loader 的全过程。 新布局GRUB legacy版本将文件放置在/boot/grub/目录下,包括在启动过程中读取并显示内容给用户的menu.lst文件。GRUB2将文件主要放在三个地方:(1)/boot/grub/grub.cfg -这是替代menu.lst的主要配置文件。不像menu.lst那样,grub.cfg

5、不能手动更改!我强烈建议不要尝试干预这个文件,无论是使用chattr命令或者其他。由他去就行。(2)/etc/grub.d/ -这个新文件夹包含GRUB脚本。这些文件是创建grub.cfg文件的基础。当相关的GRUB命令执行以后,这些脚本以某个特定的顺序被读取并且创建grub.cfg文件。(3)/etc/default/grub -这个文件包含GRUB脚本读取并且写入grub.cfg文件的GRUB菜单。它是GRUB的定制部分,类似于老的menu.lst文件,实际启动项目除外。这意味着,如果您想改变GRUB菜单,您将必须编辑已经存在的脚本或者创建新的脚本,然后更新菜单。相比老的GRUB,这更类似

6、于LILO,LILO允许在运行中编辑菜单。Grub.cfg文件实例文件位于:/boot/grub/:/etc/grub.d/ 目录示例我们来看一下这些脚本:00_header是从/etc/default/grub中加载GRUB设置的脚本,包括超时、默认启动项和其他。我们会稍侯了解更多。05_debian_theme定义背景、颜色和主题。这个脚本的名字很明确将会改掉当别的版本采用GRUB的时候。10_linux 为已经安装的发行版加载菜单项。20_memtest86+ 加载memtest(内存测试)功能30_os-prober 这个脚本将会扫描硬盘上的其他操作系统并且添加到启动菜单。40_cus

7、tom 是一个您可以用来创建新加的条目到菜单的模板。/etc/default/grub目录示例文件位于:/etc/default/目录下这个目录包含很多其他文件所以不要以为仅仅被GRUB使用。grub文件是一个被00_header脚本解析的文本文件。 注:脚本语言(Script language)是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。早期的脚本语言经常被称为批量处理语言或工作控制语言。一个脚本通常是解释运行而非编译。脚本语言通常都有简单、易学、易用的特性,目的就是希望能让程序员快速完成程序的编写工作。而宏语言则可视为脚本

8、语言的分支,两者也有实质上的相同之处。脚本语言通常以文本(如ASCII)保存,只在被调用时进行解释。许多脚本语言用来执行一次性任务,尤其是系统管理方面。它可以把服务组件粘合起来,因此被广泛用于GUI创建或者命令行,操作系统通常提供一些默认的脚本语言,即通常所谓shell脚本语言。在许多方面,高级编程语言和脚本语言之间互相交叉,二者之间没有明确的界限。脚本简单地说就是一条条的文字命令,这些文字命令是可以看到的(如可以用记事本打开查看、编辑),脚本程序在执行时,是由系统的一个解释器,将其一条条的翻译成机器可识别的指令,并按程序顺序执行。因为脚本在执行时多了一道翻译的过程,所以它比二进制程序执行效率

9、要稍低一些。2.3 Linux根文件系统简介Root Filesystem 必须包含支持完整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,/dev/r

10、am0,etc.;上述文件大小远远小于4M,所用U盘大小为1G。当用U盘启动时,文件自己先解压到内存中,形成一个虚拟启动盘(Ramdisk),通过Ramdisk 来控制启动。因此,为了能够创建以上的根文件系统,必须有一个空闲的能放下约4M 文件的Ramdisk。2.4 BusyBox介绍 busybox 是一个集成了一百多个最常用linux命令和工具的软件,他甚至还集成了一个http服务器和一个telnet服务器,而所有这一切功能却只有区区1M左 右的大小.我们平时用的那些linux命令就好比是分立式的电子元件,而busybox就好比是一个集成电路,把常用的工具和命令集成压缩在一个可执行文件里

11、,功能基本不变,而大小却小很多倍,在嵌入式linux应用中,busybox有非常广的应用,另外,大多数linux发行版的安装程序中都有 busybox的身影,安装linux的时候按ctrl+alt+F2就能得到一个控制台,而这个控制台中的所有命令都是指向busybox的链接。Busybox的小身材大作用的特性,给制作一张软盘的linux带来了及大方便。BusyBox 被称作 “The Swiss Army Knife of Embedded Linux”,它仅仅用一个可执行文件就可以提供一个基本的 Linux 操作系统所需的常用命令。不但体积小,配置起来也方便,只需很少的配置文件即可以运行。一

12、个由 BusyBox 构成的 Linux 操作系统加上内核完全可以做到只占用 2、3M 空间,甚至可以更小。 BusyBox 是 Linux 下的一个开放源代码软件,编译的时候需要 gcc 和 glibc 的支持,也可以用 uClibc 代替 glibc。 注:glibc是gnu发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。3. 实习内容一 通过实验平台提供的Linux 操作系统中的make 工具重新配置新内核,要求所配置的内

13、核尽量小。二制作一张启动盘(Boot Disk)。要求将该启动盘放于一张U盘上,用GRUB2引导程序引导,其引导内核为上面新配置的内核,同时考虑将它所引导的根文件系统(Root Filesystem)放于同一U盘上。三制作一张根文件系统盘(Root Filesystem Disk)。要求该启动盘也能放于同一张U盘上,并能通过上面做成的启动盘成功引导并进入系统,从而得到一个微型的Linux 操作系统。4. 实习指导一实验流程操作系统的设计本身是一个非常复杂和困难的工作,本实验参考Linux 操作系统的启动流程和内核架构,按照如下流程实现了小型操作系统的设计:1 Boot Loader 程序的选择

14、2 配置新内核3 制作启动盘4 制作根文件系统盘5 系统测试通过本实验,实验者一定会对“操作系统构成”有一个全新的了解和整体概念,进而加深对操作系统的理解。二开机引导程序的选择一般来说,一个操作系统都有一个开机引导程序,当然Linux 操作系统也不例外。不过Linux 操作系统的引导工具很多,比如LOADLIN、SYSLINUX、LILO、GRUB 等,我们为什么要选择GRUB呢?通过以下比较,就可以知道原因了。我们可以用LOADLIN 从MS-DOS 引导Linux。但不幸的是,它需要在MS-DOS 分区中有一份Linux 内核的拷贝(如果计算机有SCSI 适配器,还需要一个初始的RAM 盘

15、)。若一定要用LOADLIN,可以从http:/ /redhat70 处获得。SYSLINUX 是与LOADLIN 非常类似的MS-DOS 程序,也可以用它来引导Linux。但是SYSLINUX 不适合作为通用的Boot Loader 程序,它只能从FAT filesystem(而不是ext2filesystem 等)启动Linux 操作系统。如果需要,也可以从网站 处获得。GRUB 是GRand Unified Bootloader 的缩写,它可以在多个操作系统共存时选择引导哪个系统。它可以引导的操作系统包括Linux, FreeBSD, Solaris, NetBSD, BeOSi, OS

16、/2,Windows95/98,Windows NT, Windows2000 等。它可以载入操作系统的内核和初始化操作系统(如Linux, FreeBSD),或者把引导权交给操作系统(如Windows 98)来完成引导。它最大的缺点就是在它不能正确引导的情况下对它的修复比较麻烦。4.1实验设计思想要构架一个操作系统,一定要考虑系统内核,这也是创建启动盘所必需的。由于要设计的操作系统是置于一张U盘上,而操作系统的内核一般又比较大,所以必须对系统内核进行重新剪裁和配置。通常采用的方法是对系统内核进行手工配置,通过去掉那些不必要的功能模块的方法来裁减系统内核,如SMP、MTRR、networkin

17、g、SCSI、sound 支持、USB支持、Telephony 支持等。 但一定要记住在“file systems”选项中必须保留内核对RAMDISK和ext2 的支持,否则后面制作的启动盘将不能工作。4.2配置新内核bzImage(强烈注释)本实验采用的是Kingston2.0 1G U盘,采用计算机为笔记本,linux版本为ubuntu10.04,采用系统内核为2.6.16,busybox版本为1.20裁减内核的流程如下:1、在编译之前需要准备以下几个软件包:build-essential,libcurses5-dev,mkinitramfs, kernel-package,libqt3-

18、headers,libqt3-mt-dev (注:(1)#apt-cache policy XXX,查看软件XXX是否安装。(2)使用apt-get 所下载的用于安装的软件包,在/var/cache/apt/archives中,如果执行过apt-get clean,那么原始下载包就找不到了。)= apt-get install build-essential /安装gcc, make等= apt-get install libncurses5-dev /安装make menuconfig时必须的库文件= apt-get install mkinitramfs /不能下载?(暂时不需要)= ap

19、t-get install kernel-package= apt-get install libqt3-headers= apt-get install libqt3-mt-dev部分截图如下:2、下载linux内核,解压= tar -jxvf linux-2.6.16.tar.bz2 解压= cd linux-2.6.16 进入源代码目录命令如下:mkdir /myoscd/myostar -jxvf linux-2.6.16.tar.bz2cd linux-2.6.16截图如下:3、配置内核选项= make menuconfig(注释)menuconfig里单个的详细功能不加叙述,详见g

20、oogle里面要选择的配置选项(本程序如此做)1)、 Device Driver-block devices里面:RAM Disk support(即RAM block device support?)Initial RAM disk support(在General setup里面?可能是版本的原因?文档用的是2.6.16,测试时用的是2.6.31)2)、Device Driver-Graphics support里面:Support for frame buffer deivecesConsole Display driver support-FrameBuffer console sup

21、port3).去掉电源管理Power managerment options(ACPI,APM);否则,引导至内核之后出现死机状态,原因不明。?4),修改Makefile文件,找到CFLAGS,在里面添加-fno-stack-protector截图如下:4、编译内核= make bzImage编译之后,在arch/i386/boot/里面有一个bzImage文件,拷贝它到u盘的根目录下面。4.3制作启动盘(boot盘)1、利用linux自带的fdisk工具格式化u盘为启动盘1)、= fdisk -l 查看u盘的挂载点2)、= fdisk /dev/sdb1 进入fdisk,格式化u盘(注释,U

22、盘在电脑上为第二块设备,若为第三块则为sdc,依次类推)a、输命令m查看可用命令及说明:= mb、依次输入如下命令新建一个分区:(补充:若U盘有内容,建议先#umount /dev/sdb,再格式化#mkfs.ext2 /dev/sdb。参考mkdosfs)=n /增加一个新分区;=p /设置该分区为主分区;=1 /分区号为1;=1 /分区的第一个柱面号为1;=100 /分区大小约为900M;截图如下:c、将新建的分区设为活动分区= a 激活分区命令;= 1 激活刚建的分区1;可用p命令查看分区表,此时boot选项下出现号,说明分区已被激活d、将分区表写入并退出= w2、将u盘格式化为 ext

23、2格式= umount /dev/sdb1 先卸载u盘;= mke2fs /dev/sdb1 格式化u盘;3、安装GRUB2=mount /dev/sdb1 /mnt (修改为mount /dev/sdb1 /mnt/usb)=grub-install -root-directory=/mnt /dev/sdb1 ?(修改为grub-install -root-directory=/mnt/usb /dev/sdb1sdb1改成sdb,sdb1只是sdb的第1个分区)4、在grub目录下建立配置文件grub.cfg= cp /boot/grub/grub.cfg /mnt/boot/grub(

24、修改为 = cp /boot/grub/grub.cfg /mnt/usb/boot/grub)cd /mnt/boot/grub(修改为 cd /mnt/usb/boot/grub) gedit grub.cfg删除不必要的菜单项 并添加自己的菜单项:menuentry “Hello My Mini OS微OS启动后,没有出现,原因?”set root=(hd0,1)linux /bzImage root=/dev/sdb1initrd /image.gz截图如下:4.4制作根文件系统盘(Root Filesystem 盘)一:编译busybox1、下载 busybox:busybox-1.

25、2.0.tar.bz2注:(1)在网站上下载 (2)sudo apt-get install busybox(下载的版本是1.1.13.3,不推荐)= tar -jxvf busybox-1.2.0.tar.bz2= cd busybox-1.2.0截图如下:2、配置busybox= make menuconfig (注:前提是要进入busybox源码目录.)里面要选择的配置选项1).选择Busyboxsetting=Build Options=Build BUsyBox as a static binary (no shared libs)2).Busyboxsetting=Installa

26、tion Options=Dont use /usr (busybox-1.2.0这个版本才有)3).shell=job control(若不加,则tty can not access)4)、 shell里面的ash5)、 init utility里面的init6)、在coreutils里面,可选一些其他常用命令如ls、cd,mkdir部分截图如下:3、编译busybox= make 4、编译完成之后,建立一个临时的目录,保存busybox生成的文件。= mkdir /tmp/usb 建立临时目录;= make PREFIX=/tmp/usb install 将编译busybox生成的文件保存

27、到/tmp/usb目录下截图如下:二、制作文件系统1、创建一些系统启动需要的文件inittab,rc.S= mkdir /tmp/usb/etc= cd /tmp/usb/etc= gedit inittab在文件中写入:sysinit:/etc/rc.S:askfirst:/bin/ashwq保存退出其中,sysinit表示后面整个程序在系统初始化的时候执行,后面的askfirst表示系统初始化完毕后启动的程序。这个程序如果执行结束,那么系统会再次启动它。= gedit rc.S把rc.S文件的权限设置为777?在文件中写入:#!/bin/ash/bin/mount -t proc /pro

28、c /procexport PATH=/bin/:/sbin/:/usr/sbin/2、建立设备文件。=mkdir /tmp/usb/dev=cd /tmp/usb/dev=mknod console 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 t

29、ty4 c 4 4=mknod tty5 c 4 5=ln -s fb0 fb截图如下:3、制作文件系统映像。1)、新建一个空的文件,大小为16M:= dd if=/dev/zero of=/tmp/image bs=1024 count=163842)、把整个空文件映射到一个设备文件上面:= losetup /dev/loop1 /tmp/image3)、格式化映像为ext2格式:= mke2fs /dev/loop14)、将格式化好的映像挂载到主机的文件系统上面来= mount /dev/loop1 /mnt/(修改为= mount /dev/loop1 /mnt/usb)5)、 把我们建

30、立好的文件系统从/tmp/usb拷贝过来= cp /tmp/usb/* /mnt/ -ar (修改为= cp /tmp/usb/* /mnt/usb ar,其中参数a表示拷贝符号链接)6)、 把映像从系统中卸载出来= umount /dev/loop1= losetup -d /dev/loop1= sync 注:sync命令更新 i-node 表,并将缓冲文件写到硬盘中。7)、 压缩制作好的映像= cd /tmp= gzip -9 image截图如下:image.gz就是我们的文件系统4.5系统整合把制作好的文件系统 image.gz 拷贝到U盘的根目录下面。将bzImage文件,拷贝它到u

31、盘的根目录下面4.6系统测试开机,进入bios,设置usb为第一启动项,若进入引导界面,则grub启动成功,否则,grub程序错误,或者发生不可预知的错误,如果出现grub提示符,则表示找不到grub.cfg文件,考虑重做grub程序了,或者通过命令root hdx,y,x表示第x块硬盘,y表示第y分区,找到之后setup hdx,重启,若再不行,重做grub。正常出现菜单,则选择进入你所编写的linux,本文为 Hello My MiNi OS,若点击出现file not found,则表示找不到内核,按ctr+alt+delete重启(虚拟机中按ctr+alt+insert重启),若正常,则进入程序,内核加载完之后跳转到busybox,出现命令提示符,因为本程序没有采用login程序,所以最后进入不需要登入。关于测试命令行,比如打入cd,ls(因为这些busybox编译时已加入,所以可用),例如mkdir没有,则在busybox时加入这项命令,重新编译。5. 习题练习1)、简述操作系统的启动流程。2)、尝试在grub2程序中加入图片或者字体颜色。3)、尝试添加gui图形界面。6. 小组成员负责项目及参考文献排序姓名承担任务1xu2345参考文献:1. 操作系统.pdf (见附件)2. (实验参考文档)3. (改正了编译bzImage时的错误)4. (gurb2引导参考) 14

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁