10 年技术老兵,70个实验秘籍,带你轻松入门Linux内核

简介: 点击此处添加图片说明文字 ​ 有这么一个故事,一个程序员去相亲,当女方问他的职业时,他说自己是一个底层架构工程师,女方听到“底层”两个字,很不屑地说:“底层啊,那你什么时候能升到中高层?”男方听后不知该如何接话。

ebf3a2c25571d36b3aa49c19c2157507 点击此处添加图片说明文字 ​

有这么一个故事,一个程序员去相亲,当女方问他的职业时,他说自己是一个底层架构工程师,女方听到“底层”两个字,很不屑地说:“底层啊,那你什么时候能升到中高层?”男方听后不知该如何接话。在程序员的世界里,Linux内核、底层其实是非常“高端”的内容,普通程序员需要在这个领域里积累多年,才能修炼到从事“底层”工作的层次。

Linux内核是当前操作系统领域的绝对霸主,同时也是开源软件中一颗璀璨的明星。国内外众多的公司和行业都采用Linux作为首选的操作系统,学习Linux操作系统的人员也越来越多。Linux 内核开发是一个让人听起来就觉得很了不起的工作,Linux 内核开发领域的程序员与其他领域的程序员相比是少之又少,更别提一些优秀的教程和书籍了。

《奔跑吧 Linux内核 入门篇》一书从 Linux 发行版、开发工具、调试工具入手,讲述了如何快速搭建内核开发环境、如何正确地编写和运行 Linux 内核模块,以及内核开发中的一些基础知识。本书有助于读者在短时间内理解内核开发的全貌,从而具备内核开发的能力。本书中实验+案例,70余个创新实验贯穿全书,与你分享业内一线项目经验。

点击此处添加图片说明文字 ​

《奔跑吧 Linux内核 入门篇》

作者:张天飞

01

为什么要学Linux系统

Linux系统已经被广泛应用在人们的日常用品中,如手机、智能家居、汽车电子、可穿戴设备等,只不过很多人并不知道其使用的电子产品里面运行的是Linux系统。我们来看一下Linux基金会在2017年发布的一组数据。

90%的公有云应用在使用Linux系统。

62%的嵌入式市场在使用Linux系统。

99%的超级计算机在使用Linux系统。

82%的手机操作系统在使用Linux系统。

可能读者还不知道,全球100万个顶级域名中超过90%都在使用Linux;全球大部分的股票交易市场都是基于Linux系统来部署的,包括纽交所、纳斯达克等;全球知名的淘宝网、亚马逊网、易趣网、沃尔玛等电子商务平台都在使用Linux。

这足以证明Linux系统是个人电脑操作系统之外的绝对霸主。参与Linux内核开发的开发人员和公司也是最多、最活跃的,截至2017年有超过1600个开发人员和200家公司参与Linux内核的开发。

02

如何学Linux内核

Linux内核采用C语言编写,因此熟悉C语言是学习Linux内核的基础。读者可以重温C语言课程,然后阅读一些经典的C语言著作,如《C专家编程》《C陷阱和缺陷》和《C与指针》等。

对于刚刚接触Linux的读者,可以尝试在自己的电脑中安装一个Linux发行版,如优麒麟Linux 18.04,并尝试使用Linux作为操作系统。另外,建议读者熟悉一些常用的命令,熟悉如何使用Vim和git等工具,尝试去编译和更换优麒麟Linux的内核核心。

然后,开始在Linux机器上做一些编程和调试的练习,如使用QEMU+GDB+Eclipse来单步调试内核,熟悉GDB的使用等。

接下来,从一个简单的设备驱动程序开始。选择一个简单的字符设备驱动,如触摸屏驱动等。从编写和调试设备驱动到深入Linux内核的一些核心API的实现。

对Linux驱动有深刻的理解之后,就可以研究Linux内核的一些核心API的实现,如malloc()和中断线程化等。

学习Linux内核的过程是枯燥的,但是又那么吸引人,它的魅力只有你深入后才能体会到。Linux内核是全球顶级的程序员编写的,你每看一行代码,就好像和全球顶级的高手交流和过招,这种体验是在大学和其他项目上无法得到的。

因此,对于Linux爱好者来说,不要仅停留在会安装Linux和配置服务的层面,还要深入学习Linux内核。

03

本书特色

