Linux实验报告.docx

上传人:b****8 文档编号:11074781 上传时间:2023-02-24 格式:DOCX 页数:18 大小:22.06KB
下载 相关 举报
Linux实验报告.docx_第1页
第1页 / 共18页
Linux实验报告.docx_第2页
第2页 / 共18页
Linux实验报告.docx_第3页
第3页 / 共18页
Linux实验报告.docx_第4页
第4页 / 共18页
Linux实验报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

Linux实验报告.docx

《Linux实验报告.docx》由会员分享,可在线阅读,更多相关《Linux实验报告.docx(18页珍藏版)》请在冰豆网上搜索。

Linux实验报告.docx

Linux实验报告

 

Linux内核实验报告

 

实验一、linux内核开发环境

 

一、实验目的

掌握linux内核开发环境的安装、调试

 

二、实验内容:

虚拟机bochs和virtualPC的安装、运行

使用nasm编写简单例程,生成一个简单的引导程序的设计

image文件,并在虚拟机中调试

 

三、实验环境:

操作系统windows、linux

软件工具:

见实验配套软件

(tools

中)

其它:

1.44空白软盘一张

 

四、实验步骤及截图

A、虚拟机bochs和virtualPC的安装、运行

使用记事本打开C:

\ProgramFiles\Bochs-2.3\dlxlinux中的bochsrc.bxrc配置文件,

浏览该配置文件的内容并回答该demolinux模拟启动的方式是软盘。

 

B、windows环境使用virtualPC

1、建立虚拟机

1、进入实验文件夹\MicrosoftVirtualPC,安装并运行virtualpc软件。

2、按照virtualPC的帮助说明,建立一台虚拟计算机。

 

2、使用nasm编写简单例程,生成image文件

1、记事本编辑代码

sample.asm:

org07c00h

;告诉编译器程序加载到

7c00处

mov

ax,cs

mov

ds,ax

mov

es,ax

call

DispStr

;调用显示字符串例程

jmp

$

;无限循环

DispStr:

mov

ax,BootMessage

mov

bp,ax

;ES:

BP=串地址

mov

cx,16

;CX=串长度

mov

ax,01301h

;AH=13,AL=01h

mov

bx,000ch

;页号为0(BH=0)黑底红字(BL=0Ch,高亮)

mov

dl,0

int

10h

;10h号中断

ret

BootMessage:

db

"Hello,OSworld!

"

times

510-($-$$)

db

0;填充剩下的空间,使生成的二进制代码恰好为

512字节

dw

0xaa55

;结束标志

 

2、对该文件进行编译。

生成sample.bin文件

在命令方式中进入实验目录,运行命令:

nasmwsample.asm–osample.bin。

 

3、在该目录下以命令方式运行:

bximage.exe选择创建软盘镜像(fd)文件sample.img

 

4、将sample.bin写入到空白软盘镜像文件中。

命令方式运行:

partcopysample.bin0200sample.img0

 

5、将sample.img复制到bochs的安装目录,可以新建一个目录比如\sample,并放

入sample.img。

将dlxlinux中的配置文件以及批处理文件run.bat复制到\sample。

对这两个文件进行适当的修改。

并运行。

 

bochsrc里面修改:

floppya:

image=sample.img,status=inserted(1_44=a改为image=sample.img)

#floppyb:

1_44=floppyb.img,status=inserted(注释此行)

boot:

a(c改为a)

#harddisk(以下3行都注释掉)

#ata0:

enabled=1,ioaddr1=0x1f0,ioaddr2=0x3f0,irq=14

#ata0-master:

type=disk,path="hd10meg.img",cylinders=306,#heads=4,spt=17

 

6、如果使用了真正的软盘,请使用该软盘引导计算机,观察并记录结果。

或者直接

 

在bochs中使用软驱设备(配置文件需要修改floppya:

1_44=a:

status=inserted)。

 

7、运行virtualPC载入sample.img进行模拟。

 

3、建立虚拟机一个简单的引导程序的设计

1、打开文件

boot.asm;prog.asm.

