ucore lab0 实验准备
前言
实现一个操作系统一直是我的一个愿望,当然为了不只是愿望,因此近期开始尝试实现。搜索了相关资料后,计划先从清华大学的ucore操作系统开始,完成其8个实验,之后再进一步修改、添加新功能,逐步实现自己的OS
另外,博客已经很久没更新了,这是时隔3年的第一次更新,之后也会更多通过博客园记录学习过程
内容
完成实验环境的搭建
开发环境
ucore实验与运行需要在Linux上,因为Win还是比较方便,所以我使用的是虚拟机安装Linux,虚拟机使用VMware,Linux发行版使用最新版的Ubuntu 20.04
ucore实验编写时使用Win的VS Code,较为流畅、方便(当然也可以直接在Ubuntu中使用VS Code编辑),但是编译、调试、运行OS时需要使用虚拟机的Ubuntu,为了使得两者无缝切换,可以将Win的相应目录映射到Ubuntu虚拟机/mnt目录下。如图我映射了Win下的整个A盘,映射名称为a,映射到了Ubuntu的/mnt/hgfs/a目录
下载ucore
使用git从github中下载,github地址,如下:
git clone https://github.com/chyyuu/ucore_os_lab.git
由于git clone比较慢,因此我是直接在github上下载的zip压缩包
安装qemu
ucore使用qemu模拟器运行,qemu支持多种cpu架构的模拟,如i386、arm、mips等,通过apt可安装qemu,如下:
sudo apt-get install qemu-system
编译内核
从github下载的ucore_os_lab目录中,ucore_os_lab/labcodes_answer为较为完整的os代码,首先通过编译lab1的代码了解ucore编译过程。
- 进入
ucore_os_lab/labcodes_answer/lab1_result
目录 - 使用
make clean
清空编译结果 - 使用
make
命令编译
编译成功后生成一系列目标文件,主要有:
- ucore.img:被qemu访问的虚拟硬盘文件
- kernel: ELF格式的toy ucore kernel执行文,被嵌入到了ucore.img中
- bootblock: 虚拟的硬盘主引导扇区(512字节),包含了bootloader执行代码,被嵌入到了ucore.img中
- sign:外部执行程序,用来生成虚拟的硬盘主引导扇区
内核调试
内核开发过程中不可能一次成功,需要反复调试、运行,为了使调试过程更为直观、易操作,使用Ubuntu中的VS Code进行调试。VS Code需要做如下配置:
"miDebuggerServerAddress": "127.0.0.1:1234",
"program": "bin/kernel"
完成配置后可通过VS Code进行调试
参考
- ucore文档 https://chyyuu.gitbooks.io/ucore_os_docs/content/
- 学堂在线课程 https://next.xuetangx.com/course/THU08091000267/1516699
- 手把手教你利用VS Code+Qemu+GDB调试Linux内核 https://zhuanlan.zhihu.com/p/105069730
作者:whileskies
出处:https://www.cnblogs.com/whileskies/p/13138491.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?