vstar战队有哪些人(vsg战队王者荣耀)

新科网 2024-01-11 09:12 星期四 40 1/11

最近在看《操作系统真相还原》这本书,打算跟着做一个微型操作系统,就有了这篇教程

环境准备

Ubuntu18.04

bochs-2.6.2

安装软件

下载1wget https://udomain.dl.sourceforge.net/project/bochs/bochs/2.6.2/bochs-2.6.2.tar.gz

解压1tar -zxvf bochs-2.6.2.tar.gz

配置

1

2

3

4

5

6

7

8

./configure \

--prefix=/your_path/bochs \

--enable-debugger\

--enable-disasm \

--enable-iodebug \

--enable-x86-debugger \

--with-x \

--with-x11

Copy

解释

–prefix=/your_path/bochs 是用来指定 bochs 的安装目录,根据个人实际情况将 your_path 替换为自己待安装的路径。–enable-debugger 打开 bochs 自己的调试器。–enable-disasm 使 bochs 支持反汇编。–enable-iodebug 启用 io 接口调试器。–enable-x86-debugger 支持 x86 调试器。–with-x 使用 x windows。–with-x11 使用 x11 图形用户接口。

make install

make install报错

x.cc:37:10: fatal error: X11/Xlib.h: No such file or directory #include ^~~~~~~~~~~~还报错x.cc:42:10: fatal error: X11/extensions/Xrandr.h: No such file or directory #include ^~~~~~~~~~~~~~~~~~~~~~~~~

解决方法

1

2

3

4

5

sudo apt-get install libx11-dev ................. for X11/Xlib.h

sudo apt-get install mesa-common-dev........ for GL/glx.h

sudo apt-get install libglu1-mesa-dev ..... for GL/glu.h

sudo apt-get install libxrandr-dev ........... for X11/extensions/Xrandr.h

sudo apt-get install libxi-dev ................... for X11/extensions/XInput.h

Copy配置软件

将安装目录下的配置文件bochs/share/doc/bochs/bochsrc-sample.txt复制到当前目录

1

mv /home/mikey/bochs/share/doc/bochs/bochsrc-sample.txt ./bochsrc

Copy

查看配置文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

[work@localhost bochs]$ cat bochsrc

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

# Configuration file for Bochs

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

# 第一步,首先设置 Bochs 在运行过程中能够使用的内存,本例为 32MB。

# 关键字为:megs

megs: 32

# 第二步,设置对应真实机器的 BIOS 和 VGA BIOS。

# 对应两个关键字为:romimage 和 vgaromimage

romimage: file=/实际路径/bochs/share/bochs/BIOS-bochs-latest

vgaromimage: file=/实际路径/bochs/share/bochs/VGABIOS-lgpl-latest

# 第三步,设置 Bochs 所使用的磁盘,软盘的关键字为 floppy。

# 若只有一个软盘,则使用 floppya 即可,若有多个,则为 floppya,floppyb...

#floppya: 1_44=a.img, status=inserted

# 第四步,选择启动盘符。

#boot: floppy

#默认从软盘启动,将其注释

boot: disk

#改为从硬盘启动。我们的任何代码都将直接写在硬盘上,所以不会再有读写软盘的操作。

# 第五步,设置日志文件的输出。

log: bochs.out

# 第六步,开启或关闭某些功能。

# 下面是关闭鼠标,并打开键盘。

mouse: enabled=0

keyboard_mapping: enabled=1,

map=/实际路径/bochs/share/bochs/keymaps/x11-pc-us.map

# 硬盘设置

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

# 下面的是增加的 bochs 对 gdb 的支持,这样 gdb 便可以远程连接到此机器的 1234 端口调试了

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

###################配置文件结束#####################

Copy测试开机

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

mikey@mikey:~/bochs/bin$ ./bochs

========================================================================

Bochs x86 Emulator 2.6.2

Built from SVN snapshot on May 26, 2013

Compiled on Feb 26 2021 at 11:34:31

========================================================================

00000000000i[ ] reading configuration from bochsrc

------------------------------

Bochs Configuration: Main Menu

------------------------------

This is the Bochs Configuration Interface, where you can describe the

machine that you want to simulate. Bochs has already searched for a

configuration file (typically called bochsrc.txt) and loaded it if it

could be found. When you are satisfied with the configuration, go

ahead and start the simulation.

You can also start bochs with the -q option to skip these menus.

1. Restore factory default configuration

2. Read options from...

3. Edit options

4. Save options to...

5. Restore the Bochs state from...

6. Begin simulation

7. Quit now

Please choose one: [6] 2

What is the configuration file name?

To cancel, type none. [bochsrc]

00000000000i[ ] reading configuration from bochsrc

