操作系统实验报告-熟悉实验环境

实验材料准备

下载实验包hit-oslab-linux-20110823.tar.gz(包含linux-0.11源码、bochs虚拟机等):

https://cms.hit.edu.cn/pluginfile.php/3329/mod_folder/content/6/hit-oslab/hit-oslab-linux-20110823.tar.gz?forcedownload=1

下载gcc-3.4-ubuntu.tar.gz(编译linux-0.11需要用到的低版本gcc):

https://cms.hit.edu.cn/pluginfile.php/3329/mod_folder/content/6/hit-oslab/gcc-3.4-ubuntu.tar.gz?forcedownload=1

实验环境设置(ubuntu-16.04.1-desktop-amd64)

实验材料

在~(用户Home文件夹)下创建workspace文件夹,将hit-oslab-linux-20110823.tar.gz解压到workspace下:

mkdir workspace
cd workspace
tar xzf hit-oslab-linux-20110823.tar.gz

gcc-3.4安装

解压gcc-3.4-ubuntu.tar.gz到/opt下:

cd /opt
tar xzf ~/Downloads/gcc-3.4-ubuntu.tar.gz

安装gcc-3.4(因为我的是64位系统,所以安装参数为amd64;若为32位系统,参数应为i386):

cd gcc-3.4
sudo ./inst.sh amd64

as86、ld86安装(用于编译和链接linux-0.11/boot下的bootsect.s和setup.s,它们采用as86汇编语法;而linux-0.11下的其他汇编语言文件采用gas的语法AT&T)

搜索包含as86、ld86的包:

apt-cache search as86 ld86

执行结果:

bin86 - 16-bit x86 assembler and loader

安装bin86:

sudo apt-get install bin86

64位系统需要安装32位兼容库:

sudo apt-get install libc6-dev-i386 

C语言编译环境

sudo apt-get install build-essential

安装IDE

sudo apt-get install vim cscope exuberant-ctags

编译内核

1 cd ~/workspace/oslab/linux-0.11
2 make

编译中断,输出错误信息:

In file included from /usr/include/linux/fs.h:10,
                 from tools/build.c:28:
/usr/include/linux/ioctl.h:4:23: asm/ioctl.h: No such file or directory
In file included from /usr/include/linux/fs.h:11,
                 from tools/build.c:28:
/usr/include/linux/types.h:4:23: asm/types.h: No such file or directory
In file included from /usr/include/linux/types.h:8,
                 from /usr/include/linux/fs.h:11,
                 from tools/build.c:28:
/usr/include/linux/posix_types.h:35:29: asm/posix_types.h: No such file or directory
In file included from /usr/include/linux/fs.h:11,
                 from tools/build.c:28:
/usr/include/linux/types.h:27: error: syntax error before "__le16"
/usr/include/linux/types.h:28: error: syntax error before "__be16"
/usr/include/linux/types.h:29: error: syntax error before "__le32"
/usr/include/linux/types.h:30: error: syntax error before "__be32"
/usr/include/linux/types.h:31: error: syntax error before "__le64"
/usr/include/linux/types.h:32: error: syntax error before "__be64"
/usr/include/linux/types.h:34: error: syntax error before "__sum16"
/usr/include/linux/types.h:35: error: syntax error before "__wsum"
In file included from tools/build.c:28:
/usr/include/linux/fs.h:43: error: syntax error before "__u64"
/usr/include/linux/fs.h:45: error: syntax error before "minlen"
make: *** [tools/build] Error 1

google搜索得知是因为64位linux的asm目录为:

/usr/include/x86_64-linux-gnu/asm

make找不到文件从而导致编译中断

解决方法(建立链接):

sudo ln -s /usr/include/x86_64-linux-gnu/asm /usr/include/asm

运行和调试

运行

运行编译好的内核,在oslab目录下:

./run

出现错误:

./bochs/bochs-gdb: error while loading shared libraries: libSM.so.6: cannot open shared object file: No such file or directory

打印动态链接配置:

ldconfig -p | grep libSM.so.6

libSM.so.6的链接信息:

libSM.so.6 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libSM.so.6

我们需要的是32位的。搜索库对应的包名称:

apt-file search libSM.so.6

打印结果:

libsm6: /usr/lib/x86_64-linux-gnu/libSM.so.6
libsm6: /usr/lib/x86_64-linux-gnu/libSM.so.6.0.1

得到其对应的包名为libsm6,安装对应的32位库:

sudo apt-get install libsm6:i386

再次尝试,出现错误:

./bochs/bochs-gdb: error while loading shared libraries: libXpm.so.4: cannot open shared object file: No such file or directory

也可按以上方法解决,不过这里用了另一个工具:

dpkg-query -S libXpm.so.4

同理解决之,再次尝试:

./run

成功运行!

调试

汇编级调试

./dbg-asm

操作参考Bochs使用手册

C语言级调试

./dbg-c

Ctrl+Alt+T打开另一个终端窗口,进到~/workspace/oslab下执行:

./rungdb

出现两次库不存在错误,按照上面的方法安装对应32位库解决后运行成功:

操作参考GDB的Manuel:

man gdb

Ubuntu与Linux-0.11之间的文件交换

挂载Linux-0.11

./mount-hdc

mount-hdc是一个shell脚本:

