ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:22.06KB ,
资源ID:11074781      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11074781.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Linux实验报告.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Linux实验报告.docx

1、Linux实验报告Linux 内核实验报告实验一、 linux 内核开发环境一、实验目的掌握 linux 内核开发环境的安装、调试二、实验内容:虚拟机 bochs 和 virtual PC 的安装、运行使用 nasm 编写简单例程,生成一个简单的引导程序的设计image 文件,并在虚拟机中调试三、实验环境:操作系统 windows 、linux软件工具:见实验配套软件( tools中)其它: 1.44 空白软盘一张四、实验步骤及截图A、虚拟机 bochs 和 virtual PC 的安装、运行使用记事本打开 C:Program FilesBochs-2.3dlxlinux 中的 bochsrc

2、.bxrc 配置文件,浏览该配置文件的内容并回答该 demo linux 模拟启动的方式是软盘。B、windows 环境使用 virtual PC1、建立虚拟机1、进入实验文件夹 Microsoft Virtual PC, 安装并运行 virtual pc 软件。2、按照 virtualPC 的帮助说明,建立一台虚拟计算机。2、使用 nasm 编写简单例程,生成 image 文件1、记事本编辑代码sample.asm:org 07c00h; 告诉编译器程序加载到7c00 处movax, csmovds, axmoves, axcallDispStr; 调用显示字符串例程jmp$; 无限循环Di

3、spStr:movax, BootMessagemovbp, ax; ES:BP =串地址movcx, 16; CX =串长度movax, 01301h; AH = 13, AL = 01hmovbx, 000ch; 页号为 0(BH = 0) 黑底红字 (BL = 0Ch,高亮 )movdl, 0int10h; 10h 号中断retBootMessage:dbHello, OS world!times510-($-$)db0; 填充剩下的空间,使生成的二进制代码恰好为512 字节dw0xaa55; 结束标志2、对该文件进行编译。生成 sample.bin 文件在命令方式中进入实验目录 ,运行

4、命令: nasmw sample.asm o sample.bin 。3、在该目录下以命令方式运行: bximage.exe 选择创建软盘镜像 (fd)文件 sample.img4、将 sample.bin 写入到空白软盘镜像文件中。命令方式运行 :partcopy sample.bin 0 200 sample.img 05、将 sample.img 复制到 bochs 的安装目录,可以新建一个目录比如 sample ,并放入 sample.img 。将 dlx linux 中的配置文件以及批处理文件 run.bat 复制到 sample 。对这两个文件进行适当的修改。并运行。bochsrc

5、 里面修改:floppya: image=sample.img, status=inserted ( 1_44=a 改为 image=sample.img )# floppyb: 1_44=floppyb.img, status=inserted (注释此行)boot: a ( c 改为 a)# hard disk (以下 3 行都注释掉)#ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14#ata0-master: type=disk, path=hd10meg.img, cylinders=306, #heads=4, spt=176

6、、如果使用了真正的软盘,请使用该软盘引导计算机,观察并记录结果。或者直接在 bochs 中使用软驱设备(配置文件需要修改 floppya: 1_44=a:,status=inserted )。7、运行 virtual PC 载入 sample.img 进行模拟。3、建立虚拟机一个简单的引导程序的设计1、打开文件boot.asm ;prog.asm.2、使用实验二的方法进行编译,并生成image 文件,在bochs中模拟运行(以上两步可能用到的命令:nasmw boot.asm o boot.bin nasmw prog.asm o prog.bin partcopy boot.bin 0 20

7、0 floppy.img 0 partcopy prog.bin 0 200 floppy.img 200)3、复制 bochs 中的 run.bat 文件为 rundbg.bat, 并修改有关语句 : .bochsdbg -q -f bochsrc.bxrc4、双击运行 rundbg.bat ,进入调试模式。5、输入 bochs 的调试命令进行调试,观察上述引导程序的执行过程。记录结果。常用 Bochs 的调试命令:help command 查看命令帮助c 连续执行s count 执行 count 条指令,默认为 1 条(仅键入 s 为单步运行 )q 退出调试ctrl-c 定制执行,回到命令

8、行vbreak seg:0ff 设置断点 (比如 vbreak 0x0000:0x7c00)n 单步运行,不跟踪进入子程序u 返汇编info r 查看当前 cpu 寄存器内容dump_cpu 查看 cpu 所有寄存器内容和状态值print-stack 显示当前堆栈的内容详细内容可以查看 bochs 的联机帮助(在 bochs 安装主目录 docs 下)五、实验体会本次实验内容主要是熟悉虚拟机和 Linux 系统操作,因为之前学习操作系统的时候用过 linux,所以觉得操作方面不太难。不过做的时候还是出现了写错误,比如修改 bochsrc的时候 boot 和 floppy 没有对应,runbat

