
linux考试复习.docx
16页一、关于Bochs软件:1、 Bochs 软件的特点Bochs是kevin Lawton于1994年用C++语言开发的软件系统, 无论运行Bochs的主机采用何种硬件平台,Bochs都能完全仿真模拟Intel x86 CPU的微机硬件平台,这种完全仿真的方法使得我们能在Bochs下不加修改地运行大量的软件系统 Bochs开源,易移植,适合开发一些低层系统软件2、在Bochs中运行一个 OS,需要哪些资源Bochs执行文件、BIOS映像文件、VGA BIOS映像文件、至少一个引导启动磁盘映像文件(软盘、硬盘或者 CDROM 的映像文件) 3、 Bochs 配置文件常用参数及其设置1) megs : 被模拟系统所含内存容量(默认值时 32MB) ,例如: megs:1282) floppya(floppyb) : 软驱号( floppya 表示第一个软驱, floppyb 表示第二个软驱) ,如果需要从一个软盘上来引导系统,那么 floppya 就需要指向一个可引导的磁盘;如果想使用磁盘映像文件, 那么就在该选项后面写上磁盘映像文件名, 例如 : floppya:1_44=a:,status=inserted 。
3) ata0/ata1/ata2/ata3 :启动模拟系统中最多 4个ATAB道,对于每个启用的通道必须指明 两个IO基地址和一个中断请求号4) ata0-master(ata0-slave) : ata0-master指明模拟系统中第一个 ATA通道(0通道)上连接 的第1个ATA设备(硬盘或者CDROM); ata0-slave指明模拟系统中第一个 ATAB道(1通道) 上 连 接 的 第 2 个 ATA 设 备 , 例 如 : ata0-master:type=disk,path=hd.img, mod=flat,Cylinders=306,heads=4, spt=17, traslation=none 5) boot :定义模拟机器中用于引导启动的驱动器 ,可以知道软盘,硬盘或者 CDROM和驱动器号“ c” , “ a” 6) cpu:定义模拟系统中仿真 CPU的参数7) log: Bochs记录执行的日志信息4、 Bochs 配置文件源代码分析megs: 16 *被模拟系统的内存大小是 16MB*romimage: file=$BXSHARE/BIOS-bochs-latest * 所模拟 PC 的 ROM BIOS 程序 *vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest 惭模拟 P C 的 VGA程序 * floppya: 1_44="bootimage-0.12-fd", status=inserted* 参数 floppya 指定模拟 pc 的软盘驱动器 A: ,使用 1.44 MB 类型,并且设置成使用bootimage-0.12-fd 软盘映像文件,状态为插入 *floppyb: 1_44=diska.img, status=insertedboot: a* 指定启动的驱动器,这里是从 A 盘启动 *log: bochsout.txt* Bochs 记录执行的一些日志信息写在 bochsout.txt 中, 如果 Bochs 中运行的系统不能正常运行就可以参考其中的信息找出基本原由 *vga_update_interval: 300000panic : action=ask二、Make程序与Makefile文件1、 make 工具的作用自动编译所有内核代码文件, 自动地决定一个含有很多源程序文件的大型程序中哪个文件需要被重新编译。
2、 Makefile 文件中的规则1 )规则含有下列形式:target (目标)… :prerequisites (先决条件)… command (命令)…‘目标’通常是程序生成的一个文件的名称; ‘先决条件’是一个或多个文件名,是用作产生目标的输入条件通常一个目标依赖几个文件 ‘命令’是 make 需要执行的操作注意:每个命令之前键入一个制表符 (Tab键)2)根据目标文件的命名形式使用 “ c-c”命令根据相应的.c文件更新对应的.3、 Linux/Makefile 文件源代码分析ROOT_DEV=/dev/hd磔二个硬盘的第一个分区ARCHIVES=kernel/kernel.o mm/mm.o fs/fs.o 为方便引用进行归档MATH=kernel/math/math.a 数学运算库文件LIBS=lib/lib.a 由 lib/ 目录中的文件所编译生成的通用库文件disk Image dd bs=8192 if=Image of=/dev/PS0 表示 disk 这个目标要由 Image 产生, dd为复制一个文件,根据选项进行转换和格式化 bs=表示一次读/写的字节数if表示输入的文件, of 表示输出的文件。
/dev/PS0 表示第一个软盘驱动器(设备文件) 三、Linux0.12内核体系结构1、内核源代码目录结构]i mixbootI fs| includeI 巴3工I |- 1 iruxI 1— sys—inil1— kernel[——blk_drv| |—I 1— mth\— I ib\— :JL* tuol5系统=1导工蜿程序文件要线头二俘缶.用与体耒尹梅相美的都什Linux内根专用部分系统数据结桓津分内耳已门忆程序内核进理调度、信号处理.费统话用等程序块设各总动程序字可以备£裁程序教学口忆再与仿真芝用程序内枝毒由我内存亏是程产生成史核1,尹文伴的工具这中图三-勿【:m」x内核源代码目录结构3、内核的编译图3 /2内核绢译连接组合结检2、内核编译链接结构1) bochsrc-0.12-hd.bxrc进入以硬盘Image文件作为根文件系统的 linux0.12系统2)在/usr/src/linux目录下键入"make"命令编译linux0.12内核代码3)生成引导启动映像文件 Image4)存入硬盘映像: dd bs=8192 if=Image of=/dev/fdp5)存入软盘映像: mcopy Image bmcopy System.map b4、常用shell命令及其参数,如dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换make:编译所有内核代码文件 mkfs:建立一个文件系统mkdir:创建一个目录mount:挂载文件系统umount :卸除文件系统ll:显示文件/目录详细信息四、集成盘原理与制作1、集成盘的结构内核引导启动盘和一个基本的根文件系统盘的内容合成制作在一张盘中。
该盘内核代码需要开启内存虚拟盘 RAMDISK的功能,从而使得系统上的两个软盘驱动器能腾出用于加载其他 文件系统盘 引导《露提2、制作过程1)重要参数的设置在 /usr/src/linux/Makefile 中修改:RAMDISK=-DRAMDISK=2048ROOT_DEV=FLOPPY2)内核的编译A)先 Make clean,再 Make;B)制作临时根文件系统(1)制作一张大小为 1024KB 的空 Image 文件:dd bs=1024 if=/dev/zero of=rootram.img count=1024 ;(2)在bochs中运行linux-0.12-devel 系统,在bochs主窗口上把驱动盘分别配置成: A盘 为 rootimage-0.11-orign , B盘为 rootram.img ;(3) mkfs /dev/fd1 1024mkdir /mnt1mount /dev/fd0 /mntmount /dev/fd1 /mnt1(4) 将 rootimage-0.11-orign 精简后 (1024KB) 拷入 rootram.img cd /mnt1for i in bin dev etc usr tmp docp +recursive +verbose /mnt/$i $idonesync(5)umount /dev/fd0 umount /dev/fd1 ;将/dev/fd1 中的文件系统复制到 linux-0.11-devel 系统中,建立一个名称为 rootram-0.11的根文件系统 Image 文件: dd bs=1024 if=/dev/fd1 of=rootram-0.11 count=1024(C)建立集成盘:修改bochs主窗口的 A盘为bootroot-0.11dd bs=8192 if=/usr/src/linux/Image( 内核引导启动文件 ) of=/dev/fd0dd bs=1024 if=rootram-0.11 (文件系统映像) of=/dev/fd0 seek=256sync;sync;sync;3)根文件系统的裁剪保留 /mnt/bin mkfs,mknod,mount,sh,umount,vi/mnt/usr/bin cat,chmod,chown,cp,dd,df,ls,mkdir,mv,rm,rmdir3、集成盘的引导过程描述若RAMDISK没有设置(即长度为 0),内核会根据ROOT_DEV所设置的根文件系统所在设备号,从软盘或硬盘上加载根文件系统,执行无虚拟盘时的一般启动过程。
若其已定义, 引导 时会检测启动盘的第 256磁盘块(每个磁盘块为1KB,即2个扇区)开始处是否存在一个根文件系统 即: 判断第 257 磁盘块中是否存在一个有效的文件系统超级块信息如果有,就加载到 RAMDISK 区域,并作为根系统使用如果没有,则内核提示插入根文件系统盘;然后内核把独立盘上的根文件系统整个读入到内存的虚拟盘区域中去执行五、内核引导启动 +根文件系统1、 bootsect.S 程序引导过程1)磁盘引导块程序 bootsect.s驻留在磁盘第一个扇区中2) PC加电、ROM BIOS自检后,BIOS会把bootsect加载到内存0x7C00并执行,执行期间, 再将自己移到0x90000处并执行3)把从磁盘第二个扇区开始的 4个扇区的setup模块加载到内存紧接着 bootsect处(0x90200)4)利用BIOS中断0x13取磁盘参数表中当前启动引导盘的参数,在屏幕上显示" Loadingsystem …”5)……6)把磁盘上system模块加载到内存 0x10000处,确定根文件系统的设备号7)长跳到setup程序开始处0x90200执行setup程序2、启动引导时内核在内存中的位置boot sac L m 程序■FCtup. S 程序^ysieo榄史j;ys left 模块中的h^d.;程序代犯执行位近找路0xl'0000(64K)⑶ K)0x00003、setup.S 程序0x90200(576. 5K) (576K)12 3 4 50x90000开始的位置(覆盖掉1)利用BIOS中断读取机器系统数据,并将这些数据保存到bootsect程序所在地方)2)然后将system模块整体下移到内存绝对地址 0x00000处gdtr,开启A20地址线,重设两个3)加载中断描述符表寄。












