Java 开辟者须要研究 JDK,Linux 开辟者须要研究 Kernel

编辑部的故事 发布于 01/05 22:24
浏览 13K+
收藏 47

鲲鹏开辟者生长练习营,学练结合,技能一站式进阶,赢华为手机等好礼!>>>

2019 年是 Linux 内核出生的第 28 年,1991 年 8 月 26 日,昔时照样大年夜先生的 Linus Torvalds 向 comp.os.minix 消息组的成员泄漏了出于“专业爱好”而正在研究操作体系的消息。

Linux Kernel 是全球最大年夜的开源项目,有名的科技公司简直都参与个中,包含微软、谷歌、Red Hat、SUSE、Intel、Facebook、百度、阿里、华为、Oracle 与腾讯等。同时,基于 Kernel 衍生出的发行版与各类周边项目也让其生态多姿多彩。

另外一方面,在当今云原生高速生长的时代,其底层也大年夜多基于 Linux Kernel,乃至连微软也表示 Linux 运转了 Azure 任务负载的 50% 以上。

Linux Kernel 短期内不会过气,而是会进一步影响到更多开辟者,然则 Linux Kernel 的入门和实际却很艰苦,这让很多初学者望而生畏,哪个开辟者说本身是 Linux Kernel 范畴的,那其他人必定会寂然起敬。

比来懂得到有一本值得初学者进修的相干书本《精通 Linux 内核——智能设备开辟核心技巧》,我们就若何进修 Linux Kernel、Linux Kernel 2019 年的生长与相干应用范畴等成绩采访了作者姜亚华,欲望能给到想要懂得、研究 Linux Kernel 的开辟者一些启发。以下是对话内容,姜师长教员会抽取三位留言的读者送出图书

 

2019 年 Linux Kernel 进入了 5.x 时代,固然 Linus 本身说从 4.20 到 5.x 只是由于本身手指不敷用,然则实际上以您的懂得,这关于项目标生命周期管理、特点归并或许社区文档扶植等方面有没有比较大年夜的影响呢?

姜亚华:

5.x 其实更新蛮多的,patch 文件 40 多 M,触及 10000 多个文件。

这是一个大年夜版本更新,从用户认识角度来讲,4.x 曾经是旧的了,就仿佛 iPhone 更新,Apple 保持两年一个大年夜更新的节拍,买了一款 iPhone,下一年的小更新不会有啥感到,然则第二年大年夜更新后,才认为我的手机不是最风行的了。

新的项目,文档等肯定都须要向 5.x 看齐了。

从代码角度来讲,我们可以从内核更新的过程当中进修到很多优化的思路。我开端写作《精通 Linux 内核——智能设备开辟核心技巧》的时辰内核照样 3.x,在书中也锐意保存了部分 3.x 的评论辩论(sysfs、出场切换等),就是为了经过过程比较总结这方面的经历。

 

书中讲到文件体系,然则没有关于比来微软件开放出来的 exFAT,猜想是由于您这书曾经在此之前就写了,那今朝您有没有持续研究 exFAT 相干的内容呢?今朝 exFAT 也曾经在 5.4 中支撑,它的才能上会带来甚么影响呢?

姜亚华:

是的,我接上去计算再深刻一些模块,exFAT 是个中之一。它的将来若何还很难说,Linux 曾经有很多优良的文件体系了,它们都经过了多年的验证,bug 能够也相对少一些,exFAT 还须要在 Linux 上经过时间的考验。

 

近期另外一个内核新特点也惹起了广泛的评论辩论,那就是内核锁定,这个特点其实评论辩论了多年,最后它的表示情势仿佛也挺让人不解的。该特点限制了 root 角色的权限,然则 root 是体系的最高等权限都有不克不及拜访的处所,这关于 root 来讲是挺奇怪的一件任务,在开辟、运维或许平常应用上这会产生甚么比较大年夜的影响吗?

姜亚华:

内核锁定主如果为了防止 root 帐户修改内核代码,从而在用户态过程和代码之间划清界线。启用锁定模块后,各类内核功能都邑遭到限制。个中包含对内核功能的拜访限制;对 /dev/mem 的读写操作的阻拦;对 CPU MSR 拜访的限制;和防止体系进入眠眠状况等等。

这对 root 来讲其实其实不奇怪,它依然是超等用户,可以拜访一切正常的门。只不过内核锁定把一些“后门”去掉落了,这些门常闭或许不存在了。

引入内核锁定(CONFIG_SECURITY)后,root 的拜访遭到限制,开辟、运维等过程当中应用的脚本或许 sequence 能够就不克不及任务了。比如 root 可以经过过程 /dev/mem 文件拜访内存,引入内核锁定后能够会遭到限制。