循序渐进地讲述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的模拟环境下做实验。

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

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

04

Linux内核实验入门

实验1:在虚拟机中安装优麒麟Linux 18.04系统

1.实验目的

通过本实验熟悉Linux系统的安装过程。首先,要在虚拟机上安装优麒麟18.04版本的Linux。掌握了安装方法之后,读者可以在真实的物理机器上安装Linux。

2.实验步骤

1)从优麒麟官方网站上下载优麒麟18.04的安装程序。

2)到VMware官网下载VMware Workstation Player。这个工具对于个人用户是免费的,对于商业用户是收费的,如图1.1所示。

点击此处添加图片说明文字 ​

图1.1 免费安装VMware Workstation Player


3)打开VMware Player。在软件的主界面中选择“Create a New Virtual Machine”。

4)在New Virutal Machine Wizard界面中,选择“Installer disc image file(iso)”单选按钮,单击Browse按钮,选择刚才下载的安装程序,如图1.2所示。然后,单击“Next” 按钮。

点击此处添加图片说明文字 ​

图1.2 选择下载的安装介质

5)在弹出的窗口中输入即将要安装的Linux的用户名和密码,如图1.3所示。

点击此处添加图片说明文字 ​

图1.3 输入用户名和密码

6)设置虚拟机的磁盘空间,尽可能设置得大一点。虚拟机的磁盘空间是动态分配的,如这里设置了200GB,但并不会马上在主机上分配200GB的磁盘空间,如图1.4所示。

点击此处添加图片说明文字 ​

图1.4 设置磁盘空间

7)可以在Customize Hardware选项里重新对一些硬件进行配置,如把内存设置得大一点。完成VMware Player的设置之后,就会马上进入虚拟机。

8)在虚拟机中会自动执行安装程序,如图1.5所示。安装完成之后,自动重启并显示新安装系统的登录界面,如图1.5和1.6所示。

点击此处添加图片说明文字 ​

图1.6 配置硬件

点击此处添加图片说明文字 ​

图1.7 Vmware Workstation 14 Player登录界面(1)

点击此处添加图片说明文字 ​

图1.8 Vmware Workstation 14 Player登录界面(2)

实验2:给优麒麟Linux系统更换“心脏”

1.实验目的

1)学会如何给Linux系统更换最新版本的Linux内核。

2)学习如何编译和安装Linux内核。

2.实验步骤

在编译Linux内核之前,需要安装如下软件包。

9ccc0ca9gy1g0iftyl6o9j20fb013glf.jpg 点击此处添加图片说明文字 ​

到Linux内核的官方网站中下载最新的版本,比如写作本书时最新并且稳定的内核版本是Linux 4.16.3,其界面如图1.9所示。Linux内核的版本号分成3部分,第一个数字表示主版本号,第二个数字表示次版本号,第三个数字表示修正版本号。

点击此处添加图片说明文字 ​

图1.9 Linux内核

可以通过如下命令对下载的xz压缩包进行解压:

9ccc0ca9gy1g0ift0oqfij20f4016web.jpg 点击此处添加图片说明文字 ​

解压完成之后,可以通过make menuconfig来进行内核配置,如图1.10所示。

点击此处添加图片说明文字 ​

图1.10 内核配置


除了手工配置Linux内核的选项之外,还可以直接复制优麒麟Linux系统中自带的配置文件

9ccc0ca9gy1g0ifup3klcj20fb01c3yc.jpg 点击此处添加图片说明文字 ​

开始编译内核,其中-jn中的“n”表示使用多少个CPU核心来并行编译内核。

9ccc0ca9gy1g0ifv22fjnj20f6016jr5.jpg 点击此处添加图片说明文字 ​

为了查看系统中有多少个CPU核心,可以通过如下命令实现。

9ccc0ca9gy1g0ifvkjsr9j20fd04q74c.jpg 点击此处添加图片说明文字 ​

processor这一项等于7,说明系统有8个CPU核心,因为是从0开始计数的,所以刚才那个make -jn的命令就可以写成make -j8了。

编译内核是一个漫长的过程,可能需要几十分钟时间,这取决于电脑的运算速度和配置的内核选项。

通过make编译完成之后,下一步需要编译和安装内核的模块。

9ccc0ca9gy1g0ifvxp6j2j20fd00w3ya.jpg 点击此处添加图片说明文字 ​