9、 修改的时候忘记修改 img名称等等。经过一番折腾,最终做出实验结果的时候非常开心。此外,之前没用过虚拟机的单步调试, 学习了之后发现非常有帮助, 以后可以考虑把代码放在虚拟机里跑,这样可以互不干扰而且方便文件管理。 通过实验学习到了很多, 之后的实验我会更加认真对待。实验二、 Linux0.01 内核编译环境一、实验目的掌握 linux0.01 内核的编译方法掌握使用虚拟机软件进行内核开发调试的方法二、实验内容:在 virtualPC 和 BOCHS下建立 LINUX0.01 内核开发环境linux0.01 的编译和调试三、实验环境:操作系统 windows 、linux软件工具:见实验配套

10、软件 ( ex2 中)其它:移动存储设备用于保存实验环境四、实验步骤及截图A、在 virtualPC 和 BOCHS 下建立 LINUX0.01 内核开发环境1、VirtualPC 中运行 redhat7.12、virtualPC 虚拟和 windows 的文件互访1、制作虚拟软盘文件。(使用 winimage 新建一个 1.44 软盘文件,将 下的 linux.tar.gz拖到该文件中。然后保存为 a.vfd。这是 virtualPc 默认的虚拟软盘镜像文件格式。2、启动虚拟机 linux7.1 ,以账户 root 登录,口令为 aaaaaa。注意,如果运行时系统提示内存不够,请重新设置虚拟

11、机的内存,比如 64mb。3、加载步骤 1 建立的虚拟软盘文件。则该文件就成为虚拟机的软盘。4、将该软盘挂载到 linux 的 /mnt/floppy 下。命令如下:rootlocalhost /root# mount -t vfat /dev/fd0 /mnt/floppy5、运行命令: cd /mnt/floppyls 如果正常就可以看见软盘中的linux.tar.gz文件。6、可以将该文件复制到虚拟操作系统的其他路径中,比如,复制到在 /home/floppy 中,可以这样操作:rootlocalhost floppy# mkdir /home/floppy rootlocalhost

12、floppy# cp /mnt/floppy/* /home/floppy rootlocalhost floppy# ls /home/floppy新建一个目录复制到新目录中浏览新目录Linux.tar.gz3、将虚拟机系统中的文件输出到宿主机windows中1、如果使用虚拟软盘镜像文件, 则将虚拟机中的文件输出到 windows 中,也可以先按照上面步骤 6 的方法进行,只不过是将文件复制到虚拟软盘挂载到的路径上,比如,要将虚拟机 /tmp/ 下的 install.log 文件复制到虚拟软盘镜像中,可如下操作:rootlocalhost /tmp# cp /tmp/install.log

13、/mnt/floppyrootlocalhost /tmp# ls /mnt/floppyinstall.log Linux.tar.gz2、如果要将该文件从虚拟软盘中读出来, 首先需要先将该虚拟软盘文件从虚拟机操作系统的文件系统中卸载,然后释放改虚拟软盘。运行命令:rootlocalhost /tmp# umount /mnt/floppyrootlocalhost /tmp#3、运行 winimage 打开 a.vfd。将需要的文件拖到 windows 中即可。B、linux0.01 的编译和调试1、linux0.01 的编译1、按照实验一, 任务 2 的方法, 把 linux0.01 源

14、代码压缩包 linux.tar.gz 复制到虚拟机的 /home/myfile 下。2、使用 cd /home/myfile 命令进入该目录,然后运行如下命令解压缩到目录中多出一个新的目录 linux ,此目录存放的就是 linux0.01,完成后可以看的源代码。rootlocalhost /tmp# cd /home/myfilerootlocalhost myfile# lsLinux.tar.gzrootlocalhost myfile# gzip d Linux.tar.gzrootlocalhost myfile# tar xvf Linux.tarrootlocalhost myf

15、ile# lslinux Linux.tar3、编译 linux0.01 ,注意首先要修改 tools/build 和 ndisasm 的文件属性,给它加上可执行权。然后在 linux 目录中执行 make。rootlocalhost myfile# cd linuxrootlocalhost linux# cd toolsrootlocalhost tools# chmod +x ./tools/build#修改文件属性,增加可执行权rootlocalhost tools# chmod +x./ndisasmrootlocalhost tools# ls -ltotal 20-rwxr-xr

16、-x1 rootroot13019 Sep 182001 build-rw-r-r-1 rootroot1722 Sep 182001 build.crootlocalhost tools# cd ./.rootlocalhost linux# make4、按如上方法编译成功后,在linux目录下应该有Image 和 System.map,System.asm文件。5、制作 linux0.01 引导盘。首先使用 bximage.exe 创建一个虚拟软盘文件 a.img。将该文件载入到虚拟机。或者插入一个真正的软盘,然后载入到虚拟机。6、运行命令 make disk ,生成能够的 linux0.

17、01 系统引导盘。7、运行命令 init 0 关闭虚拟机(请特别注意不要直接复位或关闭虚拟机) ,然后重新启动。在启动过程中请载入刚才生成的系统引导盘,虚拟机将会被引导进入 linux0.01 。8、系统引导後,按动键盘如果打印出按键的 ascii 码则表示引导成功。9、将编译生成的 System.map 输出到 windows 中,方法如下:10、重新进入 redhat7.1 建立一个虚拟软盘 b.img,载入到虚拟机。11、运行命令格式化该虚拟软盘为 msdos 格式。然后 mount ,进行复制。rootlocalhost linux# mformat a:rootlocalhost l

18、inux# mount /dev/fd0 /mnt/floppyrootlocalhost linux# cp System.map /mnt/floppyrootlocalhost linux# umount /mnt/floppy2、linux0.01 在 bochs 中调试1、使用任务 1 生成的 linux0.01 引导软盘镜像文件 a.img。在 bochs 中进行引导2、参考上次实验内容在 bochs 中调试 linux0.01 的运行情况,特别是观察 boot.s 和head.s 部分代码的运行情况。3、可以在线性地址 0 处设置断点,查看 System.map,找出 main

19、的入口地址,并设置断点,观察 head.s 的运行情况,根据观察结果,请回答 head.s 运行完后,页目录和页表部分的值是什么。 2、对该文件进行编译。生成 sample.bin 文件五、实验体会本次实验内容主要是熟悉使用 linux 内核的编译方法和调试方法。较实验一来说,实验难度有所增加, 所以做的时候的确遇到了不少问题。 比如修改文件属性的时候 chmod 指令中忘了加 .而且文件所在目录进入有误导致结果不对,后来查了指令集后才弄清楚。 还有单步调试的时候开始不会设断点, 问过同学之后才学会。通过本次实验比上次实验收获得更多, 自己动手才会有收获, 相信接下来的实验中我会更加认真,也会

20、学到更多。实验三、 linux 任务切换实验一、实验目的通过一个在内核中预先设置的任务切换,理解 linux 任务运行和切换的机制。二、实验内容:Linux0.00 的编译和修改说明:本例是 linux0.00 版的源代码, boot.s 和 head.s 的功能基本如课程中介绍,但略有修改, head.s 中增加了两个任务( task),并且通过时钟中断轮流进行任务的切换,这两个任务通过系统调用向终端显示字符。三、实验环境:操作系统 windows 、virPC,BOCHS四、实验步骤及截图1、下载实验目录中的 linux000 文件 (boot.s,head.s,makefile)2、 根

21、据前面实验的方法,在 virtualPC 的 linux7.1 环境中编译,用生成的 image 制作一个引导软盘镜像。3、 用该软盘镜像引导系统,观察结果。 ( AB 交替循环出现)4、在 bochs 中观察任务切换时 cpu 的各个寄存器的变化。5、根据观察试着阐述 linux000 中,gdt,ldt,idt 中的描述符都有哪些, 作用如何,本例中任务调用的方式有哪些进一步思考题:试着修改 head.s,增加一个任务,并让三个任务进行轮流切换。( 1)增加任务 2 的 TSS和 LDT 的选择符TSS2_SEL = 0x40LDT2_SEL= 0x48( 2)修改中断处理timer_in

22、terrupt:push %dspushl %eaxmovl $0x10, %eaxmov %ax, %dsmovb $0x20, %aloutb %al, $0x20movl $1, %eaxcmpl %eax, currentje 1f# 当前为任务1,则跳转为任务0jl 3f# 当前为任务0,则跳转为任务2movl %eax, currentljmp $TSS1_SEL, $0jmp 2f# 当前为任务2,则跳转为任务11:movl $0, currentljmp $TSS0_SEL, $0jmp 2f3:movl $2, currentljmp $TSS2_SEL, $02: popl

23、 %eax pop %ds iret( 3)任务 2 的 ldt 和 tss 段ldt2: .quad 0x0000000000000000.quad 0x00c0fa00000003ff# 0x0f, base = 0x00000.quad 0x00c0f200000003ff# 0x17tss2: .long 0/* back link */.long krn_stk2, 0x10/* esp0, ss0 */.long 0, 0, 0, 0, 0/* esp1, ss1, esp2, ss2, cr3 */.long task2, 0x200/* eip, eflags */.long

24、0, 0, 0, 0/* eax, ecx, edx, ebx */.long usr_stk2, 0, 0, 0/* esp, ebp, esi, edi */.long 0x17,0x0f,0x17,0x17,0x17,0x17 /* es, cs, ss, ds, fs, gs */.long LDT2_SEL, 0x8000000/* ldt, trace bitmap */.fill 128,4,0krn_stk2:( 4)增加任务 2,打印 C task2:movl $0x17, %eaxmovw %ax, %dsmovb $68, %al /* print D C 在系统中断时会

25、显示 */ int $0x80movl $0xfff, %ecx1: loop 1b jmp task2.fill 128,4,0usr_stk2:修改后结果:五、实验体会本次实验因为有修改代码的部分, 所以感觉还是比较有难度的。 第一步跟上个实验比较相似,把给定文件拷贝到虚拟机里新建的文件夹中然后再 make disk一个软盘镜像, 然后再用其引导系统, 做出实验结果的时候还是比较顺利的。 改代码的部分就不大容易了, 虽然照着原来的代码和注释进行修改, 但也一直无法编译或者运行总是跳出到系统中断中, 最后不断的调试、又问了同学才做出结果。要学习的还有好多,虽然实验已经结束了,但相信之后要用到虚拟机和 linux 系统的机会还有很多。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1