# 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` 显示帮助信息 |