最后有福利
在看一些 GNU 开源软件,或者阅读 Linux 内核、驱动源码时,相信大家和我一样,经常会遇到一些“看似熟悉”,但一仔细分析又不是很懂的 C 语言“稀奇古怪”的语法。其实这些都是 GNU C 对 C 语言语法的扩展。一般的教材中基本不会讲到这些,所以看不懂这些特殊的 C 语法应用也很正常。
此达人课将带领大家,一起学习 Linux 内核或 GNU 开源软件中对 C 语言各种扩展语法的使用,最终的目标是看懂 Linux 内核或 GNU 开源软件中这些“奇葩的语法”,扫除理解 Linux 内核驱动或 GNU 开源软件的语法障碍。
1《Linux内核设计与实现》
2《深入理解Linux内核》
3《Linux内核完全注释》
4《Linux内核源代码情景分析 》
一。《Linux内核设计与实现》
1. 单内核和微内核
Linux的内核虽然是基于单内核的,但是经过这么多年的发展,也具备微内核的一些特征。(体现了Linux实用至上的原则)
主要有以下特征:
- 支持动态加载内核模块
- 支持对称多处理(SMP)
- 内核可以抢占(preemptive),允许内核运行的任务有优先执行的能力
- 不区分线程和进程
2. 内核版本号
内核的版本号主要有四个数组组成。比如版本号:2.6.26.1 其中,
2 - 主版本号
6 - 从版本号或副版本号
26 - 修订版本号
1 - 稳定版本号
副版本号表示这个版本是稳定版(偶数)还是开发版(奇数),上面例子中的版本号是稳定版。
稳定的版本可用于企业级环境。
修订版本号的升级包括BUG修正,新的驱动以及新的特性的追加。
稳定版本号主要是一些关键性BUG的修改。
二,深入理解Linux内核
Linux 和一些商用unix的区别
1. Linux 主要是由 unix 内核加上 gnu的引用程序组成的 兼容IEEE POSIX 标准
2.linux 是传统上面的单块结构有逻辑上不同的部分组成
3.linux采用的是模块的方式(动态编译的方式)加载程序块。
4.Linux内核支持对称多处理器
5.Linux支持面向对象的虚拟文件系统,日志文集系统
优势:
1.免费
2.充分定制Linux系统 随时随地修改Linux代码
3.可以充分利用硬件平台 ,对硬件性能要求不高
4.Linux系统的代码运行时高效率的 ,而且没有商用的限制 。
5.内核精简
6.Linux系统兼容性好
7后台支持广泛
系统调用是 实现用户态到内核态的过程 , 特权模式由用户态转变为内核态 保存断点 ,最后 由硬件实现系统调用 返回进程断点
三,《Linux内核完全注释》
1、选择《Linux内核完全注释》的理由
从现在起,我打算学习Linux内核,作一个基本的了解和入门吧。在网上也看了许多国内外的一些经典书籍的评价,最后我还是选择阅读《Linux内核完全注释》这本书,作为一个基础入门,这本书在网上的评价也还可以。
这本书讲解的Linux内核版本是Linux 0.11,虽然内核版本很低,但是作为学习来说应该还是可以的,该内核已经能够正常的编译运行,并且其中已经包括了Linux工作原理的精髓。由于Linux 0.11内核不超过2万行代码量,因此可以完全的通过一本书进行了解和学习。正是因为Linux 0.11内核代码量小,这本书对Linux 0.11内核的全部代码进行了注释,便于读者学习和理解。
为了让读者对所研究的系统有感性的了解,并能通过实验来加深对原来的理解,作者还专门重建了基于该内核的可运行的Linux 0.11系统,因为其中含有GNU gcc编译环境,因此使用该系统也能做一些简单的开发工作。
当然,使用早期内核作为学习的对象也有不足之处。所选用的Linux 0.11内核,不包含对虚拟文件系统VFS的支持、对网络系统的支持,仅支持a.out执行文件和对其他一些现有内核中复杂子系统的说明。
2、资料传送门
下面列举一下书中提供的一些资料链接,也方便以后自己的查找吧:
http://oldlinux.org/Linux.old/images/:该目录中含有已经制作好的内核映像文件bootimage和根文件系统映像文件rootimage。
http://oldlinux.org/Linux.old/bochs/:该目录中含有已经设置好的运行在计算机仿真系统bochs下的Linux系统。
http://oldlinux.org/Linux.old/Linux-0.11/:该目录中含有可以在Linux 0.11系统中使用的其他一些工具程序和原来发布的一些安装说明文档。
http://oldlinux.org/Linux.old/kernel/0.1x/:可以在这里下载本书讲解的Linux 0.11内核源码,文件名:linux-0.11.tar.gz。
3、内核源码目录结构
整个Linux 0.11内核源代码的目录结构如下图所示: