BlingOS开发笔记--1.开发准备与环境配置

BlingOS开发笔记--开发准备与环境配置

前言

开发操作系统的原因:
1. 想以更直接的方式了解操作系统
2. 这™是我毕设

参考的资料:
1. 操作系统真象还原
2. 现代操作系统 原书第4版
3. Orange'S:一个操作系统的实现
4. 一个64位操作系统的设计与实现(主要)

开发环境配置

我使用的是Clion,通过SSH连接到虚拟机,因为虚拟机里面的Clion太慢了.编译完成后将文件写入到虚拟硬盘中,再通过FTP传回宿主机,然后在bochs里面调试

需要的工具:

  1. Clion(IDE,哪个方便用哪个)
  2. bochs(虚拟机,用作运行和调试)
  3. 任意ftp服务器工具(如FileZilla)
  4. gcc
  5. nasm
  6. make
  7. qemu-nbd qemu-img(用来生成和挂载虚拟硬盘)
  8. fdisk
  9. grub(用于引导OS)

配置步骤

1.整个虚拟机,最好是ubuntu的,然后把上面的4-9工具都安装好

2.建立目录结构

BlingOS
├─bootloader
│  └─legacy
├─include
│  ├─device
│  └─kernel
├─lib
├─script
├─src
│  ├─device
│  ├─kernel
│  └─user
└─target
    ├─device_obj
    ├─kernel_obj
    └─lst

include是头文件目录,src是源码目录,target是生成的目标文件 内核程序 虚拟磁盘等文件的目录

3. 在项目的根目录下建立makefile,把用得比较多的命令写入到makefile里

先直接在shell里运行以下命令

qemu-img create -f vpc target/disk.vhd 20G #虚拟硬盘格式是vhd,大小20G
sudo modprobe nbd	#加载nbd内核模块
sudo qemu-nbd -c /dev/nbd0 ~/BlingOS/target/disk.vhd	#使用qemu-nbd挂载虚拟硬盘

然后给虚拟硬盘分区

fdisk /dev/nbd0	#使用fdisk操作nbd0
o	#创建DOS分区表
n	#创建新分区
p	#主分区
1	#分区号1
2048	#第一个扇区号2048
+300M	#大小300M
t	#更改文件系统类型
0c	#改为FAT32
a	#将主分区激活
w	#写入更改

然后给虚拟硬盘安装GRUB

mkdir ~/tmp		#创建用于挂载分区的目录
sudo mount /dev/nbd0p1 ~/tmp	#将刚刚分出来的分区挂载至tmp下
sudo mkdir ~/tmp/boot ~/tmp/BlingOS #创建两个目录,boot用于存放grub,BlingOS用于存放内核
sudo grub-install --boot-directory=/home/用户名/tmp/boot /dev/nbd0		#安装GRUB

然后在~/tmp/boot/grub下创建grub.cfg,写入以下内容

set default=0

set timeout_style=menu
set timeout=5


menuentry "BlingOS" {
    insmod multiboot2
    multiboot2 /BlingOS/kernel
    boot
}
 
menuentry "reboot" {
    insmod reboot
    reboot
}
 
menuentry "halt" {
    insmod halt
    halt
}

写入完成后将vhd文件上传至宿主机(ftp或其他方式都可),接下来的操作在宿主机中进行
建立一个bochsrc.bxrc文件,写入以下内容(路径相关内容根据自己情况进行更改)

# configuration file generated by Bochs
plugin_ctrl: unmapped=true, biosdev=true, speaker=true, extfpuirq=true, parallel=true, serial=true, gameport=true
config_interface: win32config
display_library: win32, options="gui_debug"
memory: host=512, guest=512
romimage: file="bochs安装路径/BIOS-bochs-latest**", address=0x00000000, options=none
vgaromimage: file="bochs安装路径/VGABIOS-lgpl-latest"
boot: disk, floppy, cdrom,
floppy_bootsig_check: disabled=1

# no floppyb
ata0: enabled=true, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=disk, path="虚拟磁盘绝对路径", mode=vpc
ata0-slave: type=none
ata1: enabled=true, ioaddr1=0x170, ioaddr2=0x370, irq=15
ata1-master: type=none
ata1-slave: type=none
ata2: enabled=false
ata3: enabled=false
optromimage1: file=none
optromimage2: file=none
optromimage3: file=none
optromimage4: file=none
optramimage1: file=none
optramimage2: file=none
optramimage3: file=none
optramimage4: file=none
pci: enabled=1, chipset=i440fx
vga: extension=vbe, update_freq=5, realtime=1
cpu: count=1:1:1, ips=20000000, model=bx_generic, reset_on_triple_fault=0, cpuid_limit_winnt=0, ignore_bad_msrs=1, mwait_is_nop=0
cpuid: level=6, stepping=6, model=3, family=6, vendor_string="GenuineIntel", brand_string="Intel(R) Core(TM) i7-4770 CPU (Haswell)"
cpuid: mmx=true, apic=xapic, simd=ssse3, sse4a=false, misaligned_sse=false, sep=true
cpuid: movbe=true, adx=true, aes=true, sha=true, xsave=true, xsaveopt=true, x86_64=true
cpuid: 1g_pages=true, pcid=true, fsgsbase=true, smep=true, smap=true, mwait=true
cpuid: vmx=1
print_timestamps: enabled=0
port_e9_hack: enabled=0
private_colormap: enabled=0
clock: sync=none, time0=local, rtc_sync=0
# no cmosimage
log: -
logprefix: %t%e%d
debug: action=ignore
info: action=report
error: action=report
panic: action=ask
keyboard: type=mf, serial_delay=250, paste_delay=100000, user_shortcut=none
mouse: type=ps2, enabled=false, toggle=ctrl+mbutton
sound: waveoutdrv=win, waveout=none, waveindrv=win, wavein=none, midioutdrv=win, midiout=none
speaker: enabled=true, mode=sound
parport1: enabled=true, file=none
parport2: enabled=false
com1: enabled=true, mode=null
com2: enabled=false
com3: enabled=false
com4: enabled=false
usb_uhci: enabled=1, port1=none, options1=none, port2=none, options2=none

然后win+r输入cmd,打开命令提示符

cd /D "bochs安装目录"
bochsdbg -f bochsrc.bxrc的路径 -q

然后bochs会启动gui-debugger,点击continue,当出现以下画面时,说明成功了
BlingOS开发笔记--1.开发准备与环境配置

注意:使用FTP将虚拟硬盘上传至宿主机时,一定要将传输模式设为binary,否则上传的虚拟硬盘与源文件不一样

上一篇:Photoshop插件--晕影彩色--脚本开发--PS插件


下一篇:Photoshop插件--证件照--1寸裁剪--1寸排版--脚本开发--PS插件