说句题外话,root 是个挺风险的器械,慎用。记得我担任管理部分办事器的时辰,有一次供给商帮我移植驱动的过程当中,装置软件的时辰不当心删除一些文件,办事器断电后就没法启动了。我带着光盘,在有数办事器轰鸣的实验室中,花了好几天赋将它“抢救”回来。

 

信赖很多开辟者,或许刚在大年夜学学计算机的人在懂得了 Linux Kernel 以后都邑想要去读它的源码,然则应当大年夜部分都邑不得其法,终究放弃。您是如何浏览 Linux 内核源码的呢?有甚么对象、办法与其它经历可以分享?

姜亚华:

我也是一行一行代码看上去的,几点建议供大年夜家参考。

起首,先大年夜概弄清道理,再细心研究代码,事半功倍。关于曾经成熟的模块,可以先借助书本和博客大年夜致懂得它的根本信息。

其次,边读代码边做笔记,防止看了前面忘记前面。做笔记的软件蛮多的(比如微软的 OneNote),选择用的习气的就好。

最后,自我鼓励,保持究竟,最好是兴趣使然。

好在大年夜家不须要从头开端了,我曾经把本身看过的代码的截图放在随书资估中了,算是一小段捷径吧。这些截图外面,某函数、它调用的函数等函数调用关系应用红线标示(以下图),内容包含内存管理、文件体系和过程管理三大年夜模块。

大年夜家碰到疑问也能够接洽我,合营商量,OSC 站内信(always_first_meet)或许邮件(linux_kernel_os@163.com)都可以。

 

Linux 内核非常宏大年夜,浏览源码的时辰哪些部分是最开真个时辰必须的,而哪些部分可以作为后续针对性的弥补?

姜亚华:

内核代码量宏大年夜,模块间的关系也扑朔迷离,建议初学者可以从相对简单并且自力的模块动手,比如一个简单设备的驱动。

先懂得驱动本身的逻辑,以后是它的高低游,然后扩大到相干模块,最后自在发挥。

举个例子,在 drivers/input/keyboard 下面的文件是键盘驱动,我们选择一个文件。

第 1 阶段,检查 xxx_probe 等函数,梳理控制和数据流程,懂得驱动须要做甚么。

第 2 阶段,恰当拓展,代码内调用的函数大年夜概是若何完成的,驱动触及的中断、准时器、input 子体系等机制的道理,这些机制相对自力,文档也多,多花些时间便可。

第 3 阶段,追根溯源,研究 xxx_probe 是若何被调用的,i2c 总线的驱动(假定键盘接 i2c 总线),device/device_driver/bus 的关系(驱动架构)。

阶段 2 与 3 可以同时停止。

第 4 阶段,自在发挥,按照任务须要和兴趣,进军内存管理、文件体系和过程管理等模块。

 

就算是可以或许浏览源码,另外一个成绩也会出现,就是读了源码,懂得了它的逻辑,然则有甚么用呢?最简单的是增长了本身的见识,然则实际上这就像浏览了一本书然则不输入本身的懂得与不雅点,没有太大年夜的感化。您是怎样对待并且怎样处理这个成绩的呢?

姜亚华:

研究内核有甚么用,这是一个值得沉思的成绩。

中国如今这个时辰实在其实须要沉下心玩底层体系的人,中国欲望自立操作体系曾经好久了,特别是如今这类多事之秋。然则假设没有大年夜批工程师在这个范畴沉淀的话,操作体系无疑是一种空谈。

先不论将来的国产操作体系能否必定是 Linux 内核的,研究 Linux 内核本身也是很好的技巧积聚门路。

仅仅从小我职业生活角度出发,研究外调对小我技巧的生长有极大年夜赞助,可以分多个层次对待。

第 1 层次,初识,对内核有大年夜概的懂得,须要花时间深刻任务相干的模块。研究内核会占用大年夜量时间,产出其实不明显。

第 2 层次,入门,熟悉任务相干的模块,懂得内核模块间的关系。研究内核会让你豁然开朗,常常有“本来 xxx 是这么完成的”之类的感慨。

第 3 层次,熟悉或精通,对内核经常使用模块有必定研究,熟悉代码。即使是新模块,也能够快速厘清头绪。

除第 1 层次“浪费”时间外,花时间研究内核可以反过去进步我们的效力。研究到了必定程度后便可以进入一个良性轮回,研究得越多,效力越高,节俭的时间越多,可以研究的越多。

别的,看的代码越多,越有才能处理扑朔迷离的成绩,金老爷子也说“重剑无锋,大年夜巧不工”,相对的实力才是硬事理。

照样 xxx_probe 的例子,假设我们的 probe 没有被调用,老手能够会检查 device 和 device_driver 的名字能否婚配,研究过驱动架构的工程师能够分 device、device_driver 和 match 三部分检查。

