- vm安裝CentOS虛擬機帶有桌面的版本。
su
輸入密碼123456
。更新yum -y update
。一般已經安裝好后面這2個工具:yum install -y net-tools wget
。- 看下ip地址
ifconfig
,然后本地終端連接ssh root@192.168.249.132
輸入密碼即可,主要是為了復制網址方便些。大概率wget https://nchc.dl.sourceforge.net/project/bochs/bochs/2.7/bochs-2.7.tar.gz
無法下載bochs,所以直接下載到本地然后復制過去scp .\bochs-2.7.tar.gz root@192.168.249.132:~
。 - 安裝bochs。
tar -zvxf bochs-2.7.tar.gz
,cd bochs-2.7
,安裝過程主要參考這兩篇文章:最新Linux(centos)安裝bochs和【實現操作系統 01】CentOS 9 安裝配置 Bochs 2.7 虛擬機,及編寫簡單的 bootloader 并寫入軟盤啟動
// 1、先安裝依賴
yum install gcc-c++ glibc-headers
yum install libX11-devel.x86_64
yum install libXrandr-devel.x86_64
yum install -y epel-release// 2.configure
./configure --with-x11 --with-wx --enable-debugger --enable-disasm --enable-all-optimizations --enable-readline --enable-long-phy-address --enable-ltdl-install --enable-idle-hack --enable-a20-pin --enable-x86-64 --enable-smp --enable-cpu-level=6 --enable-large-ramfile --enable-repeat-speedups --enable-fast-function-calls --enable-handlers-chaining --enable-trace-linking --enable-configurable-msrs --enable-show-ips --enable-cpp --enable-debugger-gui --enable-iodebug --enable-logging --enable-assert-checks --enable-fpu --enable-vmx=2 --enable-svm --enable-3dnow --enable-alignment-check --enable-monitor-mwait --enable-avx --enable-evex --enable-x86-debugger --enable-pci --enable-usb --enable-voodoo// 3.修改文件cpp為cc且修改配置文件路徑
cp misc/bximage.cpp misc/bximage.cc
cp iodev/hdimage/hdimage.cpp iodev/hdimage/hdimage.cc
cp iodev/hdimage/vmware3.cpp iodev/hdimage/vmware3.cc
cp iodev/hdimage/vmware4.cpp iodev/hdimage/vmware4.cc
cp iodev/hdimage/vpc.cpp iodev/hdimage/vpc.cc
cp iodev/hdimage/vbox.cpp iodev/hdimage/vbox.cc
cp bx_debug/parser.cpp bx_debug/parser.ccvi bx_debug/debug.h
修改:
#include "config.h"為#include "../config.h"
#include “osdep.h"為#include "../osdep.h"
#include "cpu/decoder/decoder.h"為#include "../cpu/decoder/decoder.h"make
make install
- 生成個軟盤鏡像。在家目錄
bximage
,選擇創建軟盤fd其他默認,成功后目錄中出現a.img文件。 - 按照書上的,編寫asm代碼,
vi boot.asm
。
org 07c00h ;org指令規定程序的起始地址,不規則則默認是0000hmov ax,csmov ds,axmov es,axcall DispStrjmp $ ;$表示當前行地址,所以這是無限循環
DispStr:mov ax,BootMessagemov bp,axmov cx,16mov ax,01301hmov bx,000chmov dl,0int 10hret
BootMessage: db "Hello,OS World!"
times 510-($-$$) db 0 ;一共512字節,最后2字節寫0xaa55,所以中間插入很多0字節,數量就是512-2-上面那段代碼占用的字節(當前行地址-這一節開頭地址即程序初地址)
dw 0xaa55 ;最后補這個是由于加電自檢后尋找啟動盤會優先查找軟盤0面0磁道1扇區(1扇區512字節),并發現如果扇區最后字節以0xaa55結尾則認為這是引導扇區,并把這512字節數據復制到0000:7c00處并把控制交由這段引導程序,即我們這段程序,那我們這段程序怎么跑到7c00處的?請看第一行代碼!
- 安裝nasm。
sudo yum install automake gcc kernel-devel
wget https://www.nasm.us/pub/nasm/releasebuilds/2.15/nasm-2.15.tar.gz
tar -zvxf nasm-2.15.tar.gz
./autogen.sh
./configure
make && make install
- 編譯代碼:
nasm boot.asm -o boot.bin
- 寫進軟盤鏡像:
dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
- 配置文件,在家目錄中
vi bochsrc
。
################################################
#configure file for Bochs
################################################# how much memory the emulated machine will have
megs: 32# filename of Rom images, 注意下邊要根據你安裝目錄來調整
romimage: file=/usr/local/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/local/share/bochs/VGABIOS-lgpl-latest#what disk images will be used
floppya: 1_44=/root/a.img, status=inserted#choose the boot disk.
boot: floppy#where do we send log messages?
log: bochsout.txt#disable the mouse
mouse: enabled=0# enable key mapping, using US layout as default.
keyboard: keymap=/usr/local/share/bochs/keymaps/x11-pc-us.map
-
在家目錄啟動
bochs -f bochsrc
,后面是指定配置文件,其實可以省略,因為bochs會默認從幾個目錄中找配置文件。詢問操作時默認或按6,之后按c
表示continue?就啟動了,雖然這個啟動界面有些奇怪,但至少顯示了自定義的信息。
-
上面制作并把數據寫到a.img鏡像后,可以vi查看這個文件,輸入命令
%!xxd
可以以16進制查看,這時候32行末尾即512字節處最后2個字節就是55aa,即我們程序最后一行的dw 0xaa55
。