笔者从开始接触 Linux 内核应该有 4 ~ 5 年了,虽然不敢说非常了解 Linux 内核,但起码也有了点眉目。所以,本文主要想分享一下我的 Linux 内核入门之路,如果对大家有帮助的话,希望能够转发一下,帮助更多想学习内核的同学们。

我的“码农”之路

本人大学的专业并不是计算机系,而是应用化学。在机缘巧合下接触到 PHP(那时候 PHP 还是挺火的),开始着迷地学习 PHP,基本上把图书馆所有 PHP 的书籍都借回来了。

由于不是计算机专业,所以只能在课堂偷偷看 PHP 的书(也不算偷看吧,因为根本没人会关注,哈哈)。并且开始自己写一些留言板、小型论坛、博客之类的网站(那时是08-09年的时候,现在论坛好像消失了),也开始接触 MySQL 数据库。

当然,写些小论坛是不能满足我的,所以不知天高地厚的我,开始看 PHP 是怎样实现的。但一看发现,全部都是 .c 的文件,我以前接触的都是 .php 的,所以完全看不懂。Google一下才发现(那时还没被墙的),原来是 .c 的文件是使用 C 语言编写的。

OK,不懂就学咯,还好那时是大四,比较闲。就去图书馆借了本经典的谭浩强版《C语言程序设计》,现在想起来,虽然这本书很多小错误,但还算比较通俗,不像C语言经典之作 K&R 版本的《C程序设计语言》那么难懂。

PS:我觉得是不是好书的标准是,你能不能从中学习到知识。所以对我来说,谭浩强版的《C语言程序设计》还算是本好书。

C 语言学起来不难,但用起来真的 TMD 难(So!PHP 是世界上最好的语言!!!),不过我学 C 语言也只是为了能看懂 PHP 源码。对 C 语言有了一点基础后,就开始看 PHP 的源码,最开始看的是 PHP 3.0 版本。其实那时候还是看不懂的,而且资料少之又少。

我也忘记是怎么开始看懂的,反正有一天突然好像开窍一样看懂了(难道是顿悟?),接着开始看 PHP 4.0 版本的源码。

这就开始我的程序员(码农)生涯...

毕业后一直从事 PHP 的开发,由于不是计算机专业,所以刚开始找工作挺困难的,只能从小公司做起(俗话说,万事开头难嘛)。

2011 年的时候,那时刚毕业2年,就开始不知天高地厚的想分享自己的经验(年轻人就是不懂事啊),但想起来当时好像也没什么经验分享... 就邀约了帅气的白菜兄写了本 PHP 的书籍《PHP核心技术与最佳实践》。

为什么要学 Linux 内核?

说了那么多废话,现在讲讲本人为什么要学 Linux 内核吧。因为第一家公司是家小公司,所以很多事情都要自己去干,比如:编译安装 PHP 环境,安装 MySQL 数据库等(因为当时没有云平台,都是自己搭建机器的)。

这样就开始接触到 Linux 系统,虽然大学也自己捣蛋过 Linux,但也没怎么深入去了解。刚开始使用 Linux 的时候,用惯 Windows 的我觉得太 TMD 难用了。不过因为工作需要没办法,硬着头皮上。

用着用着,就出现很多奇怪的问题,比如文件系统的 inode 不足(当时想,这是什么鬼...)。

好奇心的驱使下,又是不知天高地厚的我下载了最新版本的 Linux 源代码(当时应该是 3.0 吧)。解压后一看,傻眼了,简直是天书一样(因为当时也看了很长一段时间的 PHP 源码,对 C 语言也有比较深的认识),这还是我认识的 C 语言吗?所以,不得不放弃。

不过,怀着寻根问底的信念,我还是重新开始学习 Linux 内核。下面介绍一下我的学习之路。

Linux 内核入门之路

有了上次的经验,这次我就从低版本的 Linux 学起,也就是 Linux 0.12。从 0.12 开始学起是因为 0.12 版本有本不错的书籍介绍,就是《Linux内核完全剖析》,下面就是它的封面:

