# Linux 内核与文件系统课程设计

上一篇：[[17 Linux 字符设备驱动]]
返回目录：[[Linux 学习指南]]

> [!info] 来源
> 整理自 [[操作系统课程设计指导书]] 的实验一、实验五。

## 添加系统调用

基本链路：分配系统调用号并修改系统调用表 -> 声明服务例程原型 -> 实现并校验参数 -> 重新编译和安装内核 -> 编写用户态程序测试。系统调用是用户态进入内核态的受控接口，参数必须进行合法性和权限检查。

## 内核编译的主要阶段

```bash
make mrproper       # 清理配置和构建残留
make menuconfig     # 配置内核
make -j$(nproc)     # 编译内核
make modules        # 编译模块
sudo make modules_install
sudo make install
```

不同发行版的引导程序、安装路径和权限要求可能不同。修改引导配置或重启前，应保留可用的旧内核。

## 简单文件系统的设计

课程设计中的 FAT 风格文件系统可拆为：引导块、FAT、根目录/目录区、文件控制块（FCB）、用户打开文件表（USEROPEN）和数据区。核心命令包括格式化、启动、列目录、切换目录、创建/删除文件、打开/关闭、读写和退出。

## 文件 API 与资源管理

`fopen` 打开文件，`fread`/`fwrite` 读写，`fseek` 定位，`feof` 判断结束，`fclose` 释放资源。设计读写函数时要明确偏移量、缓冲区大小、错误返回值和文件关闭时机；退出文件系统前应回写元数据并关闭所有打开文件。
