第一章 Linux内核简介
一、Unix
Unix是一个强大、健壮和稳定的操作系统。
Unix——支持抢占式多任务、多线程。虚拟内存、换页、动态链接和TCP/IP网络。
二、操作系统和内核简介
操作系统是指在整个系统中负责完成最基本功能和系统管理的那些部分。
内核独立于普通应用程序,一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限。
这种系统态和被保护起来的内存空间,统称为内核空间。
在系统中运行的应用程序通过系统调用来与内核通信。
应用程序完成其工作的基本行为方式是:
应用程序通过系统调用界面陷入内核。
处理器的活动必然其下三者之一:
- 运行于用户空间,执行用户进程
- 运行于内核空间,处于进程上下文,代表某个特定的进程执行
- 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断
第二章 从内核出发
一、获取内核源码
使用git获取源码:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git git pull # 更新分支到Linux的最新分支
安装解压:
tar xvjf linux-x.y.z.tar.bz2 或者 tar xvzf linux-x.y.z.tar.gz
打补丁:
patch -p1 < ../patch-x.y.z
二、编译内核
1.配置内核
-
字符页面的命令行工具:
make config
-
图形界面工具
make menuconfig
其他的几种配置:
make defconfig //基于默认配置
make oldconfig //验证和更新配置
2.编译内核
make
减少编译的垃圾信息——对输出进行重定向。
make > .. /detritus # 重定向到这个文件里了
make > /dev/null # 把无用的输出信息重定向到永无返回值的黑洞里。
3.安装新内核
make modules_install
System.map这个文件是一份符号对照表
三、内核开发的特点
- 内核开发时既不能访问C库也不能访问标准的C头文件
应对:include/linux文件夹中包含了所需的内核头文件。 - 内核编程时必须使用GNU C
- 内核编程时缺乏像用户空间那样的内存保护机制
内核中内存不分页。 - 内核编程时难以执行浮点运算
- 内核给每个进程只有一个很小的定长堆栈
- 由于内核支持异步中断、抢占和SMP,必须时刻注意同步和并发
SMP:对称多处理系统。
常用的解决竞争的方法:自旋锁和信号量。 - 要考虑可移植性的重要性
诸如保持字节序,64位对其,不假定字长和页面长度等。
参考:http://www.cnblogs.com/20135202yjx/p/5272633.html