2、使用实验二的方法进行编译,并生成

image文件,在

bochs

中模拟运行

(以上两步可能用到的命令:

nasmwboot.asm–oboot.binnasmwprog.asm–oprog.binpartcopyboot.bin0200floppy.img0partcopyprog.bin0200floppy.img200

 

 

3、复制bochs中的run.bat文件为rundbg.bat,并修改有关语句:

..\bochsdbg-q-fbochsrc.bxrc

 

4、双击运行rundbg.bat,进入调试模式。

5、输入bochs的调试命令进行调试,观察上述引导程序的执行过程。

记录结果。

常用Bochs的调试命令:

help‘command’查看命令帮助

c连续执行

 

s[count]执行count条指令,默认为1条(仅键入s为单步运行)

q退出调试

ctrl-c定制执行,回到命令行

vbreakseg:

0ff设置断点(比如vbreak0x0000:

0x7c00)

n单步运行,不跟踪进入子程序

u返汇编

infor查看当前cpu寄存器内容

dump_cpu查看cpu所有寄存器内容和状态值

print-stack显示当前堆栈的内容

详细内容可以查看bochs的联机帮助(在bochs安装主目录\docs下)

 

五、实验体会

本次实验内容主要是熟悉虚拟机和Linux系统操作,因为之前学习操作系统

的时候用过linux,所以觉得操作方面不太难。

不过做的时候还是出现了写错误,

比如修改bochsrc的时候boot和floppy没有对应,runbat修改的时候忘记修改img

名称等等。

经过一番折腾,最终做出实验结果的时候非常开心。

此外,之前没用

过虚拟机的单步调试,学习了之后发现非常有帮助,以后可以考虑把代码放在虚

拟机里跑,这样可以互不干扰而且方便文件管理。

通过实验学习到了很多,之后

的实验我会更加认真对待。

 

实验二、Linux0.01内核编译环境

 

一、实验目的

掌握linux0.01内核的编译方法

掌握使用虚拟机软件进行内核开发调试的方法

 

二、实验内容:

在virtualPC和BOCHS下建立LINUX0.01内核开发环境

linux0.01的编译和调试

 

三、实验环境:

操作系统windows、linux

软件工具:

见实验配套软件(ex2中)

其它:

移动存储设备用于保存实验环境

 

四、实验步骤及截图

A、在virtualPC和BOCHS下建立LINUX0.01内核开发环境

1、VirtualPC中运行redhat7.1

 

2、virtualPC虚拟和windows的文件互访

1、制作虚拟软盘文件。

(使用winimage新建一个1.44软盘文件,将下的linux.tar.gz

拖到该文件中。

然后保存为a.vfd。

这是virtualPc默认的虚拟软盘镜像文件格式。

 

2、启动虚拟机linux7.1,以账户root登录,口令为aaaaaa。

注意,如果运行时系统

提示内存不够,请重新设置虚拟机的内存,比如64mb。

3、加载步骤1建立的虚拟软盘文件。

则该文件就成为虚拟机的软盘。

4、将该软盘挂载到linux的/mnt/floppy下。

命令如下:

[root@localhost/root]#mount-tvfat/dev/fd0/mnt/floppy

5、运行命令:

cd/mnt/floppy

ls如果正常就可以看见软盘中的

 

linux.tar.gz

 

文件。

 

6、可以将该文件复制到虚拟操作系统的其他路径中,比如,复制到在/home/floppy中,可以这样操作:

[root@localhostfloppy]#mkdir/home/floppy[root@localhostfloppy]#cp/mnt/floppy/*/home/floppy[root@localhostfloppy]#ls/home/floppy

新建一个目录

复制到新目录中

浏览新目录

Linux.tar.gz

 

3、将虚拟机系统中的文件输出到宿主机

 

windows

 

1、如果使用虚拟软盘镜像文件,则将虚拟机中的文件输出到windows中,也可以先

按照上面步骤6的方法进行,只不过是将文件复制到虚拟软盘挂载到的路径上,比

如,要将虚拟机/tmp/下的install.log文件复制到虚拟软盘镜像中,可如下操作:

[root@localhost/tmp]#cp/tmp/install.log/mnt/floppy

[root@localhost/tmp]#ls/mnt/floppy

install.logLinux.tar.gz

 

2、如果要将该文件从虚拟软盘中读出来,首先需要先将该虚拟软盘文件从虚拟机操作系统的文件系统中卸载,然后释放改虚拟软盘。

运行命令:

[root@localhost/tmp]#umount/mnt/floppy

[root@localhost/tmp]#

 

3、运行winimage打开a.vfd。

将需要的文件拖到windows中即可。

 

B、linux0.01的编译和调试

1、linux0.01的编译

1、按照实验一,任务2的方法,把linux0.01源代码压缩包linux.tar.gz复制到虚拟机

的/home/myfile下。

2、使用cd/home/myfile命令进入该目录,然后运行如下命令解压缩

到目录中多出一个新的目录linux,此目录存放的就是linux0.01

完成后可以看的源代码。

[root@localhost/tmp]#cd/home/myfile

[root@localhostmyfile]#ls

Linux.tar.gz

 

[root@localhostmyfile]#gzip–dLinux.tar.gz

[root@localhostmyfile]#tarxvfLinux.tar

[root@localhostmyfile]#ls

linuxLinux.tar

 

3、编译linux0.01,注意首先要修改tools/build和ndisasm的文件属性,给它加上可执行权。

然后在linux目录中执行make。

[root@localhostmyfile]#cdlinux

[root@localhostlinux]#cdtools

[root@localhosttools]#chmod+x./tools/build

 

#修改文件属性,增加可执行权

[root@localhosttools]#chmod+x

./ndisasm

[root@localhosttools]#ls-l

total20

-rwxr-xr-x

1root

root

13019Sep18

2001build

-rw-r--r--

1root

root

1722Sep18

2001build.c

[root@localhosttools]#cd../..

[root@localhostlinux]#make

 

4、按如上方法编译成功后,在

 

linux

 

目录下应该有

 

Image和System.map,System.asm

文件。

 

5、制作linux0.01引导盘。

首先使用bximage.exe创建一个虚拟软盘文件a.img。

将该文件载入到虚拟机。

或者插入一个真正的软盘,然后载入到虚拟机。

 

6、运行命令makedisk,生成能够的linux0.01系统引导盘

 

7、运行命令init0关闭虚拟机(请特别注意不要直接复位或关闭虚拟机),然后重

新启动。

在启动过程中请载入刚才生成的系统引导盘,虚拟机将会被引导进入linux0.01。

8、系统引导後,按动键盘如果打印出按键的ascii码则表示引导成功。

 

9、将编译生成的System.map输出到windows中,方法如下:

10、重新进入redhat7.1建立一个虚拟软盘b.img,载入到虚拟机。

 

11、运行命令格式化该虚拟软盘为msdos格式。

然后mount,进行复制。

[root@localhostlinux]#mformata:

[root@localhostlinux]#mount/dev/fd0/mnt/floppy

[root@localhostlinux]#cpSystem.map/mnt/floppy

[root@localhostlinux]#umount/mnt/floppy

 

2、linux0.01在bochs中调试

1、使用任务1生成的linux0.01引导软盘镜像文件a.img。

在bochs中进行引导

 

2、参考上次实验内容在bochs中调试linux0.01的运行情况,特别是观察boot.s和

 

head.s部分代码的运行情况。

3、可以在线性地址0处设置断点,查看System.map,找出main的入口地址,并设

置断点,观察head.s的运行情况,根据观察结果,请回答head.s运行完后,页

目录和页表部分的值是什么。

2、对该文件进行编译。

生成sample.bin文件

 

五、实验体会

本次实验内容主要是熟悉使用linux内核的编译方法和调试方法。

较实验一

 

来说,实验难度有所增加,所以做的时候的确遇到了不少问题。

比如修改文件属

性的时候chmod指令中忘了加.而且文件所在目录进入有误导致结果不对,后来

查了指令集后才弄清楚。

还有单步调试的时候开始不会设断点,问过同学之后才

学会。

通过本次实验比上次实验收获得更多,自己动手才会有收获,相信接下来

的实验中我会更加认真,也会学到更多。

 

实验三、linux任务切换实验

 

一、实验目的

通过一个在内核中预先设置的任务切换,理解linux任务运行和切换的机制。

 

二、实验内容:

Linux0.00的编译和修改

说明:

本例是linux0.00版的源代码,boot.s和head.s的功能基本如课程中介绍,但略有修改,head.s中增加了两个任务(task),并且通过时钟中断轮流进行任务的切换,这两个任务通过系统调用向终端显示字符。

 

三、实验环境:

操作系统windows、virPC,BOCHS

 

四、实验步骤及截图

 

1、下载实验目录中的linux000文件(boot.s,head.s,makefile)

 

2、根据前面实验的方法,在virtualPC的linux7.1环境中编译,用生成的image制作一个引导软盘镜像。

 

3、用该软盘镜像引导系统,观察结果。

(AB交替循环出现)

 

4、在bochs中观察任务切换时cpu的各个寄存器的变化。

 

5、根据观察试着阐述linux000中,gdt,ldt,idt中的描述符都有哪些,作用如何,本例中任务调用的方式有哪些

 

进一步思考题:

试着修改head.s,增加一个任务,并让三个任务进行轮流

 

切换。

(1)增加任务2的TSS和LDT的选择符

TSS2_SEL=0x40

LDT2_SEL=0x48

 

(2)修改中断处理

timer_interrupt:

push%ds

pushl%eax

movl$0x10,%eax

mov%ax,%ds

movb$0x20,%al

outb%al,$0x20

movl$1,%eax

cmpl%eax,current

je1f

#当前为任务

1,则跳转为任务

0

jl3f

#当前为任务

0,则跳转为任务

2

movl%eax,current

ljmp$TSS1_SEL,$0

jmp2f

#当前为任务

2,则跳转为任务

1

1:

movl$0,current

ljmp$TSS0_SEL,$0

jmp2f

3:

movl$2,current

ljmp$TSS2_SEL,$0

2:

popl%eaxpop%dsiret

(3)任务2的ldt和tss段

ldt2:

.quad0x0000000000000000

.quad0x00c0fa00000003ff

#0x0f,base=0x00000

.quad0x00c0f200000003ff

#0x17

tss2:

.long0

/*backlink*/

.longkrn_stk2,0x10

/*esp0,ss0*/

.long0,0,0,0,0

/*esp1,ss1,esp2,ss2,cr3*/

.longtask2,0x200

/*eip,eflags*/

.long0,0,0,0

/*eax,ecx,edx,ebx*/

.longusr_stk2,0,0,0

/*esp,ebp,esi,edi*/

.long0x17,0x0f,0x17,0x17,0x17,0x17/*es,cs,ss,ds,fs,gs*/

.longLDT2_SEL,0x8000000

/*ldt,tracebitmap*/

.fill128,4,0

krn_stk2:

 

(4)增加任务2,打印Ctask2:

movl$0x17,%eax

movw%ax,%ds

movb$68,%al/*print'D'C在系统中断时会显示*/int$0x80

 

movl$0xfff,%ecx

1:

loop1bjmptask2

.fill128,4,0

usr_stk2:

修改后结果:

 

五、实验体会

 

本次实验因为有修改代码的部分,所以感觉还是比较有难度的。

第一步跟上

个实验比较相似,把给定文件拷贝到虚拟机里新建的文件夹中然后再makedisk

一个软盘镜像,然后再用其引导系统,做出实验结果的时候还是比较顺利的。

改代码的部分就不大容易了,虽然照着原来的代码和注释进行修改,但也一直无法编译或者运行总是跳出到系统中断中,最后不断的调试、又问了同学才做出结果。

要学习的还有好多,虽然实验已经结束了,但相信之后要用到虚拟机和linux系统的机会还有很多。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 少儿英语

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

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