没有合适的资源?快使用搜索试试~ 我知道了~
18342075米家龙实验2第1部分1
需积分: 0 0 下载量 195 浏览量
2022-08-03
11:57:08
上传
评论
收藏 2.19MB PDF 举报
温馨提示
试读
20页
1. 设置变量 2. 调整 GCC 参数 3. 调整 qemu 参数 4. 选择编译器和设置编译时的参数 5. 其他相关命令 6. 设置函数 8. 创建 boo
资源详情
资源评论
资源推荐
实验 2 第 1 部分
实验 2 第 1 部分
个人信息
实验名称
实验目的
实验要求
实验环境
实验过程
修改命令提示符
查看 lab1 中的 Makefile
详细解释 Makefile 代码
1. 设置变量
2. 调整 GCC 参数
3. 调整 qemu 参数
4. 选择编译器和设置编译时的参数
5. 其他相关命令
6. 设置函数
7. kernel
8. 创建 bootblock
9. 创建 sign 相关的工具
10. 创建镜像文件
11. 脚本命令相关
使用 make 之后,查看打印的信息
一个被系统认为是符合规范的磁盘主引导扇区的特征是什么?
使用 qemu 执行并调试 lab1 中的软件
从 CPU 加电后执行第一条指令开始,单步跟踪 BIOS 的执行
在初始化位置 0x7c00 设置实地址断点,测试断点正常
改变参数后的部分操作
实验结果
实验总结
1. qemu 启动报错
2. 找不到 bootblock.asm 文件
个人信息
数据科学与计算机学院
2018 级 米家龙
实验名称
系统软件启动过程
实验目的
熟悉并掌握 Ubuntu 系统的相关操作
熟悉并掌握 Makefile 的相关语法
熟悉并掌握 Make 生成执行文件的过程
了解并掌握硬件模拟器 Qemu 的操作
熟悉并掌握 gdb 的相关操作
学会使用 Qemu 和 gdb 运行和调试程序
实验要求
1. 修改 u-Core 虚拟机的命令提示符
2. 理解通过 make 生成执行文件的过程,回答如下问题:
1. 操作系统镜像文件 ucore.img 是如何一步步生成的?(需要详细地解释 Makefile 中每一条相
关命令和命令参数的含义,以及说明命令导致的相关结果)
2. 一个被系统认为是符合规范的磁盘主引导扇区的特征是什么?
3. 使用 qemu 执行并调试 lab1 中的软件,简要写出练习过程:
从 CPU 加电后执行第一条指令开始,单步跟踪 BIOS 的执行
在初始化位置 0x7c00 设置实地址断点,测试断点正常
在调用 qemu 时增加
-d in_asm -D q.log 参数,便可以将运行的汇编指令保存在
q.log 中。将执行的汇编代码与 bootasm.S 和 bootblock.asn 进行比较,看看二者是否一
致
实验环境
使用老师提供的
mooc-os-2015.vdi ,在虚拟机中创建 64 位的 Ubuntu 虚拟机并加载该 vdi ,获得了版
本为:
的虚拟机操作系统
而为了方便使用 vs code 进行代码的编辑,会使用 windows 下的 WSL 虚拟机作为终端,和 moocos 通过
ssh 进行连接,从而实现在虚拟机外部使用命令行进行相关系统操作和文件传输。
WSL 环境配置如下:
使用 vs code 的终端打开 WSL ,通过 ssh 连接到 moocos 虚拟机的效果如下图:
Linux moocos-VirtualBox 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014
x86_64 x86_64 x86_64 GNU/Linux
root@LAPTOP-QTCGESHO:/mnt/d/blog/work/matrix/step1/001# uname -a
Linux LAPTOP-QTCGESHO 4.4.0-19041-Microsoft #1-Microsoft Fri Dec 06 14:06:00 PST 2019
x86_64 x86_64 x86_64 GNU/Linux
root
@
LAPTOP
-
QTCGESHO
:
/
mnt
/
d
/
blog
/
work
/
matrix
/
stepl
/
001
#
i
Linux
LAPTOP
-
QTCGESHO
4.4
.
0
-
19041
-
Microsoft
#
1
-
Microsoft
inux
14
:
06
:
00
PST
2019
X
86
实验过程
修改命令提示符
使用 nano 修改 .bashrc 文件,在文件中添加两行:
修改后如下图:
查看 lab1 中的 Makefile
详细解释 Makefile 代码
1. 设置变量
2. 调整 GCC 参数
PS1='mijialong$>'
export PS1
PROJ := challenge # 设置变量
EMPTY := # 设置变量
SPACE := $(EMPTY) $(EMPTY) # 设置变量
SLASH := / # 设置变量
V := @ # 加在每个命令前用来抑制输出,如果命令行调用 make 的时候设置了 V= ,也就是设置变量为
空,这样能够使得每个命令执行的时会输出命令本身
#need llvm/cang-3.5+
#USELLVM := 1
# try to infer the correct GCCPREFX
ifndef GCCPREFIX
root
®
LAPTOP
-
QTCGESHO
:
/
mnt
/
d
#
ssh
moocos
@
127.0
.
0.1
-
p
8848
moocos
@
127.0
_
0
.
l
_
s
password
:
Welcome
to
Ubuntu
14.04
LTS
(
GNU
/
iLinux
3.13
.
0
-
24
-
generic
x
36
_
64
)
*
Documentation
:
https
:
//
help
.
ubuntu
.
com
/
49
B
packages
can
be
updated
.
176
updates
are
security
updates
.
The
programs
included
with
the
Ubuntu
system
are
free
software
;
the
exact
distribution
terms
for
each
program
are
described
in
the
individual
干
iles
in
/
usr
/
share
/
doc
/
*
/
copyright
.
Ubuntu
comes
with
ABSOLUTELY
NO
WARRANTY
,
to
the
ertent
permitted
by
applicable
law
.
[
-
]
moocos
-
>
~
/
.
bashrc
cos
-
>
source
moo
mijialong
$
>
该代码目的是寻找到对应 版本的 i386-elf-objdump ,如果没有,则给出了其他的解决方法:修改
Makefile 里面的 GCCPREFIX 参数之后再进行 make;如果是为了关闭这个报错,则通过 gmake
GCCPREFIX=... 修改相关参数
其中 objdump 用于显示对象文件的信息
3. 调整 qemu 参数
该代码的目的是为了加载合适 qemu 硬件模拟器,要求为 qemu-system-i386 ,当对应目标不存在时,则
报错
4. 选择编译器和设置编译时的参数
GCCPREFIX := $(shell if i386-elf-objdump -i 2>&1 | grep '^elf32-i386$$' >/dev/null
2>&1; \
then echo 'i386-elf-'; \
elif objdump -i 2>&1 | grep 'elf32-i386' >/dev/null 2>&1; \
then echo ''; \
else echo "***" 1>&2; \
echo "*** Error: Couldn't find an i386-elf version of GCC/binutils." 1>&2; \
echo "*** Is the directory with i386-elf-gcc in your PATH?" 1>&2; \
echo "*** If your i386-elf toolchain is installed with a command" 1>&2; \
echo "*** prefix other than 'i386-elf-', set your GCCPREFIX" 1>&2; \
echo "*** environment variable to that prefix and run 'make' again." 1>&2; \
echo "*** To turn off this error, run 'gmake GCCPREFIX= ...'." 1>&2; \
echo "***" 1>&2; exit 1; fi)
endif
# try to infer the correct QEMU
ifndef QEMU
QEMU := $(shell if which qemu-system-i386 > /dev/null; \
then echo 'qemu-system-i386'; exit; \
elif which i386-elf-qemu > /dev/null; \
then echo 'i386-elf-qemu'; exit; \
elif which qemu > /dev/null; \
then echo 'qemu'; exit; \
else \
echo "***" 1>&2; \
echo "*** Error: Couldn't find a working QEMU executable." 1>&2; \
echo "*** Is the directory containing the qemu binary in your PATH" 1>&2; \
echo "***" 1>&2; exit 1; fi)
endif
# eliminate default suffix rules
# 建立默认的 suffix 规则
.SUFFIXES: .c .S .h
# delete target files if there is an error (or make is interrupted)
# 当 make 被中断、或文件存在错误时,删除对应的文件
.DELETE_ON_ERROR:
# define compiler and flags
ifndef USELLVM
HOSTCC := gcc
# 默认使用gcc
HOSTCFLAGS := -g -Wall -O2
CC := $(GCCPREFIX)gcc
剩余19页未读,继续阅读
江水流春去
- 粉丝: 43
- 资源: 352
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0