奔跑吧 Linux内核(入门篇)
上QQ阅读APP看书,第一时间看更新

前言

2017年9月《奔跑吧 Linux内核》一书出版后得到了广大Linux从业人员和爱好者(特别是从事Linux相关产品开发的工程师)的好评,也有不少高校采用该书作为研究生的Linux内核课程的参考书目。《奔跑吧 Linux内核》以实际工程中的问题为导向来分析Linux内核,很多读者认为它不太适合 Linux 初学者。因此,我重新编写了一本适合 Linux 初学者学习Linux内核的入门教程。

2018年,中兴事件让芯片技术和操作系统变得火热起来,越来越多的人关注操作系统等基础学科。特别是Linux内核开源项目,已经成为操作系统研究和使用的典范。很多读者反映在看完《鸟哥的Linux私房菜》一书后已经能够熟练使用Linux系统,但是对Linux内核以及更深层次的技术问题仍一头雾水。《奔跑吧 Linux内核入门篇》希望能帮助已经熟悉Linux系统使用的读者深入学习Linux内核。

本书特色

循序渐进地讲述Linux内核入门知识。

Linux内核庞大而复杂,任何一本厚厚的Linux内核书都可能会让人看得昏昏欲睡。因此,对于初学者来说,Linux内核的入门需要循序渐进,一步一个脚印。初学者可以从如何编译Linux内核开始入门,学习如何调试Linux内核,动手编写一个简单的内核模块,逐步深入Linux内核的核心模块中。

为了降低读者的学习难度,本书不会分析Linux内核的源代码,要深入理解Linux内核源代码的实现,可以参考《奔跑吧 Linux内核》。

突出动手实验。

对于初学者,理解操作系统最好的办法之一就是动手实验。因此,本书在每章中都设置了几个经典的实验,读者可以在学习基础知识后通过实验来加深理解。本书所有的实验都可以在优麒麟Linux 18.04系统中完成。

反映Linux内核社区新发展。

除了介绍Linux内核的基本理论之外,本书还介绍了当前Linux社区中新的开发工具和社区运作方式,比如如何使用Vim 8阅读Linux内核代码、如何使用git工具进行社区开发、如何参与社区开发等。

结合QEMU调试环境讲述,并给出大量内核调试技巧。

在学习Linux内核时,大多数人都希望有一个功能全面且好用的图形化界面来单步调试内核。本书会介绍一种单步调试内核的方法,即 Eclipse+QEMU+GDB。另外,本书提供首个采用“-O0”编译和调试Linux内核的实验,可以解决调试时出现的光标乱跳和<optimized out>等问题。本书也会介绍实际工程中很实用的内核调试技巧,例如 ftrace、systemtap、内存检测、死锁检测、动态打印技术等,这些都可以在QEMU+ ARM Linux的模拟环境下做实验。

配备丰富的电子教案和视频资源。

本书会在出版之后陆续提供配套的电子教案,并录制相应的配套教学视频,请关注异步社区官网和微信公众号。

本书主要内容

Linux内核涉及的内容包罗万象,但本书的重点是Linux内核入门和实践。

本书共有12章。

第1章介绍什么是Linux系统,以及常用的Linux发行版。接着介绍宏内核和微内核之间的区别,以及如何学习 Linux 内核等内容。该章还包括如何安装 Linux 系统,如何编译 Linux内核等实验。

第2章介绍GCC工具、Linux内核常用的C语言技巧、Linux内核常用的数据结构、Vim工具以及git工具等内容。

第3章主要讲述内核配置和编译的技巧,实验包括使用QEMU来编译和调试ARM的Linux内核。

第4章主要从一个简单的内核模块入手,讲述Linux内核模块的编写方法,实验围绕Linux内核模块展开。

第5章从如何编写一个简单的字符设备开始入手,介绍字符设备驱动的编写。

第6章主要包括系统调用的基本概念,实验是添加新的系统调用。

第7章包括从硬件角度看内存管理、从软件角度看内存管理、物理内存管理、虚拟内存管理、缺页异常、内存短缺等内容,并包含多个与内存管理相关的实验。

第8章主要包括进程概述、进程的创建和终止、进程调度以及多核调度等内容。

第 9 章包括原子操作和内存屏障、自旋锁机制、信号量、读写锁、RCU、等待队列等内容。

第10章包括Linux内核中断管理机制、软中断和tasklet机制、工作队列机制等内容。

第11章包括printk、proc和debugfs、ftrace、分析oops错误、perf性能分析工具、内存检测、kdump工具以及性能测试工具等内容,并包括调试和性能优化方面的18个实验。

第12章包括开源社区介绍,如何参与开源社区、提交补丁、在Gitee中创建和管理开源项目等内容。

本书主要的实验平台是 QEMU 模拟器,这是另一个热门的开源项目,主要用于处理器的仿真和虚拟化。

本书使用的内核版本是Linux 4.0。另外,为了方便调试内核,作者增加了可以使用“-O0”方式编译的内核,该内核已经上传到码云(Gitee)平台上。下载代码命令如下:

#git clone https://gitee.com/benshushu/runninglinuxkernel_4.0.git

#git checkout rlk_basic

本书配套实验的参考代码在rlk_lab/rlk_basic目录下。

由于作者知识水平有限,书中难免存在纰漏,敬请各位读者批评指正。作者邮箱:runninglinuxkernel@126.com。新浪微博:@奔跑吧Linux内核。读者也可以扫描下方的二维码,到作者的微信公众号中交流。

致谢

感谢国防科技大学优麒麟社区提供了优麒麟Linux发行版供本书实验所用,感谢优麒麟社区的余杰老师提供的具有建设性的教学意见。

感谢国防科技大学的廖湘科院士在百忙之中对本书编写和出版工作的关注,并为本书作序。廖院士是高性能计算机和操作系统领域的科学巨匠,感激他在繁重的工作之余仍常常关心开源软件的发展以及年轻一代程序员的成长。

本书的编写和出版要特别感谢南昌大学的陈悦老师,他将《奔跑吧 Linux内核》运用到教学实践中,并很热心地把教学经验分享给我,也是在他的督促下,我才完成了本书的编写工作。

感谢开源中国社区的联合创始人红薯在本书编写过程中给予我的支持和帮助。

另外,还要感谢浙江大学的陈文智老师、大连理工大学的吴国伟老师、南京大学的夏耐老师、北京工业大学的韩徳强老师,以及段夕华的热情帮助。感谢彭东林同学完成了本书的审阅工作,并提出了宝贵的修改意见。

同时感谢人民邮电出版社张爽编辑的辛勤付出。

最后感谢我的家人对我的支持和鼓励,虽然周末时间我都在忙于写作本书,但是他们总是给我无限的温暖。

张天飞

2018年于上海