其实刚开始看这本书的时候也有难度,主要是本人不是计算机专业,所以硬件相关的知识面比较差。另外,内核充斥着大量的汇编代码,所以必须要先了解汇编语言。

直到发现《x86汇编语言-从实模式到保护模式》这本书,我才开始慢慢了解操作系统的原理,封面如下:

这本书解开我很多迷雾,比如实模式和保护模式,虚拟内存与物理内存映射等。这本书虽然非常好,但有个问题,就是 Linux 使用的是 AT&T 风格的汇编,而这本书介绍的是 Intel 风格的汇编。所以,要看内核前,最好先了解下 AT&T 风格的汇编,网上也挺多资料。

所以,我建议先看完《x86汇编语言-从实模式到保护模式》这本,然后再看《Linux内核完全剖析》,那就基本能看懂 Linux 0.12 的源代码了,看懂 Linux 0.12 就算是 Linux 内核的入门了。

Linux 内核进阶之路

看懂 Linux 0.12 后,就可以开始看高版本的内核了。但在看高版本的内核之前,最好先了解下现代 Linux 的设计,所以我推荐下面这本书《Linux内核设计与实现》:

这本书介绍的是 Linux 2.6 版本,比较简单,而且没有过多的展示代码。但缺点就是,只是大概介绍 Linux 的设计,没有很详细的分析,不过作为入门是个不错的选择。

然后就是看 Linux 内核最经典的书籍:《深入理解Linux内核》。

这本书是学习内核必看的书籍,它非常详细的分析了 Linux 内核的原理和实现,而且译者是在 Linux 内核方面很有建树的“陈莉君”老师,翻译质量不错。这本书也是以 Linux 2.6 作为分析对象的,看完这本书,就可以直接去看 Linux 代码了。

还有吗?

看完上面这 4 本书后,对内核也有不错的认识了,当然最重要还是要多看内核源码。如果看完上面这些书,还是觉得不是太懂,那么就要祭出神器了。就是下面这本:

为什么说这本书是神器?因为这本书是我看过分析内核最详细的书籍,详细到你会觉得啰嗦。但缺点就是,使用的 Linux 版本太低(2.4.0),还有就是配图有点少。

除了上面这本,我还要推荐一下《深入Linux内核架构》这本书:

这本书分析比较详细,而且版本也相对较高,这本书我觉得作为选读吧,不看也没什么关系,可以直接看 Linux 源码。

最后说说

Linux 内核的参考书就大概是上面这些了,当然还有很多其他的书籍,但我认为看完上面这些,再直接看源码就好了,毕竟看源码才能真正理解 Linux。

我们来总结一下读上面这些书的顺序:

格拉德威尔在《异类》一书中指出:人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力,1万小时的锤炼是任何人从平凡变成世界级大师的必要条件。

所以,不是天赋异禀的话,还是好好遵从“1万小时定律”吧。

另外,如果你是刚入门的同学,建议把本文收藏起来,然后按照这个学习路径来学习,我觉得一定能学会 Linux 内核的。

那么,学习 Linux 内核有什么用途?最明显的就是面试时可以装下逼吧,还可以在工作中解决一些奇怪的内核问题。


推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

嵌入式Linux

微信扫描二维码,关注我的公众号