假设三部分看似都没有成绩,然则 probe 依然没有调用呢?研究过代码的工程师能够会想到 device 是否是曾经和另外一个 device_driver 婚配了。

经历可以赞助我们看到成绩的关键部分,真正研究过代码才能看到成绩的本质。伙头看到的不是牛,而是肌理构造,到了这类境地换成羊也是一样的。

比来常常听到一句话,“任务 xx 年,就是一年的任务经历反复 xx 年”,假设只是请求“会用”的层次,实在其实一年足够,但工程师在这类情况下日夕会掉去核心竞争力。

有人偏向于应用结论,但要做的应当是总结和解释结论。

 

如今进修 Linux Kernel,重要有哪些任务偏向呢?又是哪些类型的公司、营业会重要须要这类才能?

姜亚华:

驱开工程师、嵌入式工程师、体系工程师、Linux 法式榜样开辟工程师,乃至运维工程师这些岗亭都须要懂得内核,就像从事 Java 开辟的工程师须要研究 JDK 一样,其实不是只要从事内核相干任务的工程师才须要研究内核,反过去懂内核的人向上生长也是很轻易的。

有半导体相干营业的公司都须要这类人才网job.vhao.net,之前传统的半导体公司需求大年夜一些,但近几年互联网公司也纷纷涉足半导体范畴,BAT 都包含在内。美国一系列举措以后,近期中国进入了芯片和操作体系研发热潮,一大年夜批芯片公司成立,燧原、平头哥、寒武纪与商汤科技等等,它们也都须要内核相干的人才网job.vhao.net。

 

您这本书讲到关于智能设备的开辟,Linux Kernel 与 AI 有甚么特别大年夜的关系呢?

姜亚华:

其实这个成绩我在此次写的书里有解释。

如上图,“硬件厂商担任硬件,原语(primitives)库普通也由他们保护,比如 AMD 的 MIOpen、Intel 的 MKL 和 Nvidia 的 cuDNN,多半法式榜样员其实不会接触这部分外容,而是应用已有的 Framework。

Framework 的选择也是多样化的,Google 的 TensorFlow,Facebook 的 PyTorch,微软的 CNDK,亚马逊的 MXNet、Theano 和 Keras。很明显,今朝依然是百花齐放的局面,但技巧的生长终归只能是“三分世界”,乃至是“一统世界”。今朝曾经存在与这些 Framework 配套的对象,比如 Tensorboard,可以用来检查 TensorFlow 的练习状况。

由于深度进修计算量太大年夜,并行计算技巧也会有所触及,比如 MPI(Message Passing Interface)通信协定、英伟达的 NCCL(NVIDIA Collective Communications Library)。

数据对深度进修非常重要,大年夜数据是必弗成少的。数据作为输入,模型作为输入,应用于数据中间、小我计算机、机械人和无人驾驶汽车等设备中。

纵不雅这全部过程,并没有哪个环节提到了 Linux,但实际上多半环节都与 Linux 有关。固然这些关系能够只要多数法式榜样员存眷,但随着技巧的成熟,新的智能设备,乃至新的操作体系,又会转回到我们熟悉的内核。

 

在您研究 Linux 内核的过程当中,有没有认为 Linux 内核其实还可以用其它说话完成一次,如许关于入门进修会好很多,比如用 Python 这类简单懂得的说话。如许的想法主意可行吗?会碰到甚么技巧成绩?

姜亚华:

内核外面有很多代码采取的都是面向对象的思维,比如 VFS 采取了较多面向对象法式榜样的设计形式,像 command 与 template method 等,应用其它说话特别是面向对象说话来完成 Linux 内核是可行的,然则不能不说的是其它说话(比如 Python)很难有 C 说话的履行效力。

 

2019 年是 Linux Kernel 28 周年,分享一下您在这个中关于 Linux Kernel 印象最深的任务吧。

姜亚华:

Linux 内核是开源的,生成与微软(更确切的说是 Windows)就是夙敌。微软对 Linux 前期的友好和近年的改变是件很风趣的任务,友好时代就不多说了,近几年微软宣布“爱 Linux”,也做了很多实事,Azure、SQL Server 和 Visual Studio Code 等都有了 Linux 的身影。

这对 Linux 是好是坏先不说,这最少说清楚明了 Linux 的强大年夜,有种“西方教主,千秋万代,一统江湖”的感到哈哈。

这是一件关于 Linux Kernel 印象比较深的任务,还有另外一件也值得一提,那就是我本年写了一本 Linux Kernel 相干的书本《精通 Linux 内核——智能设备开辟核心技巧,借此也宣传宣传,同时欲望可以或许经过过程这本书为道友们供给些许赞助。

