• 在Linux下安装配置bochs,并成功跑一个简单的boot引导(超详细)


     环境:centos7(建议带桌面的版本)镜像网址

    环境配置:gcc、gas、nasm、make

    1.配置环境

    yum -y install xxx(eg:gcc.等)

    若出现yum源问题请观看

    没有可用软件包和yum源问题https://blog.csdn.net/weixin_42492218/article/details/127656213?spm=1001.2014.3001.5501

    2.安装bochs

    1.进入boch官网:bochs版本选择页    选择版本,原则上越新越好,博主选择的是2.6.9

     2点击进入选择红框内tar.gz文件,点击下载,下载完成在Linux下进行解压

     3.解压完成进入解压后的文件目录,在终端执行下列命令进行安装(make install须在root用户下进行,否则使用sudo进行执行)sudo make install

    1. ./configure --enable -debugger --enable-disasm
    2. make
    3. make install

    4.接着执行下列配置参数,打开所有功能(不知道具体用到哪些)

    ./configure --with-x11 --with-x --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

     由于再次执行make、make install 时可能会出现一些文件缺失之类需要执行以下命令

    1. cp misc/bximage.cpp misc/bximage.cc
    2. cp iodev/hdimage/hdimage.cpp iodev/hdimage/hdimage.cc
    3. cp iodev/hdimage/vmware3.cpp iodev/hdimage/vmware3.cc
    4. cp iodev/hdimage/vmware4.cpp iodev/hdimage/vmware4.cc
    5. cp iodev/hdimage/vpc-img.cpp iodev/hdimage/vpc-img.cc
    6. cp iodev/hdimage/vbox.cpp iodev/hdimage/vbox.cc

    然后执行命令

    1. make
    2. make install

    到此为止bochs可以说配置安装完成了,为了更好的使用bochs,进行下一步配置操作

    3.创建配置文件

    1.创建一个配置文件,命名为bochsrc内容如下:

    执行命令vim bochsrc(可以在自己新建的目录下进行创建,与后面.img文件放在同目录下最佳)

    1. plugin_ctrl: unmapped=1, biosdev=1, speaker=1, extfpuirq=1, parallel=1, serial=1, iodebug=1
    2. config_interface: textconfig
    3. #使用GUI调试
    4. display_library: x, options="gui_debug"
    5. cpu: model=core2_penryn_t9600, count=1, ips=50000000, reset_on_triple_fault=1, ignore_bad_msrs=1, msrs="msrs.def"
    6. cpu: cpuid_limit_winnt=0
    7. cpuid: x86_64=1, mmx=1, sep=1, simd=sse4_2, apic=xapic, aes=1, movbe=1, xsave=1
    8. cpuid: family=6, model=0x1a, stepping=5
    9. romimage: file=$BXSHARE/BIOS-bochs-latest
    10. vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
    11. vga: extension=vbe, update_freq=5
    12. keyboard: type=mf, serial_delay=250, paste_delay=100000, user_shortcut=none
    13. mouse: type=ps2, enabled=0, toggle=ctrl+mbutton
    14. pci: enabled=1, chipset=i440fx
    15. clock: sync=none, time0=local, rtc_sync=0
    16. private_colormap: enabled=0
    17. #软盘启动的配置,a.img为软盘名
    18. floppya: type=1_44, 1_44=boot.img, status=inserted, write_protected=0
    19. ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
    20. ata1: enabled=0, ioaddr1=0x170, ioaddr2=0x370, irq=15
    21. ata2: enabled=0, ioaddr1=0x1e8, ioaddr2=0x3e0, irq=11
    22. ata3: enabled=0, ioaddr1=0x168, ioaddr2=0x360, irq=9
    23. # 硬盘启动配置,a.img为硬盘名,根据硬盘大小不同需改变后三个参数的值
    24. #ata0-master: type=disk, mode=flat, path=a.img, cylinders=130, heads=16, spt=63
    25. #ata0-slave: type=none
    26. #ata0-master: type=none
    27. #ata1-slave: type=none
    28. # 软盘启动/硬盘启动
    29. boot: floppy
    30. # boot: disk
    31. floppy_bootsig_check: disabled=0
    32. log: -
    33. logprefix: %t%e%d
    34. panic: action=ask
    35. error: action=report
    36. info: action=report
    37. debug: action=ignore
    38. debugger_log: -
    39. com1: enabled=1, mode=null
    40. com2: enabled=0
    41. com3: enabled=0
    42. com4: enabled=0
    43. parport1: enabled=1, file=none
    44. parport2: enabled=0
    45. speaker: enabled=1, mode=system
    46. magic_break: enabled=0
    47. print_timestamps: enabled=0
    48. port_e9_hack: enabled=0
    49. megs: 2048

    4.编写一个简单的boot引导程序(使用asm)

    建议与bochsrc在同一目录下

    代码详细说明请参考:

    简单的boot引导的实现代码(内有详细注解,asm INT10的使用)https://blog.csdn.net/weixin_42492218/article/details/127665541?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22127665541%22%2C%22source%22%3A%22weixin_42492218%22%7D

    1. org 0x7c00
    2. BaseofStack equ 0x7c00
    3. Label_Start:
    4. mov ax, cs
    5. mov ds, ax
    6. mov es, ax
    7. mov ss, ax
    8. mov sp, BaseofStack
    9. ;===============clear screen
    10. mov ax, 0600h
    11. mov bx, 0700h
    12. mov cx, 0
    13. mov dx, 0184fh
    14. int 10h
    15. ;===============set focus
    16. mov ax, 0200h
    17. mov bx, 0000h
    18. mov dx, 0000h
    19. int 10h
    20. ;============display on screen : start booting....
    21. mov ax, 1301h
    22. mov bx, 000fh
    23. mov dx, 0000h
    24. mov cx, 10
    25. push ax
    26. mov ax, ds
    27. mov es, ax
    28. pop ax
    29. mov bp, startBootMessage
    30. int 10h
    31. ;======== reset floppy
    32. xor ah,ah
    33. xor dl,dl
    34. jmp $
    35. startBootMessage: db "start Boot"
    36. ;=========fill zero until whole sector
    37. times 510-($-$$) db 0
    38. dw 0xaa55

    编写完成后,对其进行编译

    nasm boot.asm -o boot.bin

    5.创建一个软盘镜像

    如图所示,建议与bochsrc在同一目录下

    创建为软盘即fd,大小默认1.44M即可,命名为boot.img

    之后为查看创建是否成功

     6.将生成的boot.bin写入img文件中

    执行命令

    这行命令中的if = boot.bin指定输入源文件名,而of=boot .img则指定输出文件名,参数bs=512指定传输的块大小为512B,参数count=1指定写入到目标文件的块数量,参数conv=notrunc规定在写入数据后不截断(改变)输出文件的尺寸大小。

    dd if=boot.bin of=boot.img bs=512 count=1 conv=notrunc

     执行日志:

     7.开始进行boot引导的执行

    执行命令

     bochs -f ./bochsrc 

    这时可能会出现错误:

    1. Event type: PANIC
    2. Device: [XGUI ]
    3. Message: bochs: cannot connect to Xll server

     是缺少图形库等问题,执行下列命令再次运行即可

    1. yum install xorg*
    2. yum install libX*

    若未成功弹出窗口,输入debug即可

    由于配置文件中有options="gui_debug"   所以需要输入debug才可继续进行,将该项删除即可正常运行。

     接着输入  c  就成功了!!!!

     成功跑出boot引导:

  • 相关阅读:
    Leetcode 77. Combinations
    给出32位有符号整数,将这个整数翻转
    R | R包安装报错-github连接速度慢或无法访问 | metaboanalystR | Retip | rJava安装
    springboot整合阿里大于并结合mq发送短信
    【云原生 • DevOps】influxDB、cAdvisor、Grafana 工具使用详解
    零基础可以报考中级经济师吗?需要准备多久?
    七、Vue3使用Pinia刷新页面状态丢失解决方案
    Vuex的使用,详细易懂
    【Socket】解决UDP丢包问题
    【STM32】基于HAL库建立自己的低功耗模式配置库(STM32L4系列低功耗所有配置汇总)
  • 原文地址:https://blog.csdn.net/weixin_42492218/article/details/127675912