# linux-core **Repository Path**: dai-mingjing/linux-core ## Basic Information - **Project Name**: linux-core - **Description**: linux内核分析实验 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-08 - **Last Updated**: 2026-02-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Linux内核分析 实现一个简易类 busybox 程序并替代其作为1号进程启动 (题目二) - 能够起到和实验二busybox等效的功能,并能够替换到busybox作为1号进程 - 支持不少于8条Linux中的基础命令 - 能够在实验二的根文件系统环境下运行,并完成测试 --- ### Introduction 按照 `/documents` 下的文档构建,并完成题目二实现简易 busybox。目录结构如下: ``` linux-core/ ├── build-i386-linux-for-qemu/ # 内核构建相关 ├── documents/ # 文档 ├── linux-2.6.24/ # 内核源码 ├── linux-2.6.24.tar.xz # 内核源码压缩包 └── rootfsmaker/ # 根文件系统(busybox实现所在目录) ├── busybox-1_5_stable/ # busybox源码 ├── rootfs_template/ # 根文件系统源码 ├── env.sh # 环境变量脚本 ├── init.c # 1号进程入口程序 ├── Makefile └── sim-busybox/ # 简易busybox实现 ├── include/ # 实现命令的 .h 文件目录 └── src/ # 实现命令源文件 ``` 启动: 注意可能需要修改一些路径: - `/rootfsmaker/Makefile` 中的 `KERNEL_IMAG` 其他路径见实验文档。 ```bash # 启动, bzImage和initramfs.cpio.gz路径可能需要替换 qemu-system-i386 -kernel ../linux-2.6.24/arch/x86/boot/bzImage -initrd initramfs.cpio.gz -append "console=ttyS0 rdinit=/init" -m 256M -nographic # 编译并启动 cd rooftsmaker make init_run ``` 其他命令见 `/rootfsmaker/Makefile` ## busybox 实现 **如何添加实现命令** 1. 在 `/sim-busybox/include/` 定义 `下划线+命令名 ` 头文件 加下划线主要是与内置头文件区分,否则有可能报错 内容参考已实现命令,主要定义 `excute` (执行命令) 和 `printSimHelp` (简易帮助) 两个函数 2. 在 `/sim-busybox/src/` 实现对应的命令 主要形式是: - `execute` 为执行入口,解析命令选项与参数,选项用 `flag` 记录 - `sim` 具体执行 - `printSimHelp` 在总 `help` 命令中简易显示帮助 - `help` 对应命令的帮助 各个函数参数相对统一,这样比较清晰一点 3. `/sim-busybox/init.c` 中添加命令调用 引入头文件, 在 `parse_and_execute` 中 /* 执行指令 */ 处添加命令的else if,并在 help 命令中调用相应 `printSimHelp` **已实现命令** | 命令 | 命令简述 | 支持选项及解释 | |------|----------|----------------| | **`ls`** | 列出目录内容 | `-a` 显示所有文件(包括隐藏文件)
`-A` 显示除 `.` 和 `..` 外的所有文件
`-l` 长格式显示(详细信息)
`-h` 与 `-l` 配合,人类可读文件大小
`-G` 彩色输出
`--help` 显示帮助信息 | | **`echo`** | 显示文本行 | `-n` 不输出尾随换行符
`-e` 解释反斜杠转义
`-E` 不解释转义字符(默认)
`--help` 显示帮助信息 | | **`pwd`** | 显示当前目录 | `-L` 显示逻辑路径(默认)
`-P` 显示物理路径(解析符号链接)
`--help` 显示帮助信息 | | **`clear`** | 清空终端屏幕 | `--help` 显示帮助信息 | | **`cd`** | 切换工作目录 | `--help` 显示帮助信息
支持特殊目录:`~`(家目录)、`.`(当前目录)、`..`(父目录) | | **`cat`** | 连接并显示文件 | `-n` 显示所有行号
`-b` 显示非空行行号
`-s` 压缩多个空行
`--help` 显示帮助信息 | | **`mkdir`** | 创建新目录 | `-p` 递归创建目录
`-m MODE` 设置权限模式
`-v` 显示创建过程
`--help` 显示帮助信息 | | **`touch`** | 创建/更新时间戳 | `-a` 只更新访问时间
`-m` 只更新修改时间
`-c` 不创建新文件
`-t STAMP` 使用指定时间戳
`--help` 显示帮助信息 | | **`rm`** | 删除文件/目录 | `-r, -R` 递归删除目录
`-f` 强制删除,不提示
`-v` 显示删除过程
`--help` 显示帮助信息 | | **`cp`** | 复制文件/目录 | `-r, -R` 递归复制目录
`-f` 强制覆盖
`-v` 显示复制过程
`--help` 显示帮助信息 | | **`mv`** | 移动/重命名文件 | `-f` 强制覆盖
`-v` 显示移动过程
`--help` 显示帮助信息 | | **`ps`** | 显示进程信息 | `-e` 显示所有进程
`-f` 完整格式显示
`-l` 长格式显示
`--help` 显示帮助信息 | | **`grep`** | 搜索文本模式 | `-i` 忽略大小写
`-v` 反向匹配(显示不匹配的行)
`-n` 显示行号
`-c` 只显示匹配计数
--help` 显示帮助信息 | | **`find`** | 在目录树中查找文件 | `-name PATTERN` 按文件名匹配
`-type TYPE` 按文件类型匹配(f=文件,d=目录)
`-size SIZE` 按文件大小匹配
`-mtime DAYS` 按修改时间匹配
`--help` 显示帮助信息 | | **`tree`** | 树状显示目录结构 | `-a` 显示所有文件(包括隐藏文件)
`-d` 只显示目录
`-L LEVEL` 限制显示深度
`--help` 显示帮助信息 |