最后一步就是把编译好的内核镜像安装到优麒麟Linux系统中。

9ccc0ca9gy1g0ifw837r1j20f700qq2p.jpg 点击此处添加图片说明文字 ​

完成之后就可以重启电脑,登录最新的系统了。

点击此处添加图片说明文字 ​

《奔跑吧 Linux内核 入门篇》

作者:张天飞原理+基础,从调试Linux内核到动手编写一个简单的内核模块,真正从零开始学习Linux内核。 

实验+案例,70余个创新实验贯穿全书,与你分享业内一线项目经验。 

课件+视频,教学资源丰富,视频讲解透彻,与你共享精品在线配套资源。 

涵盖当前Linux社区中新的开发工具和社区运作方式,反映Linux内核社区新发展。


本书是一本介绍Linux内核实践的入门书,基于Linux 4.0内核,重点讲解Linux内核的理论和实验。本书分为12章,包括Linux系统入门、Linux内核基础知识、内核编译和调试、内核模块、简单的字符设备驱动、系统调用、内存管理、进程管理、同步管理、中断管理、调试和性能优化,以及如何参与开源社区等内容。此外,本书还介绍了Linux内核社区常用的开发工具和理论,如Vim 8和git工具等。书中包括70多个实验,帮助读者深入理解Linux内核。  


- END -


异步图书

聊聊图书背后的故事

相关文章
|
8天前
|
Linux C语言
Linux内核队列queue.h
Linux内核队列queue.h
|
21天前
|
Linux 数据安全/隐私保护 Windows
Linux入门指南:linux权限究竟是什么?和文件有什么关系?
Linux入门指南:linux权限究竟是什么?和文件有什么关系?
30 0
|
26天前
|
Linux 数据安全/隐私保护 虚拟化
Linux技术基础(1)——操作系统的安装
本文是龙蜥操作系统(Anolis OS) 8.4 的安装指南,用户可以从[龙蜥社区下载页面](https://openanolis.cn/download)获取ISO镜像。安装方法包括物理机的光驱和USB闪存方式,以及虚拟机中的VMware Workstation Pro设置。安装过程涉及选择语言、配置安装目标、选择软件集合和内核,设置Root密码及创建新用户。安装完成后,可通过文本模式或图形化界面验证系统版本,如Anolis OS 8.4,标志着安装成功。
|
29天前
|
Linux 数据处理 C++
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(一)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
69 0
|
27天前
|
存储 Shell Linux
【Shell 命令集合 系统设置 】Linux 生成并更新内核模块的依赖 depmod命令 使用指南
【Shell 命令集合 系统设置 】Linux 生成并更新内核模块的依赖 depmod命令 使用指南
30 0
|
29天前
|
存储 Linux API
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(三)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
30 1
|
29天前
|
消息中间件 Linux 数据处理
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(二)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
30 1
|
27天前
|
Shell Linux C语言
【Shell 命令集合 系统设置 】⭐Linux 卸载已加载的内核模块rmmod命令 使用指南
【Shell 命令集合 系统设置 】⭐Linux 卸载已加载的内核模块rmmod命令 使用指南
29 1
|
6天前
|
算法 Linux 调度
深度解析:Linux内核的进程调度机制
【4月更文挑战第12天】 在多任务操作系统如Linux中,进程调度机制是系统的核心组成部分之一,它决定了处理器资源如何分配给多个竞争的进程。本文深入探讨了Linux内核中的进程调度策略和相关算法,包括其设计哲学、实现原理及对系统性能的影响。通过分析进程调度器的工作原理,我们能够理解操作系统如何平衡效率、公平性和响应性,进而优化系统表现和用户体验。
15 3
|
13天前
|
负载均衡 算法 Linux
深度解析:Linux内核调度器的演变与优化策略
【4月更文挑战第5天】 在本文中,我们将深入探讨Linux操作系统的核心组成部分——内核调度器。文章将首先回顾Linux内核调度器的发展历程,从早期的简单轮转调度(Round Robin)到现代的完全公平调度器(Completely Fair Scheduler, CFS)。接着,分析当前CFS面临的挑战以及社区提出的各种优化方案,最后提出未来可能的发展趋势和研究方向。通过本文,读者将对Linux调度器的原理、实现及其优化有一个全面的认识。