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

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

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

有这么一个故事,一个程序员去相亲,当女方问他的职业时,他说自己是一个底层架构工程师,女方听到“底层”两个字,很不屑地说:“底层啊,那你什么时候能升到中高层?”男方听后不知该如何接话。在程序员的世界里,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内核之前,需要安装如下软件包。

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

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

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

图1.9 Linux内核

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

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

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

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

图1.10 内核配置


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

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

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

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

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

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

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

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

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

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

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

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

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

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

《奔跑吧 Linux内核 入门篇》

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

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

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

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


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


- END -


异步图书

聊聊图书背后的故事

相关文章
|
23天前
|
算法 Linux 调度
深入理解Linux内核调度器:从基础到优化####
本文旨在通过剖析Linux操作系统的心脏——内核调度器,为读者揭开其高效管理CPU资源的神秘面纱。不同于传统的摘要概述,本文将直接以一段精简代码片段作为引子,展示一个简化版的任务调度逻辑,随后逐步深入,详细探讨Linux内核调度器的工作原理、关键数据结构、调度算法演变以及性能调优策略,旨在为开发者与系统管理员提供一份实用的技术指南。 ####
61 4
|
12天前
|
缓存 网络协议 Linux
深入探索Linux操作系统的内核优化策略####
本文旨在探讨Linux操作系统内核的优化方法,通过分析当前主流的几种内核优化技术,结合具体案例,阐述如何有效提升系统性能与稳定性。文章首先概述了Linux内核的基本结构,随后详细解析了内核优化的必要性及常用手段,包括编译优化、内核参数调整、内存管理优化等,最后通过实例展示了这些优化技巧在实际场景中的应用效果,为读者提供了一套实用的Linux内核优化指南。 ####
38 1
|
17天前
|
算法 Linux 开发者
Linux内核中的锁机制:保障并发控制的艺术####
本文深入探讨了Linux操作系统内核中实现的多种锁机制,包括自旋锁、互斥锁、读写锁等,旨在揭示这些同步原语如何高效地解决资源竞争问题,保证系统的稳定性和性能。通过分析不同锁机制的工作原理及应用场景,本文为开发者提供了在高并发环境下进行有效并发控制的实用指南。 ####
|
25天前
|
缓存 资源调度 安全
深入探索Linux操作系统的心脏——内核配置与优化####
本文作为一篇技术性深度解析文章,旨在引领读者踏上一场揭秘Linux内核配置与优化的奇妙之旅。不同于传统的摘要概述,本文将以实战为导向,直接跳入核心内容,探讨如何通过精细调整内核参数来提升系统性能、增强安全性及实现资源高效利用。从基础概念到高级技巧,逐步揭示那些隐藏在命令行背后的强大功能,为系统管理员和高级用户打开一扇通往极致性能与定制化体验的大门。 --- ###
58 9
|
24天前
|
缓存 负载均衡 Linux
深入理解Linux内核调度器
本文探讨了Linux操作系统核心组件之一——内核调度器的工作原理和设计哲学。不同于常规的技术文章,本摘要旨在提供一种全新的视角来审视Linux内核的调度机制,通过分析其对系统性能的影响以及在多核处理器环境下的表现,揭示调度器如何平衡公平性和效率。文章进一步讨论了完全公平调度器(CFS)的设计细节,包括它如何处理不同优先级的任务、如何进行负载均衡以及它是如何适应现代多核架构的挑战。此外,本文还简要概述了Linux调度器的未来发展方向,包括对实时任务支持的改进和对异构计算环境的适应性。
39 6
|
25天前
|
缓存 Linux 开发者
Linux内核中的并发控制机制:深入理解与应用####
【10月更文挑战第21天】 本文旨在为读者提供一个全面的指南,探讨Linux操作系统中用于实现多线程和进程间同步的关键技术——并发控制机制。通过剖析互斥锁、自旋锁、读写锁等核心概念及其在实际场景中的应用,本文将帮助开发者更好地理解和运用这些工具来构建高效且稳定的应用程序。 ####
39 5
|
25天前
|
算法 Unix Linux
深入理解Linux内核调度器:原理与优化
本文探讨了Linux操作系统的心脏——内核调度器(Scheduler)的工作原理,以及如何通过参数调整和代码优化来提高系统性能。不同于常规摘要仅概述内容,本摘要旨在激发读者对Linux内核调度机制深层次运作的兴趣,并简要介绍文章将覆盖的关键话题,如调度算法、实时性增强及节能策略等。
|
26天前
|
存储 监控 安全
Linux内核调优的艺术:从基础到高级###
本文深入探讨了Linux操作系统的心脏——内核的调优方法。文章首先概述了Linux内核的基本结构与工作原理,随后详细阐述了内核调优的重要性及基本原则。通过具体的参数调整示例(如sysctl、/proc/sys目录中的设置),文章展示了如何根据实际应用场景优化系统性能,包括提升CPU利用率、内存管理效率以及I/O性能等关键方面。最后,介绍了一些高级工具和技术,如perf、eBPF和SystemTap,用于更深层次的性能分析和问题定位。本文旨在为系统管理员和高级用户提供实用的内核调优策略,以最大化Linux系统的效率和稳定性。 ###
|
25天前
|
Java Linux Android开发
深入探索Android系统架构:从Linux内核到应用层
本文将带领读者深入了解Android操作系统的复杂架构,从其基于Linux的内核到丰富多彩的应用层。我们将探讨Android的各个关键组件,包括硬件抽象层(HAL)、运行时环境、以及核心库等,揭示它们如何协同工作以支持广泛的设备和应用。通过本文,您将对Android系统的工作原理有一个全面的认识,理解其如何平衡开放性与安全性,以及如何在多样化的设备上提供一致的用户体验。
|
25天前
|
缓存 运维 网络协议
深入Linux内核架构:操作系统的核心奥秘
深入Linux内核架构:操作系统的核心奥秘
44 2