1 #!/bin/sh
2 export OSLAB_PATH=$(dirname `which $0`)
3 mount -t minix -o loop,offset=1024 $OSLAB_PATH/hdc-0.11.img $OSLAB_PATH/hdc 

第1行 指明脚本使用的shell

第2行 将调用本脚本的目录设置为oslab的目录

第3行 根据mount的manual手册,

    -t minix 表示要挂载的文件系统类型为minix

    -o[ption] 可以有3个参数(参考losetup的manual):

      loop 可以指定文件所映射的回环设备;若不指定,则由mount自动搜寻

      offset 指定文件或设备中数据起始位置在该文件或设备中的偏移

      sizelimit 从offset开始算起文件或设备的最大大小

   故此行将$OSLAB_PATH/hdc-0.11.img映射到mount搜寻到的设备中,文件系统为minix,数据起始偏移为1024byte,再挂载到$OSLAB_PATH/hdc目录下。

这样Ubuntu就可以在$OSLAB_PATH/hdc下访问Linux-0.11的文件了。

卸载Linux-0.11

在oslab目录下:

umount hdc

注意

1:不要在0.11内核运行的时候mount镜像文件,否则可能会损坏文件系统。同理,也不要在已经mount的时候运行0.11内核;

2:在关闭Bochs之前,需要先在Linux-0.11的命令行运行“sync”,确保所有缓存数据都存盘后,再关闭Bochs。

参考

as86、ld86安装

内核编译asm不存在错误

loop device回环设备

时间: 2024-12-29 23:48:53

操作系统实验报告-熟悉实验环境的相关文章

Java实验报告(实验四)

北京电子科技学院(BESTI) 实     验    报     告 课程:Java    班级:1352班      姓名:王国伊    学号:20135207 成绩:             指导教师:娄嘉鹏       实验日期:2015.6.9 实验密级:无       预习程度:           实验时间:15:30-18:00 仪器组次:         必修/选修:选修     实验序号:四 实验名称:  服务器与客户端间传送信息加解密 实验目的与要求: 1.没有Linux基础

2017-2018 20162329 张旭升 实验报告:实验四

实验四:图及应用 课程:程序设计与数据结构 班级: 1623 姓名: 张旭升 学号:20162329 指导教师:娄嘉鹏 王志强 实验日期:11月22日 实验密级: 非密级 预习程度: 已预习 必修/选修: 必修 实验序号: cs_29 实验名称: 查找与排序的应用,实现和分析 实验内容: 1. 已实现的排序方法测试 2. 已实现代码重构 3. 补充查找算法 4. 补充排序算法 5. Android实现排序查找 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><

Java第一次实验报告——Java开发环境的熟悉

北京电子科技学院(BESTI) 实    验    报    告 课程名称:java程序设计实验      班级:1352         姓名:洪韶武      学号:20135219 成绩:                           指导教师:娄嘉鹏                    实验日期:2015.04.14 实验密级:                    预习程度:                               实验时间: 仪器组次:          

实验报告(实验一)

北京电子科技学院(BESTI) 实     验    报     告 课程: 密码系统设计基础                                                               班级: 1352班.1353班 姓名:王玥.刘浩晨                                                                    学号:20135232.20135318 成绩:                      

Java实验报告(实验一)

北京电子科技学院 实     验    报     告 课程:移动平台应用开发实践    班级:201592            姓名:艾鸽   学号:20159201 成绩:                               指导教师:娄嘉鹏          实验日期:2015.9.28 实验密级:                         预习程度:                   实验时间:8:00-12:00 仪器组次:                      

java实验报告(实验二)

实     验    报     告 课程:移动平台应用开发实践   班级:201592     姓名:王鹤  学号:20159202 成绩:             指导教师:娄嘉鹏           实验日期:2015.10.3 实验密级:          预习程度:                 实验时间: 仪器组次:          必修/选修:选修          实验序号:1 实验名称:     Java开发环境的熟悉 实验目的与要求: 1. 初步掌握单元测试和TDD 2.

实验报告(实验三)

北京电子科技学院(BESTI) 实     验    报     告 课程: 密码系统设计基础                     班级: 1352班.1353班 姓名:刘浩晨.王玥                学号:20135318. 20135232 成绩:             指导教师:娄嘉鹏       实验日期:2015.11.24 实验密级:        预习程度:        实验时间:15:30—18:00 仪器组次:          必修/选修:        

第七章实验报告(数组实验)

C语言程序设计实验报告 实验项目: 1.一维数组的应用 2.二维数组的应用 3.字符数组应用 姓名:徐溢璠     实验地点: 514实验室       实验时间:2019年5月29日 一.实验目的与要求 1.一维数组的应用 定义一个一维整型数组,其大小为10,即它能存放10个数据: 使用循环语句,利用随机函数产生10个整数存放在数组中: 编写排序函数sort1(): 使用循环语句,将排好序的10个数依次输出. 2.二维数组的应用 怎样定义和使用二维数组: 怎样用循环进行二维数组中值的计算: 使

实验报告:实验九

实验内容: 1. 补全程序 t1.asm,完成在屏幕上输出内存单元中的十进制两位数. ; 在屏幕上输出内存单元中的十进制两位数 assume cs:code, ds:data data segment db 12 db ?,? ; 前一个字节用于保存商,后一个字节用于保存余数 data ends code segment start: mov ax,data mov ds,ax ; 补全指令,使得ds <-- data段地址 mov ah,0 mov al,ds:[0] ; ax <-- da