这本书基于 Linux 5.x,用时五年,研究数百万行代码总结而成,共分为五个部分,按照先易后难的次序分析内核。起首简介基本知识,包含数据构造、中断处理、内核同步和时间计算等,它们是懂得后续章节的条件,在此基本上详细评论辩论内存管理、文件管理和过程管理三个核心模块,最后一部分升华篇融合了前面多个模块。重点和难点部分均配以图表、代码或实验,力争深刻浅出。

除此以外,本书罗列了大年夜量实例,分析了安卓操作体系的核心技巧,使读者可以或许深刻的懂得实际知识。本书的读者须要熟悉 C 说话,可以或许对内核有必定懂得更好。推荐初学者按照本书的既定次序浏览,熟悉内核的读者可以直接浏览三个核心模块。

固然了,借这个平台,也欲望与道友们多多交换(包含但不限于本书的内容),迎接大年夜家跟我交换合营促进。别的本书是机械工业出版社《Linux 技巧与应用丛书》的开篇之作,后续还会有一系列书本出版,大年夜家也能够存眷存眷。

 

采访佳宾简介

姜亚华,一向从事与 Linux 内核和 Linux 编程相干的任务,研究内核代码十多年,对多半模块的细节一五一十。曾担任华为手机 Touch、Sensor 的驱动和软件优化(包含 Mate、光荣等系列),和 Intel 安卓平台 Camera 和 Sensor 的驱动开辟(包含 Baytrail、Cherrytrail、Cherrytrail CR、Sofia 等)。现担任 DMA、Interrupt、Semaphore 等模块的优化与验证(包含 Vega、Navi 系列和多款 APU 产品)。

加载中
2
znz
znz

作为一个一线开辟人员,深刻的领会是今朝绝大年夜多是基于linux的开辟,都还处于应用阶段,真正设计内核的开辟,能够真的有所完善的,异常欲望姜师长教员的书可以或许给我赞助与启发,感谢

编辑部的故事
编辑部的故事
Hi,感激参与互动,姜亚华师长教员将送您一本《精通 Linux 内核——智能设备开辟核心技巧》,请周三之前私信我留下收件信息。
2
红石头
红石头

“任务 xx 年,就是一年的任务经历反复 xx 年”,
假设只是请求“会用”的层次,实在其实一年足够,
但工程师在这类情况下日夕会掉去核心竞争力。

深有领会,等待姜师长教员的书

 

编辑部的故事
编辑部的故事
Hi,感激参与互动,姜亚华师长教员将送您一本《精通 Linux 内核——智能设备开辟核心技巧》,请周三之前私信我供给收件信息。
2
霡霂
霡霂

关于Kernel这类高大年夜上的项目,不管从入门开辟照样安排应用都是异常复杂的,并且Kernel本身又在高速生长,如今网上能找到的文档和办法很多曾经跟不上生长了,欲望有一个组织或许官方能供给一个赓续更新的文档。

1
NexusOne
NexusOne

姜师长教员你好,比来针对Linux设备端开辟待遇被市场低估,由于一旦设备被开辟出来,开辟人员就会由于设备太稳定而缺乏加薪升职之类的机会,你有甚么好的建议?

编辑部的故事
编辑部的故事
Hi,感激参与互动,姜亚华师长教员将送您一本《精通 Linux 内核——智能设备开辟核心技巧》,请周三之前私信我供给一下收件信息。
二如公子
二如公子
普通情况下,公司会多个项目并行,多个产品迭代开辟,假设仅靠一个或许一代产品,开辟终了确切难熬苦楚看重。多进修,找机会到更大年夜的平台。。。哈哈
klyou
klyou
哈哈哈哈哈哈哈哈哈哈哈哈哈哈,情况烂了 换处所吧
1
fengchenghao
fengchenghao

内核的设计,可以想象外面每行代码都是经过反复推敲,沉思熟路多人复核以后才能终究让他人跑在线上。读了以后,必会功力大年夜增。

1
仁慈超哥哥
仁慈超哥哥

我想研究Android 源码,达到能本身修改代码,本身封装ROM的程度,该怎样动手呢

二如公子
二如公子
先懂得架构吧,然后选择一个模块熟悉起来,以后由点到面,最好先弄懂得下市情上主流的ROM。
0
znz
znz

哇,很高兴可以或许在这里懂得大年夜咖的一些想法主意与不雅点,结合本身经历,感到非常受用,感谢

0
x
xytest01

s/研究/进修/g

0
ori
ori

进修进修~~

0
沉默的幻想师
沉默的幻想师

类似相干的书曾经买过好几本了 还没看过一本 残念

前往顶部
顶部