------------------------------

Bochs Configuration: Main Menu

------------------------------

This is the Bochs Configuration Interface, where you can describe the

machine that you want to simulate. Bochs has already searched for a

configuration file (typically called bochsrc.txt) and loaded it if it

could be found. When you are satisfied with the configuration, go

ahead and start the simulation.

You can also start bochs with the -q option to skip these menus.

1. Restore factory default configuration

2. Read options from...

3. Edit options

4. Save options to...

5. Restore the Bochs state from...

6. Begin simulation

7. Quit now

Please choose one: [6] 6

00000000000i[ ] installing x module as the Bochs GUI

00000000000i[ ] Bochs x86 Emulator 2.6.2

00000000000i[ ] Built from SVN snapshot on May 26, 2013

00000000000i[ ] Compiled on Feb 26 2021 at 11:34:31

00000000000i[ ] System configuration

00000000000i[ ] processors: 1 (cores=1, HT threads=1)

00000000000i[ ] A20 line support: yes

00000000000i[ ] IPS is set to 4000000

00000000000i[ ] CPU configuration

00000000000i[ ] SMP support: no

00000000000i[ ] level: 6

00000000000i[ ] APIC support: xapic

00000000000i[ ] FPU support: yes

00000000000i[ ] MMX support: yes

00000000000i[ ] 3dnow! support: no

00000000000i[ ] SEP support: yes

00000000000i[ ] SSE support: sse2

00000000000i[ ] XSAVE support: no

00000000000i[ ] AES support: no

00000000000i[ ] MOVBE support: no

00000000000i[ ] ADX support: no

00000000000i[ ] x86-64 support: no

00000000000i[ ] MWAIT support: yes

00000000000i[ ] Optimization configuration

00000000000i[ ] RepeatSpeedups support: no

00000000000i[ ] Fast function calls: no

00000000000i[ ] Handlers Chaining speedups: no

00000000000i[ ] Devices configuration

00000000000i[ ] NE2000 support: no

00000000000i[ ] PCI support: yes, enabled=yes

00000000000i[ ] SB16 support: no

00000000000i[ ] USB support: no

00000000000i[ ] VGA extension support: vbe

00000000000i[MEM0 ] allocated memory at 0x7f7ad1cea010. after alignment, vector=0x7f7ad1ceb000

00000000000i[MEM0 ] 32.00MB

00000000000i[MEM0 ] mem block size = 0x00100000, blocks=32

00000000000i[MEM0 ] rom at 0xfffe0000/131072 (/home/mikey/bochs/share/bochs/BIOS-bochs-latest)

00000000000i[ ] init_dev of pci plugin device by virtual method

00000000000i[DEV ] i440FX PMC present at device 0, function 0

00000000000i[ ] init_dev of pci2isa plugin device by virtual method

00000000000i[DEV ] PIIX3 PCI-to-ISA bridge present at device 1, function 0

00000000000i[ ] init_dev of cmos plugin device by virtual method

00000000000i[CMOS ] Using local time for initial clock

00000000000i[CMOS ] Setting initial clock to: Fri Feb 26 11:58:08 2021 (time0=1614311888)

00000000000i[ ] init_dev of dma plugin device by virtual method

00000000000i[DMA ] channel 4 used by cascade

00000000000i[ ] init_dev of pic plugin device by virtual method

00000000000i[ ] init_dev of pit plugin device by virtual method

00000000000i[ ] init_dev of floppy plugin device by virtual method

00000000000i[DMA ] channel 2 used by Floppy Drive

00000000000i[ ] init_dev of vga plugin device by virtual method

00000000000i[MEM0 ] Register memory access handlers: 0x0000000a0000 - 0x0000000bffff

00000000000i[VGA ] interval=200000

00000000000i[MEM0 ] Register memory access handlers: 0x0000e0000000 - 0x0000e0ffffff

00000000000i[BXVGA] VBE Bochs Display Extension Enabled

00000000000i[XGUI ] test_alloc_colors: 16 colors available out of 16 colors tried

00000000000i[XGUI ] font 8 wide x 16 high, display depth = 24

00000000000i[MEM0 ] rom at 0xc0000/41472 (/home/mikey/bochs/share/bochs/VGABIOS-lgpl-latest)

00000000000i[ ] init_dev of acpi plugin device by virtual method

00000000000i[DEV ] ACPI Controller present at device 1, function 3

00000000000i[ ] init_dev of ioapic plugin device by virtual method

00000000000i[IOAP ] initializing I/O APIC

00000000000i[MEM0 ] Register memory access handlers: 0x0000fec00000 - 0x0000fec00fff

00000000000i[IOAP ] IOAPIC enabled (base address = 0xfec00000)

