怎樣才算熟悉Linux內核?

我想找份Linux驅動方面的工作,很多招聘信息都要求熟悉Linux內核,那怎樣才算熟悉?有沒有驗證自己水平的方法?


熟悉並不是很高的一個目標,所以達成的難度不會很高。作為內核開發,大家大多數會碰見的是:

1. 修改原有功能滿足自己項目需要。

2. 驅動開發。

所以,針對以上的需求:

1. 首先,請通讀ULK,深入理解linux kernel,不涉及到很多代碼層面,但可以讓你了解很多內核的概念。 通讀的時候不用太糾結於細節,因為細節往往會根據實際的需要和版本進行變更。演算法方面,我個人也建議不用太細追究,因為大部分人是沒可能沒能力改變這些演算法的,比如調度演算法等等,所以只要了解即可。

2.結合代碼, 對內存管理部分進行詳細的研讀。內核開發過程中,最常見的就是對內存的使用和理解,各種內存空間該怎麼用,各適合什麼情況,它們之間怎麼關聯,設備在內存空間內是如何映射的,等等。可以說在很大程度上,你的代碼都會涉及內存方面的控制。內核提供了很多的helper,但是該怎麼用要看個人的本事。

3. 結合代碼,熟悉內核模塊,設備模型。驅動或實現內核功能的根本。

4. 結合代碼,跟蹤IRQ,sIRQ,workqueue,tasklet的實現。驅動處理的根本。

5. 結合代碼,熟悉事件驅動。Epoll的原理和實現。

6. 結合LDD3,編寫驅動示例。

至於是否提交補丁,我面試的時候會去調研,曾經看到有人只提交了函數改名,返回值改類型的補丁,我只能說這些補丁還不如不提交。。。做內核講究深入、穩重,反對華而不實。如果都拿出來一些邊角料的補丁,我只能說它們是減分項而不是加分項。

先寫這麼多。


能否污染linux郵件列表,發布核心更新在開源社區,是熟悉linux的唯一標準。


熟悉是一個非定量的詞語;內核的內容實在涉及太多,比如內核sock可定會涉及到MM,」熟悉」內核sock,必然對MM不陌生,但多多少少還是有一些判斷的門欄

1 kernel 是否接收提交的補丁(次之,對內核提交補丁)

2 公司更是看重你解決問題的能力,至少會看重針對具體問題產生的解決問題的思路

3 對面內核某一方面的研究,最終是可以串起來的,至少在面試中,進行發散

1.1 再次之,能否看懂別人提交的補丁以及內核架構


推薦閱讀:

Linux入門命令100條
Cent OS6裝gcc-4.8和php-7真很tough嗎?
2017 年 Linux 的五大痛點
如何在最短時間內掌握Linux精髓?
我的Linux手冊

TAG:操作系統 | 編程 | Linux | C編程語言 | Linux內核 |