第一章 Linux内核简介
1.1 Unix的历史
- 由文件系统原型演化而来
- 简洁
- 抽象为文件
- C语言编写
- 进程创建迅速和fork()调用
- 进程间通信原语
1.2 linux简介
- 类Unix系统
- 内核公开*
- 基础:内核、C库、工具集、系统的基本工具
- 支持windows系统——完整的图形用户桌面环境
1.3 操作系统和内核简介
操作系统负责完成最基本功能和系统管理部分。这些部分包括内核、设备驱动程序、启动引导程序、命令行Shell或者其他种类的用户界面、基本的文件管理工具和系统工具。
内核态:
- 内核有时被称为管理者或操作系统核心,内核=中断服务程序+调度程序+内存管理程序+网络、进程间通信等系统服务程序。
- 一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限。(内核空间)
系统调用:
- 在系统中运行的应用程序通过系统调用来与内核通信。
- 当一个应用程序执行一条系统调用,我们说内核正在代其执行。
- 应用程序被称为通过系统调用在内核空间执行,内核被称为运行于上下文中。
- 应用程序完成其工作的基本行为方式——应用程序通过系统调用陷入内核。
中断机制:
- 异步的中断信号->中断号->中断服务程序->程序调用
- 处理器的三种活动:
用户空间-用户进程
内核空间-进程上下文
内核空间-中断上下文
1.4 Linux内核和传统Unix内核比较
单内核:
- 从整体上作为一个大过程,运行在一个单独的地址空间
- 单个静态二进制文件存储
- 内核间通信微不足道
- 内核直接调用函数
微内核:
- 功能被划分为多个独立的过程
- 通过消息传递处理微内核通信:IPC机制
- 让大部分或全部服务器位于内核
Linux与Unix差异见 P6—7
1.5 linux内核版本
- 用.分隔
- 主版本号+从版本号+修订版本号+稳定版本号(从版本号奇数为开发版,偶数为稳定版)
第二章 从内核出发
2.1 获取内核源码
- git获取代码
- tar解压代码
(内核源码安装在/usr/src/linux目录下)
- patch添加补丁
2.2内核源码树
书P11
- COPYING是内核许可证
- CREDITS是开发者列表
- MAINTAINERS是维护者列表,负责维护内核子系统和驱动程序
- Makefile是基本内核的Makefile
2.3编译内核
配置和定制:可以配置的各种选项,以CONFIG_FEATURE为形式表示,其前缀CONFIG。配置项为二选一或三选一(不懂选了module后如何以模块形式生成独立代码)。配置选项也可以是字符串或整数(预处理宏)。
使用make config等可以简化内核配置
配置好后使用make编译(make配合不同的命令可以对输出进行重定向或以多个作业编译内核)
2.4 内核开发的特点
- 无lib库或无标准头文件
- 使用GNU C(内联函数、内联汇编、分支声明)
- 没有内存保护机制(不要轻易在内核中使用浮点数、容积小而固定的栈、同步和并发、可移植)