




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一.关于Bochs软件(10分)1.Bochs软件的特点开源,容易移植,适合开发一些低层系统软件,可知被执行程序在仿真硬件环境中的具体状态和精确时序,而非实际硬件系统执行的结果。2.在Bochs中运行一个OS,需要哪些资源Bochs执行文件;bios映像文件;vga bios映像文件;至少一个引导启动磁盘映像文件。3.Bochs配置文件常用参数及其设置megs。用来设置被模拟统的内存容量。默认为32M,更改时为指令:megs:128floppya(floppyb)。Floppya表示第一个软驱,floppyb表示第二个软驱。floppya: 1_44=/dev/fd0, status=inserted(linux下直接访问1.44M,A盘)floppya: 1_44=bootimage-0.11-fd, status=inserted(指向磁盘映像文件bootimage.img)ata0,ata1,ata2,ata3每个通道必须指明两个IO基地址和一个中断请求号ata0:enabled=1,ioaddr1=0x1f0,ioaddr2=0x3f0,irq=14ata0-master指明模拟系统中第一个ATA通道上连接的第1个ATA设备ata0-slave指明模拟系统中第一个ATA通道上连接的第2个ATA设备ata0-master:type=disk,path=hd.img,mod=flat ,Cylinders=306,heads=4, spt=17, traslation=none flat:平坦顺序文件Cylinders(磁道数),heads(磁头数),spt(每个磁道的扇区数)boot:定义模拟及其中用于引导启动的驱动器cpu例cpu:count=1,ips=10000000, rest_on_triple_fault=14.Bochs配置文件源代码分析megs: 16 *被模拟系统的内存大小是16MB*romimage: file=$BXSHARE/BIOS-bochs-latest *所模拟的 程序*vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest *所模拟的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文件(10分)1.make工具的作用能自动地决定一个含有很多源程序文件的大型程序中哪个文件需要被重新编译。2.Makefile文件中的规则目标(target)。:先决条件(prerequisites)。命令(command)目标通常是程序生成的一个文件的名称;先决条件是一个或多个文件名,是用作产生目标的输入条件。通常一个目标依赖几个文件。命令是make需要执行的操作。3.linux/Makefile文件源代码分析ROOT_DEV=/dev/hd6第二个硬盘的第一个分区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内核体系结构(10分)1.内核源代码目录结构2.内核编译链接结构3.内核的编译对boot/中的bootsect.s、setup.s使用8086汇编器进行编译,分别生成各自执行模块,再对源代码中的其他所有程序使用GNU的编译器gcc/gas进行编译,并连接成模块system。然后使用build工具将这三块组合成一个内核映像文件Image。4.几个常用命令及其参数,如#include 与#include “filename”区别:对于后者,编译器首先在源程序所在目录中搜索filename文件。如果没有找到,编译器再执行同上面一样的搜索过程。dd 为复制一个文件,根据选项进行转换和格式化。bs=表示一次读/写的字节数。if=表示输入的文件,of=表示输出地文件例:dd bs=9192 if=Image of=/dev/fd0make 的作用是开始进行源代码编译,以及一些功能的提供,这些功能由他的 Makefile 设置文件提供相关的功能,比如 make install 一般表示进行安装,make uninstal 是卸载,不加参数就是默认的进行源代码编译。mkfs ,建立一个文件系统例:mkfs /dev/hd1 1024 #建立一个1024KB的文件系统mkdir 创建一个目录rmdir 删除一个目录mount mount挂载上文件系统,umount执行相反的操作。格式:mount -参数 设备名称 挂载点 ll 不是命令,是ls -l的别名,列出目录内容fdisk 硬盘分区工具,fdisk -l 设备名称df 查看硬盘的总容量,已用容量ls 显示文件名称,属性等cp 复制文件或目录rm 删除文件或目录mv 移动文件或目录四.内核引导启动+根文件系统(10分)1.集成盘的结构集成盘是指把内核引导启动盘和一个基本的根文件系统盘的内容合成制作在一张盘上。2.集成盘的制作过程首先重新编译内核生成内核启动映像。在/usr/src/linux/Makefile中修改:(设置虚拟盘)RAMDISK=-DRAMDISK=设定的值即2048(重要参数设定)ROOT_DEV=FLOPPYMake clean;make(内核的编译)第二步,制作临时根文件系统。(1)制作一张大小为1024KB的空Image文件。dd bs=1024 if=/dev/zero of=rootram.img count=1024(2)在bochs中运行linux-0.11-devel系统。然后在bochs主窗口上把驱动盘分别配置成:A盘为rootimage-0.11-orign;B盘为rootram.img(3)mkfs /dev/fd1 1024 mkdir /mnt1mount /dev/fd0 /mntmount /dev/fd1 /mnt1mount是Linux下的一个命令,它可以将Windows分区作为Linux的一个“文件”挂接到Linux的一个空文件夹下,从而将Windows的分区和/mnt这个目录联系起来,因此我们只要访问这个文件夹,就相当于访问该分区了。根文件系统的裁剪:保留/mnt/bin mkfs,mknod,mount,sh,umount,vi/mnt/usr/bin cat,chmod,chown,cp,dd,df,ls,mkdir,mv,rm,rmdir(4)将rootimage-0.11-orign精简后setup.s-system模块中的head.s程序如果没有设置RAMDISK,则内核会根据ROOT_DEV所设置的根文件系统所在设备号,从软盘或硬盘上加载根文件系统,执行无虚拟盘时的一般启动过程。如果定义了RAMDISK的大小值,引导时会检测启动盘的第256磁盘块(每个磁盘块为1KB,即2个扇区)开始处是否存在一个根文件系统。即,判断第257磁盘块中是否存在一个有效的文件系统超级块信息。如果有,就加载到RAMDISK区域,并作为根系统使用。如果没有,则内核提示插入根文件系统盘;然后内核把独立盘上的根文件系统整个读入到内存的虚拟盘区域中去执行。 引导过程原理RAMDISK没有设置(即长度为0),内核会根据ROOT_DEV所设置的根文件系统所在设备号,从软盘或硬盘上加载根文件系统,执行无虚拟盘时的一般启动过程。如果定义,引导时会检测启动盘的第256磁盘块(每个磁盘块为1KB,即2个扇区)开始处是否存在一个根文件系统。即,判断第257磁盘块中是否存在一个有效的文件系统超级块信息。如果有,就加载到RAMDISK区域,并作为根系统使用。如果没有,则内核提示插入根文件系统盘;然后内核把独立盘上的根文件系统整个读入到内存的虚拟盘区域中去执行。五.系统调用(10分)1. 应用程序、库函数和内核系统调用之间的关系关系: 系统调用是为了方便应用使用操作系统的接口,而库函数是为了方便人们编写应用程序而引出的,系统调用可以理解为内核提供给我们在用户态用的接口函数 在Linux系统中,内核为用户程序提供了两方面的支持。其一是系统调用接口,即中断调用int 0x80;另一方面是通过开发环境库函数或内核库函数与内核进行信息交流。系统调用主要提供给系统软件编程或者用于库函数的实现。而一般用户开发的程序则是通过调用像libc等库函数来访问内核资源。这些库中的函数或资源通常被称为应用程序编程接口(API),其中定义了应用程序使用的一组标准编程接口。通过调用这些库中的程序,应用程序代码能够完成各种常用工作2.创建系统调用过程涉及到的文件/usr/src/linux/kernel/sys.c,/usr/src/linux/dev/unistd.h,/usr/src/linux/include/linux/sys.h, /usr/src/linux/kernel/sys_call.s,/usr/src/linux/lib,关键代码的修改添加系统调用功能号和原型定义在/usr/src/linux/dev/unistd.h(unix standard header)#define _NR_sethostname2 87 /添加系统调用功能号int sethostname2(char *name,int len); 新系统函数原型定义添加外部函数声明在usr/src/linux/include/linux/sys.hextern int sys_sethostname2();fn_ptr sys_call_table=,sys_sethostname2修改系统调用汇编程序修改/usr/src/linux/kernel/sys_call.s程序63行,nr_system_calls增1由82变成83增加新系统调用库函数/usr/src/linux/lib中新建文件sethostname2.c,#define _library_#include_syscall2(int,sethostname2,char*,hostname,int,len)修改/usr/src/linux/lib/Makefile在最后添加sethostname2.o6、Minix文件系统(10分)1.建有Minix文件系统的360KB软盘文件系统分布图,解释说明以下概念及其数据结构引导块是计算机加电启动时可由ROMBIOS自动读入的执行代码和数据。超级块用于存放盘设备上文件系统结构的信息并说明各部分的大小。i节点位图用于说明i节点是否被使用,同样是每个比特位代表一个i节点。逻辑块位图用于描述盘上每个数据盘块的使用情况。i节点存放对应文件的相关信息。2.解释ls la命令所列出的文件或目录属性代表的意思3.解释hexdump命令所显示的具体内容7、内存管理(10分)1.内存物理划分2.Linux0.12系统的分页管理,即页目录表、页表与内存的映射3.主内存初始化代码分析(另一份)4.与内存相关的源代码函数调用关系图(见李继刚的图注意功能即可)八、设备驱动程序1Linux设备分类i字符设备p 字符设备:以字符流作为操作对象的设备,不能进行寻址操作,顺序存取不能随机访问p 每个字符设备文件都有与普通文件相同的文件操作函数组结构struct file_operations。p 字符设备驱动通常至少需要实现文件操作函数组中的open、release、read、write操作。p 常见的字符设备有:鼠标、键盘、串口、控制台等。 ii块设备:以固定大小的数据块为单位进行寻址和访问的设备,如硬盘和软盘p 块设备有请求缓冲区,随机存取,存储设备如磁盘一般属于块设备。p 块设备既可以作为普通裸设备用来存放任意数据,也可以按某种文件系统类型的格式进行格式化,然后按照该文件系统类型的格式来读取数据。iii网络设备p 面向报文。p 不支持随机访问,无请求缓冲区。p 应用程序通过Socket而不是设备节点来访问网络设备,在系统里根本不存在网络设备节点。p 网络接口没有设备号,只有一个唯一的名字,如eth0/eth1等。2设备节点、设备驱动与设备的关系(设备文件设备驱动设备)Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件,有时也称为设备节点。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。设备驱动程序是Linux操作系统内核的重要组成部分,在内核与硬件设备之间建立了标准的抽象接口。通过这个接口,用户可以像处理普通文件一样对硬件设备进行打开,读写,关闭等操作。file_operations是文件层次的I/O接口。对于设备节点而言,名字不重要,设备号才最重要,它实际执行了对应的驱动程序和对应的设备。3 主设备号和次设备号为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编号,如硬盘的主设备号是3。Linux0.11有七种主设备号,如下:一般1对应内存,2对应软盘,3对应硬盘P3834 文件操作数据结构struct file_operations int (*seek) (struct inode * ,struct file *, off_t ,int); int (*read) (struct inode * ,struct file *, char ,int); int (*write) (struct inode * ,struct file *, off_t ,int); int (*readdir) (struct inode * ,struct file *, struct dirent * ,int); int (*select) (struct inode * ,struct file *, int ,select_table *); int (*ioctl) (struct inode * ,struct file *, unsined int ,unsigned long); int (*mmap) (struct inode * ,struct file *, struct vm_area_struct *); int (*open) (struct inode * ,struct file *); int (*release) (struct inode * ,struct file *); int (*fsync) (struct inode * ,struct file *); int (*fasync) (struct inode * ,struct file *,int); int (*check_media_change) (struct inode * ,struct file *); int (*revalidate) (dev_t dev); p 这个结构的每一个成员的名字都对应着一个系统调用。p 用户进程利用系统调用在对设备文件进行诸如read/write操作时,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,接着把控制权交给该函数。p 这是linux的设备驱动程序工作的基本原理。所以,编写设备驱动程序的主要工作就是编写子函数,并填充file_operations的各个域。5设备驱动程序建立步骤(1)编写驱动源代码。新建.c文件,如mydevice.c,编写子函数,并填充file_operations的各个域unsigned int test_major = 0; static int read_test(struct inode *node,struct file *file, char *buf,int count) int left; if (verify_area(VERIFY_WRITE,buf,count) = -EFAULT ) return -EFAULT; for(left = count ; left 0 ; left-) _put_user(1,buf,1); buf+; return count; static int write_test(struct inode *inode,struct file *file, const char *buf,int count) return count; static int open_test(struct inode *inode,struct file *file ) MOD_INC_USE_COUNT; return 0; static void release_test(struct inode *inode,struct file *file ) MOD_DEC_USE_COUNT; struct file_operations test_fops = NULL, read_test, write_test, NULL, /* test_readdir */ NULL, NULL, /* test_ioctl */ NULL, /* test_mmap */ open_test, release_test, NULL, /* test_fsync */ NULL, /* test_fasync */ /* nothing more, fill with NULLs */ ; (2)把驱动程序放在相应的设备驱动程序所在目录,并修改该目录的Makefile文件。(3)添加设备文件。 mknod /dev/mydevice c 231 0mknod定义:mknod - make block or character special files语法:mknod /dev/ttyUSBn c Major Minor1,n要等于次设备号Minor,且要小于主设备号Major. 2, c:面向字符设备(b:面向块设备,如:磁盘、软盘、磁带;其他设备基本都为字符设备).(4)测试。main() int testdev; int i; char buf10; testdev = open(/dev/mydevice,O_RDWR); if ( testdev = -1 ) printf(Cannt open file n); exit(0); read(testdev,buf,10); for (i = 0; i close(testdev); Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编号,如硬盘的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025人民医院儿科门诊管理规范考核
- 2025中心医院Monteggia骨折诊断与治疗考核
- 衡水市人民医院针灸器械消毒管理考核
- 2025河南新乡市碳汇计量检测中心招聘考前自测高频考点模拟试题及完整答案详解
- 衡水市人民医院培训效果评估考核
- 邢台市中医院眼科检查设备校准考核
- 2025第二人民医院靶向治疗检测考核
- 石家庄市中医院血型鉴定技术资格认证
- 2025年福建省宁德市公安局招聘94人考前自测高频考点模拟试题及完整答案详解
- 邢台市人民医院溶栓治疗决策能力专项考核
- 音乐治疗和心理剧演出你内心的音乐
- 液塑限自动计算程序
- 云南民族民间舞蹈课件
- 村卫生室药品管理制度
- 掩耳盗铃儿童故事绘本PPT
- CIED植入围手术期抗凝治疗
- 现代医学实验动物科学和比较医学研究
- 《发现雕塑之美》第4课时《加法与减法的艺术》
- 澳门立法会间接选举制度及其实践
- 1-5年级英语单词
- GA 1551.3-2019石油石化系统治安反恐防范要求第3部分:成品油和天然气销售企业
评论
0/150
提交评论