这次也没什么营养,主要是先把环境搭起来,然后试着跑一下boot引导。
书上给的环境是CentOS6,编译安装bochs。我在Ubuntu上编译,如我所预料的各种报错,烦不胜烦,干脆用apt安装
sudo apt-get install bochs
书中的BootLoader部分用Intel汇编语言编写。先简单说一下寄存器部分,内容参考自Introduction x64 Assembly,暂时只用到通用寄存器。
8比特为一字节,16比特位一个字,32比特为一个双字,64比特是一个4字,128比特是一个双八字。小端字节序。
如图,前8个寄存器(RAX,RBX,RCX,RDX,RBP,RSI,RDI,RSP)和后8个寄存器(R8,R9,R10,R11,R12,R13,R14,R15)
前八个寄存器: 来自简书
对于前8个寄存器
将开头的R替换为E,访问低32bits (如RAX->EAX);
对于RAX、RBX、RCX、RDX寄存器,
64-bit register | Lower 32 bits | Lower 16 bits | Lower 8 bits |
---|---|---|---|
rax | eax | ax | al |
rbx | ebx | bx | bl |
rcx | ecx | cx | cl |
rdx | edx | dx | dl |
rsi | esi | si | sil |
rdi | edi | di | dil |
rbp | ebp | bp | bpl |
rsp | esp | sp | spl |
r8 | r8d | r8w | r8b |
r9 | r9d | r9w | r9b |
r10 | r10d | r10w | r10b |
r11 | r11d | r11w | r11b |
r12 | r12d | r12w | r12b |
r13 | r13d | r13w | r13b |
r14 | r14d | r14w | r14b |
r15 | r15d | r15w | r15b |
看到Bochs的图表,猛然会想起从前在安卓手机上跑win95的搞机的日子……
先试一下编译安装,环境是Ubuntu 20.04,新装的需要先安装gcc和g++
sudo apt-get install g++ gcc
从bochs官网上下载源码: Bochs,链接在页面最底下的TAR file containing source code (5158k)
,下载完后解压,进入解压得到的文件夹。
安装libxrandr和xorg
sudo apt-get install libxrandr-dev
sudo apt-get install xorg-dev
然后需要复制一些文件,不然会出现make: *** No rule to make target 'misc/bximage.cc', needed by 'misc/bximage.o'. Stop.
这样的问题。(内容来自原书),
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-img.cpp iodev/hdimage/vpc-img.cc
cp iodev/hdimage/vbox.cpp iodev/hdimage/vbox.cc
然后开始着手编译:
编译配置:
./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-plugins --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
编译(新安装的Ubuntu需要先安装make)
make
sudo make install
apt安装的话,可能存在版本的问题,没法使用书上附带的配置文件,操作上也有些许出入,还是建议编译安装。
最开始boot.asm的内容很简单,调用BIOS中断服务来显示文字。 话说回来,之前学习《计算机组成与设计》的时候,书里也讲汇编,不过是MIPS,但是一直是纸上谈兵。现在有了环境,不管是什么汇编,先把玩一下再说。
简单修改一下,让界面显示AB
感觉后面的内容还是挺难的,得找个时间对着代码好好捋一捋。