linux0.11启动 操作步骤

代码地址:https://github.com/kingfisherht/linux-0.11
代码下载后分为两部分:
第一部分是 bochs :这部分是在wind下虚拟出bios环境 相当于虚拟机
第二部分是 linux-0.11: 这部分是linux最原始的内核引导 及 内核代码

bochs的配置文件

###############################################################

# bochsrc.bxrc file for Tinix.

###############################################################



#gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0


# 第一步,首先设置Bochs在运行过程中能够使用的内存,本例为32MB。
# 关键字为:megs
# how much memory the emulated machine will have

megs: 32

# filename of ROM images
# 第二步,设置对应真实机器的BIOS和VGA BIOS.
# 对应两个关键字为:romimage 和 vgaromimage

romimage: file="../bochs/BIOS-bochs-latest"

vgaromimage: file="../bochs/VGABIOS-lgpl-latest"

vga: extension=vbe

# 第三步,设置Bochs所使用的磁盘,软盘的关键字为floppy。
# 若只有一个软盘,则使用floppya即可,若有多个,则为floppya,floppyb...

# what disk images will be used 

floppya: 1_44=boot.img, status=inserted

#floppyb: 1_44=rootimage-0.11.img, status=inserted

#ata0-slave: type=disk, path="hdc.img", cylinders=520, heads=16, spt=63

com1: enabled=1, dev="\\.\pipe\com_1"

# 第四步,选择启动盘符。
# choose the boot disk.

boot: a

# where do we send log messages?
# 第五步,设置日志文件的输出。
log: bochsout.txt

# 第六步,开启或关闭某些功能。
# 下面是关闭鼠标,并打开键盘。

# disable the mouse, since Tinix is text only
mouse: enabled=0

# enable key mapping, using US layout as default.

keyboard_mapping: enabled=1, map="../bochs/keymaps/x11-pc-us.map"

bochs的简单调试方法

b addr 在物理地址处设置断点 addr为物理内存地址,不加段基址
lb 在线性地址处设置断点 addr为线性物理地址,不加基址
vb 在虚拟地址上设置断点 addr为段基址:偏移地址, cs段
c 继续执行知道遇到断点
n 单步执行 跳过子程序和int中断程序
s 单步执行
s num ( s指令后加一数字) 执行n步

dump_cpu 查看寄存器信息 (实测下来这个指令好像不好使。。。)

x /nuf addr 显示指定内存地址的数据,addr可以是线性的内存地址,也可以是虚址 格式是基址:偏移或者基址寄存器:偏移
n 显示的数据长度
u 数据单元大小 b,h,w,g分别对应1,2,4,8字节
f 数据显示格式 x,d,u,o,t,c分别对应十六进制、十进制、无符号十进制、八进制、二进制、字符串
u [/count] start end 反汇编一段线性内存(作用与上面的一样)
(count 参数指明要反汇编的指令条数 ,例子:u /5 --反汇编从当前地址开始的5条指令)

info指令组

info b 展示当前的断点状态信息
info dirty 展示自从上次显示以来物理内存中的脏页(被写的页)
info program 展示程序的执行状态 (无法使用!)
info r|reg|rigisters 展示寄存器内容
info cpu 展示CPU寄存器内容
info fpu 展示FPU寄存器的状态
info idt 展示中断描述表
info ivt 展示中断向量表(保护模式下无效)
info gdt 展示全局描述表
info tss 展示当前的任务状态段
info cr 展示CR0-CR4寄存器状态 (无法使用)
info flags 展示标志寄存器 (无法使用)
寄存器查询
r 查看通用寄存器
sreg 查看段寄存器(es,cs,gs,ss,fs,ds以及idt,gdt,ldt,tr)
creg 查看控制寄存器(cr0,cr1,cr2,cr3)
dreg 查看调试寄存器(dr0-dr7)
这里再插一句,标志寄存器的查看方法:
eflags 0x00000002: id vip vif ac vm rf nt IOPL=0 of df if tf sf zf af pf cf (均为置位)
eflags 0x00000046: id vip vif ac vm rf nt IOPL=0 of df if tf sf ZF af PF cf (ZF,PF置位)
0x00000002是标志寄存器的实际数值,后面的zf,sf等为标志位,小写时标志位未置位,大写为已置位。
可以参考:https://blog.csdn.net/mean_while/article/details/81412487

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值