linux内核深度解析_十年磨一剑,第一本龙芯平台的Linux内核书来了
《用“芯”探核:基于龍芯的Linux內(nèi)核探索解析》是一本基于龍芯平臺(tái),結(jié)合源代碼來探索和解析Linux-5.x內(nèi)核的書。
市面上解析Linux 內(nèi)核的經(jīng)典書籍已有不少,尤其是被稱為L(zhǎng)inux 內(nèi)核領(lǐng)域的“四庫(kù)全書”:《Linux 內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)》 《Linux設(shè)備驅(qū)動(dòng)程序》 《深入理解Linux 內(nèi)核》和《Linux內(nèi)核源代碼情景分析》。
但是,一方面,大多數(shù)已有書籍是基于X86 或者ARM 體系結(jié)構(gòu)的;另一方面,大多數(shù)已有書籍基于2.4 版本或者2.6 版本的Linux 內(nèi)核,雖然近年來有了許多不錯(cuò)的原創(chuàng)新書。
同時(shí),一直以來,從事龍芯內(nèi)核開發(fā)工作的“標(biāo)準(zhǔn)教程”是《龍芯處理器用戶手冊(cè)》、《MIPS 體系結(jié)構(gòu)透視》和《深入理解Linux 內(nèi)核》。然而,《龍芯處理器用戶手冊(cè)》不涉及Linux 內(nèi)核;《MIPS 體系結(jié)構(gòu)透視》講述的是傳統(tǒng)的MIPS 處理器,離真正的龍芯差距太大;而《深入理解Linux 內(nèi)核》所使用的內(nèi)核版本又過于陳舊。
因此,正如中科院計(jì)算所研究員張福新在推薦語中說的:“這本基于龍芯平臺(tái)的內(nèi)核開發(fā)書籍的出版,恰逢其時(shí)。”
本書作者:陳華才
博士,高級(jí)工程師。現(xiàn)任江蘇航天龍夢(mèng)信息技術(shù)有限公司副總工程師,負(fù)責(zé)龍芯3 號(hào)處理器的內(nèi)核開發(fā)。作為L(zhǎng)inux內(nèi)核中MIPS/ 龍芯3 號(hào)的Maintainer,向Linux 內(nèi)核官方提交了大量的代碼。
為什么寫這本書?
我是誰?我就是一個(gè)既愛Linux也愛龍芯的開發(fā)者。十六年前開始接觸Linux內(nèi)核,十二年前開始接觸龍芯電腦,十年前加入龍芯產(chǎn)業(yè)化基地,十年來伴隨著龍芯一起成長(zhǎng),如今已成為L(zhǎng)inux內(nèi)核中龍芯3號(hào)的Maintainer。
有人說,“干一行,愛一行”,但我覺得“愛一行,干一行”更加符合可持續(xù)發(fā)展。龍芯和Linux都是我所愛,研究起來動(dòng)力十足。一直以來,我在閱讀內(nèi)核源代碼時(shí)都有做筆記的習(xí)慣,因?yàn)槿四X畢竟容量有限,在知識(shí)體系不斷擴(kuò)張的過程中,筆記是必不可少的。我做筆記的方法以“代碼摘抄+適度精簡(jiǎn)+注釋解析”為主,但是隨著時(shí)間的發(fā)展和內(nèi)核版本的升級(jí),筆記總量越來越大,不同版本中的同名函數(shù)也已經(jīng)變得面目全非。于是,我經(jīng)常不得不在筆記中記錄源代碼的多個(gè)版本,并且在代碼片段的開始處加上版本標(biāo)識(shí)。雖然說筆記主要是給自己看的,但正如熱力學(xué)第二定律所昭示的一樣,筆記的可讀性已經(jīng)不可避免地越來越差了(熵值太大)。
于是乎,便萌生了整理筆記并編寫成書的想法。最初的想法成型于2013~2014年,但真正開始動(dòng)筆的時(shí)候是2015年。在寫書的過程中,解析方法盡量保留了筆記中精簡(jiǎn)代碼的特點(diǎn),但在內(nèi)核版本的選擇上全部采用了最新的LTS版本(長(zhǎng)期維護(hù)穩(wěn)定版本),即5.4.x版本。
用“芯”探核 基于龍芯的Linux內(nèi)核探索解析
這本書選擇了哪些內(nèi)容?
全書以龍芯平臺(tái)為重點(diǎn),主要解析Linux 內(nèi)核源代碼。首先對(duì)龍芯處理器和Linux 內(nèi)核進(jìn)行概括性的介紹,并引入一種快速而有效的代碼閱讀方法,即“先觀其大略,再咬文嚼字”。
操作系統(tǒng)是整個(gè)計(jì)算機(jī)的管理者,其本質(zhì)上是一個(gè)大型軟件平臺(tái),順著程序的執(zhí)行流程一起前進(jìn)是自然而然的事情。因此,從Linux內(nèi)核在龍芯計(jì)算機(jī)上的啟動(dòng)過程開始研究Linux 內(nèi)核是一個(gè)比較好的切入點(diǎn),以此獲得一個(gè)對(duì)龍芯處理器和Linux 內(nèi)核的宏觀印象。
內(nèi)核是操作系統(tǒng)中最基礎(chǔ)、最重要的部分,其三大基本功能分別是中斷/異常處理、內(nèi)存管理、進(jìn)程管理。這3章內(nèi)容盡量遵循“從基礎(chǔ)到上層”和“廣度優(yōu)先深度其次”的寫作原則,更方便讀者根據(jù)自己的需求安排閱讀順序。Linux內(nèi)核支持X86、ARM、MIPS、PowerPC等多種體系結(jié)構(gòu),但對(duì)上層應(yīng)用提供了基本一致的操作接口。因此,內(nèi)核的三大基本功能中一部分是體系結(jié)構(gòu)相關(guān)的特定內(nèi)容,一部分是體系結(jié)構(gòu)無關(guān)的通用框架。
由于Linux 是一體化內(nèi)核操作系統(tǒng),因此設(shè)備驅(qū)動(dòng)也放在內(nèi)核層實(shí)現(xiàn)。設(shè)備驅(qū)動(dòng)所涵蓋的范圍非常廣泛,本書不可能面面俱到,只選取了兩種常用的典型設(shè)備驅(qū)動(dòng)——Radeon 顯卡與E1000E 網(wǎng)卡,來做舉例性的原理說明。
Linux內(nèi)核博大精深,本書雖然洋洋灑灑幾百頁,然而在兩千多萬行源代碼實(shí)不過是滄海一粟。雖然我試圖讓內(nèi)容覆蓋更加全面,但也只是涉及了內(nèi)核啟動(dòng)、異常中斷、內(nèi)存管理、進(jìn)程管理、設(shè)備驅(qū)動(dòng)和電源管理等幾個(gè)常見話題,而對(duì)于文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議等方面的內(nèi)容幾乎只字未提。
怎樣閱讀上千萬行的源代碼?
閱讀軟件源代碼是每個(gè)開發(fā)者的必由之路,尤其是內(nèi)核開發(fā)者。因?yàn)?strong>內(nèi)核開發(fā)在很大程度上并不是重新發(fā)明輪子,而是深入理解并盡量復(fù)用現(xiàn)有的內(nèi)核設(shè)計(jì)框架,然后參照相似的功能模塊去添加或改寫某項(xiàng)需要的功能。在對(duì)內(nèi)核整體框架以及某些子系統(tǒng)融會(huì)貫通以后,才有可能站在巨人的肩膀上去改進(jìn)框架本身,實(shí)現(xiàn)自主創(chuàng)新。
閱讀代碼有“廣度優(yōu)先”和“深度優(yōu)先”兩種方式。代碼好比一棵樹,“廣度優(yōu)先”就是說我們要先找到主干,然后搞清楚主干上有幾根樹枝,再去某條感興趣的樹枝上尋找有意義的葉子;而“深度優(yōu)先”指的是是碰到第一根樹枝,就趕緊深入進(jìn)去把所有的葉子給找出來。本書建議以廣度優(yōu)先為主,但在適當(dāng)?shù)臅r(shí)候也需要兼顧深度。因此,本書使用“樹形視圖”和“鏈?zhǔn)揭晥D”來解析內(nèi)核源代碼,而這也是我以及我的同事在日常工作中常使用的方法。樹形視圖具有廣度,能夠快速理解大型函數(shù)的主干;鏈?zhǔn)揭晥D具有深度,能夠直觀理解重點(diǎn)函數(shù)的調(diào)用。
(樹形視圖)
(鏈?zhǔn)揭晥D)
在很多現(xiàn)有的書籍中,都會(huì)使用流程圖來描述代碼邏輯。然而,流程圖雖然直觀,但是其描述能力有限(尤其是缺乏樹形視圖的層次化表達(dá)能力),往往很難精確描述一個(gè)函數(shù)的執(zhí)行過程。而一個(gè)費(fèi)盡心機(jī)畫出來的精確的流程圖,往往又會(huì)因?yàn)槠鋸?fù)雜性而失去了直觀的功能。并且,單靠流程圖并不能完全理解源代碼,而是需要將源代碼與流程圖兩相對(duì)照。
因此,本書盡量用精簡(jiǎn)版的源代碼(即樹形視圖和鏈?zhǔn)揭晥D)來代替流程圖,一方面可以快速理解多級(jí)函數(shù)的復(fù)雜調(diào)用關(guān)系,另一方面可以不需要在源代碼和流程圖之間反復(fù)切換。
本書除了引入樹形視圖和鏈?zhǔn)揭晥D,在開篇第1章首先介紹了“先觀其大略,再咬文嚼字”的代碼閱讀方法。具體來說分為四個(gè)步驟,即“找準(zhǔn)入口點(diǎn)”“理清主脈絡(luò)”“顧名思義看功能”“理解補(bǔ)丁文件”。
從2015年開始動(dòng)筆,到如今《用“芯”探核:基于龍芯的Linux內(nèi)核探索解析》一書成型,其中的曲折艱辛實(shí)在是不足為外人道矣。在寫書過程中,當(dāng)我試圖將一個(gè)基本原理向眾人闡述明白的時(shí)候,才發(fā)現(xiàn),其實(shí)之前自己只是似懂非懂。甚至可以說,寫書最大的受益者是自己,因?yàn)檎麄€(gè)知識(shí)體系真正得到了全面的升華。
謹(jǐn)以此書,獻(xiàn)給一起為信息產(chǎn)業(yè)自主化而奮斗的同仁們。也希望此書,能給讀者帶來實(shí)質(zhì)性的收獲。
總結(jié)
以上是生活随笔為你收集整理的linux内核深度解析_十年磨一剑,第一本龙芯平台的Linux内核书来了的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: addeventlistener事件参数
- 下一篇: 【LeetCode笔记】39. 组合总和