从Lunix学做QEMU可运行系统(精华精简版)
想入门操作系统,不用啃Linux百万行代码。Gitee的Lunix(仓库:https://gitee.com/scicat-team/lunix )是轻量教学类Unix系统,核心仅20KB,像“系统毛坯房”——搭好基础框架,新手补细节就能快速做出QEMU可运行系统。
1. 核心认知:操作系统要做啥?
本质是“衔接硬件与软件”:开机引导硬件,运行时管显示/键盘,加载终端、记事本。Lunix只实现这些核心,比如VGA显示、开关机、终端命令。
开发像“盖房”:地基(引导程序)→骨架(内核)→门窗(应用),Lunix已画好前两步草图。
2. 4类必装工具(1条命令搞定)
QEMU:虚拟电脑,跑系统镜像,调试方便(5.0+);
LLVM工具链(Clang+LLD):转C/汇编为机器码;
NASM:处理引导代码(开机先认汇编);
Git:下Lunix代码。
Ubuntu/Debian安装:
sudo apt install qemu-system-x86 clang lld nasm git
Windows/Mac下安装包即可。
3. 引导程序:让电脑找到内核
开机后BIOS先找引导程序(Lunix在boot/boot.asm),核心做两件事:
1.从磁盘加载内核到内存;
2.切到CPU保护模式(支持大内存,防乱调用硬件)。
启动链:BIOS→boot.asm→加载内核→交权,直接参考Lunix几十行代码,不用重写。
4. 内核框架:系统的“承重梁”
Lunix内核在kernel/(C语言为主),抓3个核心:
显示(vga.c):VGA文本模式下,往显存写“字符+颜色”就显内容,Lunix有基础函数;
硬件(power.c):开关机是给CPU端口发指令,Lunix留框架,查手册补指令;
内存定位(linker.ld):告诉编译器内核放内存哪,Lunix脚本可直接用,错了会崩。
5. 简单应用:让系统能用
内核跑起来后,加两个基础应用(Lunix在desktop/):
终端:解析命令(如help显命令、notepad开记事本),Lunix有解析基础;
记事本:接收键盘输入→显屏幕→模拟保存,Lunix支持导航/删字符,补按键检测即可。
6. 编译运行:5步启动
按Lunixscripts/build.sh逻辑来:
1.编引导:nasm -f bin boot/boot.asm -o build/boot.bin;
2.编内核/应用:clang -target i686-pc-none-elf -nostdlib -ffreestanding -Iinclude -c [lbk]源文件[rbk] -o [lbk]目标文件[rbk];
3.链接内核:ld.lld -m elf_i386 -nostdlib -static -T kernel/linker.ld -o build/kernel.elf [lbk]所有.o文件[rbk];
4.做镜像:dd if=/dev/zero of=build/disk.img bs=512 count=2880,再把boot.bin和kernel.bin写进去;
5.QEMU运行:qemu-system-i386 -drive format=raw,file=build/disk.img -m 512M。
7. 后续完善:从毛坯到可用
Lunix很多功能是空白,可优先补:
fs.c:实现真实文件读写(让记事本存内容);
加鼠标支持、终端新命令(如calc计算器)。
卡壳查Lunix注解或提Issue,它本就是教学用,对新手友好。
想入门操作系统,不用啃Linux百万行代码。Gitee的Lunix(仓库:https://gitee.com/scicat-team/lunix )是轻量教学类Unix系统,核心仅20KB,像“系统毛坯房”——搭好基础框架,新手补细节就能快速做出QEMU可运行系统。
1. 核心认知:操作系统要做啥?
本质是“衔接硬件与软件”:开机引导硬件,运行时管显示/键盘,加载终端、记事本。Lunix只实现这些核心,比如VGA显示、开关机、终端命令。
开发像“盖房”:地基(引导程序)→骨架(内核)→门窗(应用),Lunix已画好前两步草图。
2. 4类必装工具(1条命令搞定)
QEMU:虚拟电脑,跑系统镜像,调试方便(5.0+);
LLVM工具链(Clang+LLD):转C/汇编为机器码;
NASM:处理引导代码(开机先认汇编);
Git:下Lunix代码。
Ubuntu/Debian安装:
sudo apt install qemu-system-x86 clang lld nasm git
Windows/Mac下安装包即可。
3. 引导程序:让电脑找到内核
开机后BIOS先找引导程序(Lunix在boot/boot.asm),核心做两件事:
1.从磁盘加载内核到内存;
2.切到CPU保护模式(支持大内存,防乱调用硬件)。
启动链:BIOS→boot.asm→加载内核→交权,直接参考Lunix几十行代码,不用重写。
4. 内核框架:系统的“承重梁”
Lunix内核在kernel/(C语言为主),抓3个核心:
显示(vga.c):VGA文本模式下,往显存写“字符+颜色”就显内容,Lunix有基础函数;
硬件(power.c):开关机是给CPU端口发指令,Lunix留框架,查手册补指令;
内存定位(linker.ld):告诉编译器内核放内存哪,Lunix脚本可直接用,错了会崩。
5. 简单应用:让系统能用
内核跑起来后,加两个基础应用(Lunix在desktop/):
终端:解析命令(如help显命令、notepad开记事本),Lunix有解析基础;
记事本:接收键盘输入→显屏幕→模拟保存,Lunix支持导航/删字符,补按键检测即可。
6. 编译运行:5步启动
按Lunixscripts/build.sh逻辑来:
1.编引导:nasm -f bin boot/boot.asm -o build/boot.bin;
2.编内核/应用:clang -target i686-pc-none-elf -nostdlib -ffreestanding -Iinclude -c [lbk]源文件[rbk] -o [lbk]目标文件[rbk];
3.链接内核:ld.lld -m elf_i386 -nostdlib -static -T kernel/linker.ld -o build/kernel.elf [lbk]所有.o文件[rbk];
4.做镜像:dd if=/dev/zero of=build/disk.img bs=512 count=2880,再把boot.bin和kernel.bin写进去;
5.QEMU运行:qemu-system-i386 -drive format=raw,file=build/disk.img -m 512M。
7. 后续完善:从毛坯到可用
Lunix很多功能是空白,可优先补:
fs.c:实现真实文件读写(让记事本存内容);
加鼠标支持、终端新命令(如calc计算器)。
卡壳查Lunix注解或提Issue,它本就是教学用,对新手友好。