00 - tinyOS 开发环境搭建
由于我使用的是 Ubuntu 20.04.4 LTS 系统,所以,本系列开发环境及代码均在 Ubuntu 20.04.4 LTS 上进行,其他系统请自行查询解决,但核心原理应该都一样的。
安装 Bochs & Nasm
Bochs 是一个通用的硬件模拟器,系统内核的调试运行均在这个模拟器上进行
sudo apt-get install build-essential xorg-dev bison g++ bochs-x -y sudo apt-get install nasm
要是以上安装过程中有问题,可以直接去官网下载源码包编译安装。在安装过程中可能会遇到一些第三方依赖的库不全的问题,在这里不细说了,网上也有一些教程可以参考。
制作虚拟磁盘
Bochs 自带了一个命令行工具 bximage
,可用来制作磁盘文件。
bximage -mode=create -hd=10M -q tinyOS.img
也可通过图形界面方式进行创建
运行 Bochs
bochs需要配置文件描述硬件信息,配置文件的命名是任意的,bochs默认的配置文件名为bochsrc.txt,如下:
# 虚拟机内存大小,单位为 MB megs: 32 # # 对应真实机器的BIOS和VGA BIOS romimage: file=$BXSHARE/BIOS-bochs-latest vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest boot: disk log: bochsout.log mouse: enabled=0 #keyboard: keymap=/usr/local/share/bochs/keymaps/sdl-pc-us.map ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14 ata0-master: type=disk, path="tinyOS.img", mode=flat clock: sync=realtime cpu: ips=1000000 #gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0
运行bochs:
bochs -f bochsrc.txt
编写Makefile
对于 Makefile的编写,就请参考左耳朵耗子写的 《跟我一起写Makefile》
对于上述零散的操作,集中到如下Makefile中:
SRC_DIR=src BIN_DIR=bin USER_DIR=user all: image prepare: ${SRC_DIR}/* mkdir -p $(BIN_DIR) image: prepare mbr rm -rf tinyOS.img && bximage -mode=create -hd=10M -q tinyOS.img dd if=$(BIN_DIR)/mbr of=tinyOS.img bs=512 count=1 conv=notrunc mbr: $(SRC_DIR)/boot/mbr.asm nasm -o $(BIN_DIR)/mbr $< clean: rm -rf ${BIN_DIR} tinyOS.img bochsout.log
可通过以下 shell 脚本方便运行:
make && bochs -f bochsrc.txt
编写MBR
;----BIOS把启动区加载到内存的该位置,所以需设置地址偏移量 section mbr vstart=0x7c00 ;----卷屏中断,目的是清屏 mov ax,0x0600 mov bx,0x0700 mov cx,0 mov dx,0x184f int 0x10 ; 此处调用了 BIOS 的中断把 bochs模拟器 输出信息清空 ;----直接往显存中写数据,后续可以调用中断抽离出方法来专门输出 mov ax,0xb800 mov gs,ax mov byte [gs:0x00],'M' mov byte [gs:0x02],'B' mov byte [gs:0x04],'R' ;----512字节的最后两字节是启动区标识 times 510-($-$$) db 0 db 0x55,0xaa
在 Makefile所在目录下,执行:
make && bochs -f bochsrc.txt
运行如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律