• 《操作系统真象还原》第一章 部署工作环境


    ref:https://www.bilibili.com/video/BV1kg4y1V7TV/?spm_id_from=333.999.0.0&vd_source=3f7ae4b9d3a2d84bf24ff25f3294d107
    https://www.bilibili.com/video/BV1SQ4y1A7ZE/?spm_id_from=333.337.search-card.all.click&vd_source=3f7ae4b9d3a2d84bf24ff25f3294d107
    在实体机ubuntu20.04 环境运行。
    前置安装:

    sudo apt install build-essential
    
    sudo apt-get install libghc-x11-dev
    
    sudo apt-get install xorg-dev
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在运行sudo apt-get install libghc-x11-dev 报错 unable to correct missing packages,在阿里源上找不到包。
    添加163源问题解决

    vim /etc/apt/sources.list
    # 在尾行追加
    deb http://mirrors.163.com/ubuntu/ focal main restricted universe multiverse
    deb http://mirrors.163.com/ubuntu/ focal-updates main restricted universe multiverse
    deb http://mirrors.163.com/ubuntu/ focal-backports main restricted universe multiverse
    deb http://mirrors.163.com/ubuntu/ focal-security main restricted universe multiverse
    # 更新软件源
    sudo apt-get update
    # 再次执行安装命令即可
    sudo apt-get install libghc-x11-dev
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    安装仿真环境
    下载Bochs https://udomain.dl.sourceforge.net/project/bochs/bochs/2.6.8/bochs-2.6.8.tar.gz

    # 下载
    wget https://udomain.dl.sourceforge.net/project/bochs/bochs/2.6.8/bochs-2.6.8.tar.gz
    # 解压缩
    tar -zxvf bochs-2.6.8.tar.gz
    
    • 1
    • 2
    • 3
    • 4

    为即将要安装的bochs创建一个空目录,我的在家目录/home/ubuntu/ 下
    mkdir bochs
    进入解压后的文件夹,并且配置编译安装的路径,进行安装

    cd bochs-2.6.8
    ./configure --prefix=/home/ubuntu/bochs --enable-debugger --enable-disasm --enable-iodebug --enable-x86-debugger --with-x --with-x11 LDFLAGS='-pthread'
    make 
    make install
    
    • 1
    • 2
    • 3
    • 4

    进入安装好的bochs目录,创建bochsrc.disk 并填充配置信息(修改romimage:、romimage:、 keyboard:后面路径信息的前部分为自己的bochs安装路径)

    vim bochsrc.disk
    
    megs : 32
    
    romimage: file=/home/ubuntu/bochs/share/bochs/BIOS-bochs-latest
    vgaromimage: file=/home/ubuntu/bochs/share/bochs/VGABIOS-lgpl-latest
    
    boot: disk
    
    log: bochs.out
    
    mouse:enabled=0
    keyboard:keymap=/home/ubuntu/bochs/share/bochs/keymaps/x11-pc-us.map
    
    ata0:enabled=1,ioaddr1=0x1f0,ioaddr2=0x3f0,irq=14
    ata0-master: type=disk, path="hd60M.img", mode=flat,cylinders=121,heads=16,spt=63
    
    #gdbstub:enabled=1,port=1234,text_base=0,data_base=0,bss_base=0
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    创建启动磁盘

    bin/bximage

    然后在输入框依次输入以下,输入一个,按一次回车

    1

    hd

    flat

    60

    hd60M.img

    以上这一部分是分配硬盘资源之类的。

    测试代码

    cd …

    touch mbr.s

    SECTION MBR vstart=0x7c00
    	mov ax,0x0000	;设置栈指应该是程序一开始就应该做的事情,这个值是参照1m内存空间布局图选择的,以后会刻意避开
    	mov ss,ax
    	mov ax,0x7c00
    	mov sp,ax	
     
    	mov ax,0x0600
    	mov bx,0x0700	;BH是设置缺省属性,属性是指背景色,前景色,是否闪烁等,例如07H表示黑底白字,70H表示灰底黑字等等。
    	mov cx,0x0000
    	mov dx,0x184f	;这个看书p61,同时看其中关于页的知识
    	int 0x10
    	
    	mov ax,0x0300	
    	mov bx,0x0000	
    	int 0x10
    	
    	mov ax,0x0000
    	mov es,ax
    	mov ax,message
    	mov bp,ax
    	mov ax,0x1301
    	mov bx,0x0007	;设置字体属性,02是黑底绿字,07是黑底白字
    	mov cx,0x000c
    	int 0x10
    	
    	jmp $
    	message db "Hello World!"
    	times 510-($-$$) db 0
    	db 0x55,0xaa
    
    
    • 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

    安装编译器nasm 命令: sudo apt install nasm

    编译 nasm -o test mbr.s

    写入虚拟机启动磁盘 dd if=/home/ubuntu/test of=/home/ubuntu/bochs/hd60M.img bs=512 count=1 conv=notrunc

    启动虚拟机查看效果(在bochs目录下)

    cd bochs
    bin/bochs -f bochsrc.disk

    启动之后,输入c即可看见Hello world!

  • 相关阅读:
    Flutter 应用程序性能优化建议
    JVMの内存泄漏&内存溢出案例分析
    一文搞定,JMeter的三种参数化方式
    源码分析:规则引擎提交策略
    多媒体数据处理实验2:PCA
    Web安全之接口鉴权
    机器学习中类别不平衡问题的解决方案
    java ffmpeg获取视频时长
    一键迁移接口,即刻搭建企业接口开放平台 - YesApi接口大师v3.15
    暑期第一周总结
  • 原文地址:https://blog.csdn.net/weixin_40293999/article/details/133834499