mkernel 项目使用教程
mkernelA minimalist kernel项目地址:https://gitcode.com/gh_mirrors/mk/mkernel
1. 项目的目录结构及介绍
mkernel 是一个极简的内核项目,其目录结构如下:
mkernel/
├── boot.o
├── boot.s
├── grub.cfg
├── kernel.c
├── kernel.o
├── link.ld
├── Makefile
└── README.md
目录结构介绍:
boot.o
和boot.s
: 引导程序的目标文件和源文件。grub.cfg
: GRUB 引导配置文件。kernel.c
: 内核的主要源代码文件。kernel.o
: 内核的目标文件。link.ld
: 链接脚本,用于链接内核。Makefile
: 编译和构建内核的 Makefile。README.md
: 项目说明文档。
2. 项目的启动文件介绍
boot.s
boot.s
是引导程序的汇编源文件,负责初始化 CPU 状态并跳转到内核入口点。其主要功能包括:
- 设置 CPU 模式。
- 初始化堆栈。
- 跳转到
kernel_main
函数。
kernel.c
kernel.c
是内核的主要源代码文件,包含 kernel_main
函数。该函数是内核的入口点,负责初始化内核并输出 "my first kernel" 到屏幕上。
void kernel_main() {
// 初始化内核
// 输出 "my first kernel"
char *video_memory = (char *)0xb8000;
*video_memory = 'm';
*(video_memory + 2) = 'y';
*(video_memory + 4) = ' ';
*(video_memory + 6) = 'f';
*(video_memory + 8) = 'i';
*(video_memory + 10) = 'r';
*(video_memory + 12) = 's';
*(video_memory + 14) = 't';
*(video_memory + 16) = ' ';
*(video_memory + 18) = 'k';
*(video_memory + 20) = 'e';
*(video_memory + 22) = 'r';
*(video_memory + 24) = 'n';
*(video_memory + 26) = 'e';
*(video_memory + 28) = 'l';
}
3. 项目的配置文件介绍
grub.cfg
grub.cfg
是 GRUB 引导配置文件,用于配置 GRUB 引导加载器。其内容如下:
menuentry "mkernel" {
multiboot /boot/mkernel
boot
}
该配置文件定义了一个菜单项 "mkernel",并指定 GRUB 加载 /boot/mkernel
文件。
link.ld
link.ld
是链接脚本,用于链接内核。其内容如下:
ENTRY(kernel_main)
SECTIONS {
. = 1M;
.text BLOCK(4K) : ALIGN(4K) {
*(.text)
}
.rodata BLOCK(4K) : ALIGN(4K) {
*(.rodata)
}
.data BLOCK(4K) : ALIGN(4K) {
*(.data)
}
.bss BLOCK(4K) : ALIGN(4K) {
*(COMMON)
*(.bss)
}
}
该链接脚本定义了内核的入口点为 kernel_main
,并指定了各个段的加载地址和对齐方式。
以上是 mkernel 项目的目录结构、启动文件和配置文件的详细介绍。希望这份教程能帮助你更好地理解和使用 mkernel 项目。
mkernelA minimalist kernel项目地址:https://gitcode.com/gh_mirrors/mk/mkernel