00000000000i[ ] init_dev of keyboard plugin device by virtual method

00000000000i[KBD ] will paste characters every 400 keyboard ticks

00000000000i[ ] init_dev of harddrv plugin device by virtual method

00000000000i[HD ] HD on ata0-0: disk.img, flat mode

00000000000p[HD ] >>PANIC<< ata0-0: could not open hard drive image file disk.img

========================================================================

Bochs is exiting with the following message:

[HD ] ata0-0: could not open hard drive image file disk.img

========================================================================

00000000000i[CTRL ] quit_sim called with exit code 1

Copy

因为还没有设置启动盘所以报错,但是可以看到GUI界面还是挺激动的是吧哈哈哈哈

测试开机

创建启动盘

使用bin/bximage进行创建

-fd 创建软盘。-hd 创建硬盘。-mode 创建硬盘的类型,有 flat、sparse、growing 三种。-size 指创建多大的硬盘,以 MB 为单位。-q 以静默模式创建,创建过程中不会和用户交互

1

bin/bximage -hd -mode="flat" -size=60 -q hd60M.img

Copy

这个命令串中最后一个 hd60M.img 是咱们创建的虚拟硬盘的名称。

image-20210226121421416

修改配置文件

重新启动./bochs -f bochsrc查看效果

image-20210226122004018

编写MBR

1

vim mbr.S

Copy

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

;主引导程序

;------------------------------------------------------------

SECTION MBR vstart=0x7c00

mov ax,cs

mov ds,ax

mov es,ax

mov ss,ax

mov fs,ax

mov sp,0x7c00

; 清屏利用 0x06 号功能,上卷全部行, 则可清屏 。

; -----------------------------------------------------------

;INT 0x10

;功能号:0x06

;功能描述:上卷窗口

;------------------------------------------------------

;输入:

;AH 功能号= 0x06

;AL = 上卷的行数(如果为 0,表示全部)

;BH = 上卷行属性

;(CL,CH) = 窗口左上角的(X,Y)位置

;(DL,DH) = 窗口右下角的(X,Y)位置

;无返回值:

mov ax, 0x600

mov bx, 0x700

mov cx, 0

; 左上角: (0, 0)

mov dx, 0x184f

; 右下角: (80,25),

; VGA 文本模式中,一行只能容纳 80 个字符,共 25 行 。

; 下标从 0 开始,所以 0x18=24,0x4f=79

int 0x10

; int 0x10

;;;;;;;;;

;下面这三行代码获取光标位置

;;;;;;;;;

;.get_cursor 获取当前光标位置,在光 标位置处打印字符 。

mov ah, 3

; 输入: 3 号子功能是获取光标位置,需要存入 ah 寄存器

mov bh, 0

; bh 寄存器存储的是待获取光标的页号

; 输出: ch=光标开始行,cl=光标结束行

; dh=光标所在行号,dl=光标所在列号

int 0x10

;;;;;;;;;

;获取光标位置结束

;;;;;;;;;;;;;;;;

;;;;;;;;;

;打印字符串

;;;;;;;;;;;

;还是用 10h 中断,不过这次调用 13 号子功能打印字符串

mov ax, message

mov bp, ax

; es:bp 为串首地址,es 此时同 cs 一致,

; 开头时已经为 sreg 初始化

; 光标位置要用到 dx 寄存器中内容,cx 中的光标位置可忽略

mov cx, 5

; cx 为串长度,不包括结束符 0 的字符个数

mov ax, 0x1301

;子功能号 13 显示字符及属性,要存入 ah 寄存器,

; al 设置写字符方式 ah=01: 显示字符串,光标跟随移动

mov bx, 0x2

; bh 存储要显示的页号,此处是第 0 页,

; bl 中是字符属性,属性黑底绿字(bl = 02h)

int 0x10

; 执行 BIOS 0x10 号中断

;;;;;;;;;

;打字字符串结束

;;;;;;;;;;;;;;;

; 使程序悬停在此

jmp $

message db "1 MBR"

times 510-($-$) db 0

db 0x55,0xaa

Copy

编译

1

nasm -o mbr.bin mbr.S

Copy

查看其大小为512k

1

ls -lb mbr.bin

Copy

配置

1

dd if=/home/mikey/bochs/bin/mbr.bin of=/home/mikey/bochs/bin/hd60M.img bs=512 count=1 conv=notrunc

Copy

查看

1

./bochs -f bochsrc

Copy

启动成功截图

即可完成一个简单MBR的编写

参考资料

《操作系统真相还原》

Ubuntu 16.04LTS 安装和配置Bochs

0

© 版权声明 本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如有侵权请联系网站管理员删除,联系邮箱1856753@qq.com。

相关推荐