Linux内核入门之路 (非广告)相关推荐

  1. 计算机书籍-Linux内核 入门篇

    去天猫看看智能鼠标 书名:奔跑吧 Linux内核 入门篇 作者:张天飞 出版社:人民邮电出版社 出版时间:2019年02月

  2. 武汉linux内核好找吗,Linux内核入门

    Linux内核入门 收藏 如何获取Linux内核源代码 下载Linux内核当然要去http://www.kernel.org/了,网站提供了两种文件下载,一种是完整的Linux内核,另一种是内核增量补 ...

  3. 奔跑吧Linux内核入门篇实验

    第一章 奔跑吧Linux内核入门篇实验4命令记录** export ARCH=arm export CROSS_COMPILE=arm-linux-gnueabi- make vexpress_def ...

  4. 内核 入门_好消息:奔跑吧Linux内核入门酱香篇配套视频可以下载啦

    有不少小伙伴给笨叔留言,能不能直接提供入门酱香篇的配套视频下载啊?我问:B站有,为啥要下载?答曰:收藏!笨叔一时被感动了,我马上把这本书配套视频的原始文件共享出来,而且以GPL v2的协议分享,大家可 ...

  5. Linux内核入门-如何获取Linux内核源代码、生成配置内核

    如何获取Linux内核源代码 如何获取Linux内核源代码 下载Linux内核当然要去官方网站了,网站提供了两种文件下载,一种是完整的Linux内核,另一种是内核增量补丁,它们都是tar归档压缩包.除 ...

  6. Linux内核学习之路_1_编译Linux内核

    1.准备工作 1.1 学习环境 1.2 下载Linux内核源码 1.3 解压Linux内核 1.4 目录结构介绍 1.2.2 Linux内核配置 1.1 学习环境 本系列教程使用的环境如下: 操作系统 ...

  7. Linux内核入门-- likely和unlikely

    1. 引言 最近在看VFS的源码,发现在if语句中大量使用了likely和unlikely这两个宏,就像以下代码所示: int error = path_lookupat(nd, flags | LO ...

  8. 我的linux内核学习之路,Linux再学习(一)-学习路线规划

    摘要: ,一般可以通过-h查看help,就能找到相应的配置项还可以通过man命令,查看文档无论是什么命令行工具,最终的配置一般会落到一个文件上,只要找到了那个文件,文件中会有注释,也可以挨个儿看下去, ...

  9. 如何打开linux内核选项APIC选项,非标准BIOS启动裁减后的Linux内核的一些问题?

    1   由于采用IO APIC,在non-ACPI系统下,使用MP config Table 来初始化APIC,然而出现的问题是:8254 Timer的中断不能在IO APIC下工作,启动信息为: E ...

最新文章

  1. 支付宝打造公共账号业务网关, RSA密钥对生成
  2. C语言中malloc为字符型指针分配内存引起的缓冲区泄露
  3. Windows服务启动进程----Cjwdev.WindowsApi.dll
  4. FM之NUMERIC_CHECK
  5. 3 Redis 配置文件
  6. ffmpeg ffplay ffprobe使用说明
  7. Redis常用配置参数详解及查看修改命令
  8. joomla添加html,如何将自定义html代码添加到Joomla 2.5菜单项?
  9. call mysql_connect_Call to undefined function mysql_connect()
  10. html 图片 滤镜,用Css给你的图片加上Instagram滤镜
  11. 使用Kotlin进行Android开发
  12. 计算机用三角函数时如何用弧度制,弧度制 三角函数的简单应用
  13. 打字测试软件 tt,TT打字测试软件
  14. excel打印时显示服务器脱机怎么办,excle正在访问打印机!连接局域网打印机在excel中预览,excel自动就关闭是怎么回事...
  15. 计算机毕业设计Java优乐帮育儿系统(系统+程序+mysql数据库+Lw文档)
  16. python 北京出租车收费3.45_北京出租车计费标准和价目表
  17. 猿圈19年校招笔试题
  18. vimscript:编写Vim脚本
  19. 如何在虚拟主机上部署java项目_如何在虚拟主机上部署java项目
  20. Win10 启动consul服务

热门文章

  1. IE、FF脚本兼容性问题
  2. Mybatis怎么能看是否执行了sql语句
  3. andriod 新建 Activity_ Form (详细设置)
  4. 正则表达式 Mather类的使用
  5. 【转载】App.config/Web.config 中特殊字符的处理
  6. MSBuild编译扩展
  7. 关于Exchange管理控制台报“您的权限不足,无法此查看数据”的解决办法
  8. TensorFlow 基本操作
  9. 执行git命令时出现fatal: ‘origin‘ does not appear to be a git repository错误
  10. html上传预览图片原理,关于html中图片上传预览的实现