Linux 内核
[TOC]
Linux 架构图

用户模式
应用程序(sh、vi、Text Editor等)
复杂库(KDE、glib等)简单库(opendbm、sin等)
C 库(open、open、socket、exec、calloc等)
内核模式
- 系统中断、调用、错误等软硬件消息
- 内核(驱动程序、进程、网络、内存管理等)
- 硬件(处理器、内存、各种设备)
Linux Kernel+Shell = OS
内核划分

内核的组成部分

内核源代码目录结构
| 目录、文件 | 说明 |
|---|---|
| Documentation/ | 内核各部分的通用解释和注释 |
| arch/ | 和硬件体系结构相关 |
| block/ | 块设备驱动程序 I/O 调度 |
| certs/ | |
| crypto/ | 常用加密和散列算法(如 AES 、 SHA 等),还有一些压缩和 CRC 校验算法 |
| drivers/ | 设备驱动程序 |
| firmware/ | |
| fs/ | 支持的各种文件系统 |
| include/ | 头文件 |
| init/ | 内核初始化代码 |
| ipc/ | 进程间通信代码 |
| kernel/ | 内核部分,包括进程调度、定时器等,而和平台相关的部分在 arch/*/kernel/ |
| lib/ | 库文件 |
| mm/ | 内存管理,和平台相关部分在 arch/*/mm/ |
| net/ | 网络相关,实现各种网络协议 |
| samples/ | |
| scripts/ | 用于配置内核的脚本文件 |
| security/ | 主要是 SELinx 模块 |
| sound/ | ALSA 、OSS 音频设备驱动核心代码和常用设备驱动 |
| tools/ | |
| usr/ | 实现用于打包和压缩的 cpio 等 |
| virt/ | |
| COPYING | |
| CREDITS | |
| Kbuild | 内核的编译系统 |
| Kconfig | 给用户提供配置选择的功能 |
| MAINTAINERS | |
| Makefile | 定义 Linux 内核编译规则 |
| README | |
| REPORTING-BUGS |
内核的编译
推荐 make menuconfig
- Makefile
- 配置文件(Kconfig)
- 配置工具
文件系统目录结构
Linux 根目录(即 “/”)
| 目录 | 说明 |
|---|---|
| /bin | 基本明命令, ls、cp、mkdir 等 |
| /sbin | 系统命令,mod probe、hwclock、ifconfig 等 |
| /dev | 设备文件存储目录 |
| /etc | 系统配置文件 |
| /lib | 系统库文件存放 |
| /mnt | 挂载存储设备等挂载目录 |
| /opt | 有些软件包安装位置 |
| /proc | 操作系统运行时,进程及内核信息存放。伪文件系统 proc 挂载目录,存在于内存 |
| /tmp | 临时文件 |
| /usr | 存放程序目录,如用户命令、用户库等 |
| /var | 存放系统日志等 |
| /sys | sysfs 文件系统映射目录 |
文件系统与设备驱动

udev 用户空间设备管理
- 设备和驱动分离,并通过总线进行匹配。
- udev 利用内核通过 netlink 发出的 uevent 信息动态创建设备文件节点
| 设备管理 | 说明 |
|---|---|
| udev | |
| mdev | udev 轻量级版本,集成于 busybox 中 |
| vold | Android 采用 |