linux內核情景分析
1. 小白看過來,新人如何入門嵌入式
作為一個新人,怎樣學習嵌入式linux
原文鏈接:網頁鏈接
作為一個新人,怎樣學習嵌入式Linux?被問過太多次,特寫這篇文章來回答一下。
在學習嵌入式Linux之前,肯定要有c語言基礎。匯編基礎有沒有無所謂(就那麼幾條匯編指令,用到了一看就會)。C語言要學到什麼程度呢?越熟當然越好,不熟的話也要具備基本技能。比如寫一個數組排序、輸入數字求和什麼的。學C語言唯一的方法是多寫程序多練習,編譯出錯沒關系,自己去解決;執行出錯沒關系,自己去分析。以前我是用VC來練習C語言的,經常去嘗試著寫一些C語言競賽的題目。它們是純C、純數學、純邏輯的題目,不涉及界面這些東西,很適合煅煉你的編程能力。
回到主題,首先我們要明白你的目的是什麼,大概來說所謂嵌入式Linux可以分為兩部分:底層系統、應用開發。如果你是想做應用開發,那麼你去把C語言、數據結構、JAVA什麼的學好吧。嵌入式應用開發和PC上的應用開發並沒有什麼特別要注意的。也許你說在嵌入式上要做些優化,是的,要優化,但是未經優化的程序和PC上的程序開發沒什麼差別。另外,當你有能力去優化時,你已經不用來問這個問題了。具體到某個例子,比如說開發界面,在PC上我們用VC;在嵌入式Linux里也許我們用QT也許用Android,這個時候你應該去學學QT、Android的編程。但是基礎還是C或JAVA,在此基礎上去熟悉它們的介面。你學過VC的話,也是要花時間去了解那些類、控制項的。
如果你的目的是想學習底層系統,這是我的專長,倒是可以說一點。在回答這個問題之前,我先回答:不少人問我,到底是學驅動還是學應用?
我只能說憑興趣,並且驅動和應用並不是截然分開的
我們說的驅動,其實並不局限於硬體的操作,還有操作系統的原理、進程的休眠喚醒調度等概念。 想寫出一個好的應用,想比較好的解決應用碰到的問題,這些知識你應該懂
做應用門檻低,特別是現在的ANDROID,純JAVA。做應用的發展路徑個人認為就是業務純熟。比如在通信行業、IPTV行業、手機行業,你了解行業的需求。所以,當領導的人,多是做應用的。
做驅動,其實我不想稱為「做驅動」,而是想稱為「做底層系統」,做好了這是通殺各行業。我工作幾年,做過手機、IPTV、會議電視,但是這些產品對我毫無差別,因為我只做底層。他們的業務跟我沒關系。當應用出現問題,他們解決不了時,我就會從內核角度給他們出主意,給他們提供工具。 做底層的發展方向,個人認為是技術專家。
其實,做底層還是做應用,之間並沒有一個界線,有底層經驗,再去做應用,你會感覺很踏實。有了業務經驗,你再了解一下底層,很快就可以組成一個團隊。
電腦一開機,那些界面是誰顯示的?是BIOS,它做什麼?一些自檢,然後從硬碟上讀入windows,並啟動它。類似的,這個BIOS對應於嵌入式Linux里的bootloader。這個bootloader要去Flash上讀入Linux內核,並啟動它。
啟動windows的目的是什麼?當然是上網聊天什麼的了。這些上網、聊天工具在哪?
在C盤、D盤上。所以, windows要先識別出C盤、D盤。在Linux下我們稱為根文件系統。
windows能識別出C盤、D盤,那麼肯定能讀寫硬碟才行。這涉及的東西稱為驅動程序。當然不僅僅是硬碟,還有網卡、USB等等。嵌入式Linux能從Flash上讀出並執行應用程序,肯定也得有Flash的驅動程序啊,當然也不僅僅是Flash。
對硬體的操作
對ARM體系處理器的了解
程序的基本概念:重定位、棧、代碼段數據段BSS段什麼的。
用繪圖板畫圖講解──相當於學校里老師在黑板上畫圖講解,很直觀絕對不是對著PPT念。
用source insight當場寫程序,從第1行開始寫,每一課都是這樣。我講了20多個驅動,就寫了20多個程序。
寫完就編譯、測試。
很全面,字元設備驅動、塊設備、網卡驅動3大類齊全,硬體介紹、驅動框架分析、測試3大類齊全。
我在學校時讀的是物理電子專業,其實課程里沒有教怎麼設計電路,只是教了些電子電路方面的知識。PCB的設計是在實驗室里自學的,只設計過2層板,現在忘記得差不多了。但是保留了看原理圖、看晶元手冊的能力。
選修了軟體學位,對軟體設計挺感興趣,但是也只是學了C語言、資料庫而已。憑著興趣做了不少競賽題。沒能力去參加競賽,但是把C語言練得很扎實。
在實驗室、在第1家公司,就是設計些簡單的PCI卡,寫一下windows的驅動程序
在第2家公司,用51單片機做車載電話,開始走上純軟體的道路。
開始感到單片機的不足,辭職半年閉門學Linux,從red hat怎麼操作開始。步驟就是先看<ARM體系架構與編程>,再自己寫裸板程序操作硬體,接著到分析u-boot。同時看<linux內核完全注釋>,對LINUX框架有所了解。在寫裸板時,建議各位加強對中斷的理解,內核就是用中斷來完成各種功能的。
分析完u-boot,就開始進行簡單的驅動編程了,這時候,能力還很弱。
開始去中興上班,工作2年,編寫各類驅動、解決各類問題(驅動問題、幫助定位應用問題),能力得到煅煉。
韋東山Linux視頻第1期(基於S3C2440錄制): ARM實驗,u-boot,文件系統,初級驅動
韋東山Linux視頻第1期(基於S3C6410錄制): 裸板程序
韋東山Linux視頻第2期: 高級驅動
韋東山Linux視頻第3期:項目實戰
韋東山Linux視頻第4期:Android驅動
回到怎麼學的問題上。嵌入式Linux底層系統包含哪些東西?不要急,舉一個例子你就知道了。
先說到這里吧,嵌入式LINUX里含有bootloader, 內核, 驅動程序、根文件系統這4大塊。
一、bootloader:
它就是一個稍微復雜的裸板程序。但是要把這裸板程序看懂寫好一點都不容易。Windows下好用的工具弱化了我們的編程能力。
很多人一玩嵌入式就用ADS、KEIL。你能回答這幾個問題嗎?
1. 一上電,CPU從哪裡取指令執行?
答:一般從Flash上指令。
2. 但是Flash一般是只能讀不能直接寫的,如果我用到全局變數,這些全局變數在哪裡?
答:全局變數應該在內存里
3. 那麼誰把全局變數放到內存里去?
答:長期用ADS、KEIL的朋友,你能回答嗎?這需要"重定位"。在ADS或KEIL里,重定位的代碼是製作這些工具的公司幫你寫好了。你可曾去閱讀過?
4. 內存那麼大,我怎麼知道把"原來存在Flash上的內容"讀到內存的"哪個地址去"?
答:這個地址用"鏈接腳本"決定,在ADS里有scatter文件,KEIL里也有類似的文件。但是,你去研究過嗎?
5. 你說重定位是把程序從Flash復制到內存,那麼這個程序可以讀Flash啊?
答:是的,要能操作Flash。當然不僅僅是這些,還有設置時鍾讓系統運行得更快等等。
自問自答到這里吧,bootloader這一個裸板程序,其實有3部分要點:
對硬體的操作,需要看原理圖、晶元手冊。這需要一定的硬體知識,不求你能設計硬體,但是至少能看懂; 不求能看懂模擬電路,但是要能看懂數字電路。這方面的能力我是在學校里學到的,微機原理、數字電路這2本書(書名忘了)就足夠了。但是我懷疑你有無耐心把這2本書看完。我不知道現在有沒有更快捷的書。想速成的話,就先放掉這塊吧,不懂就問GOOGLE、發貼。
另外,晶元手冊是肯定要讀的,別去找中文的,就看英文的。開始是非常痛苦,以後就會發現那些語法、詞彙一旦熟悉後,讀任何晶元手冊都很容易。對ARM體系處理器的了解, 看杜春蕾的<ARM體系架構與編程>吧,裡面講有匯編指令,有異常模式、MMU等。也就這3塊內容需要你了解。
程序的基本概念,王道當然是去看編譯原理了。可惜,這類書絕對是天書級別的。勸你若非超級天才還是別去看了。就看我寫的<嵌入式Linux應用開發完全手冊>和第1期視頻吧,別擔心,不用花錢。照著視頻把硬體相關的實驗做了,這些概念就清楚了。我還沒有
發現第2套講這些概念的書或視頻。
對於bootloader,我學習時是先看了<ARM體系架構與編程>,然後自己寫程序把各個硬體的實驗都做了一遍,比如GPIO、時鍾、SDRAM、UART、NAND。把它們都弄清楚了,組台在一起就很容易看懂u-boot了
總結一下,看懂硬體原理圖、看晶元手冊,這需要你自己去找資料。剩下的,就按<嵌入式Linux應用開發完全手冊>和第1期視頻的章節目錄去學習吧。
二、內核:
想速成的人,先跨過內核的學習,直接學習怎麼寫驅動。
想成為高手,內核必須深刻了解。注意,我說的是了解,我沒奢望去寫出一個內核。
要對裡面的調度機制、內存管理機制、文件管理機制等等有所了解。
推薦兩本書:
1. 通讀<linux內核完全注釋>,請看薄的那本(浮燥的社會講求速度, 呵),
2. 選讀<Linux內核情景分析>, 想了解哪一塊就讀哪一節
三、驅動:
驅動包含兩部分:硬體本身的操作、驅動程序的框架。
又是硬體,還是要看得懂原理圖、讀得懂晶元手冊,多練吧。
說到驅動框架,有一些書介紹一下。LDD3,即<Linux設備驅動>,老外寫的那本,裡面介紹了不少概念,值得一讀。但是,它的作用也就限於介紹概念了。我基本上是入門之前用它來熟悉一下概念,入門後就扔掉了。
驅動方面比較全的介紹,應該是宋寶華的<linux設備驅動開發詳解>了,老實說我只看過目錄,有不少人說好,這里推薦一下。要想深入了解某一塊,<Linux內核情景分析>絕對是超5星級推薦。你別指望把它讀完,1800多頁,上下兩冊呢。我是某一塊不清楚時,就去翻一下它。任何一部分,這書都可以講上2、3百頁,非常詳細。並且是以某個目標來帶你分析內核源碼。它以linux 2.4為例,但是原理相通,同樣適用於其它版本的linux。
還有沒有其他介紹?呵呵,當然有了,韋東山Linux視頻第2期。<嵌入式Linux應用開發完全手冊>里對驅動講得不多,不夠深入。於是我錄制了這期視頻。不僅僅教你怎麼寫怎麼改驅動,還教你為什麼這樣寫這樣改驅動。
每一個驅動都是現場編寫:
培訓機構里教的內容,遠不及這期視頻豐富。我在多個培訓機構講過課,從沒看到哪個老師敢每一課都當場講解當場編寫代碼,當場測試,除我之外!也沒看到哪個培訓機構講完這些內容──因為時間不夠,講完起碼要一個月,但是這部分基本只有2周授課時間。
把你手上的開發板所涉及的硬體,都去嘗試寫一個驅動吧。有問題就先"痛苦地思考",思考的過程中你會把很多不相關的知識串聯起來,最終貫通。
四、根文件系統:
大家有沒有想過這2個問題:
1. 對於Linux做出來的產品,有些用作監控、有些做手機、有些做平板。那麼內核啟動後,掛載根文件系統後,應該啟動哪一個應用程序呢?
答:內核不知道也不管應該啟動哪一個用戶程序。它只啟動init這一個應用程序,它對應/sbin/init。顯然,這個應用程序就要讀取配置文件,根據配置文件去啟動用戶程序(監控、手冊界面、平板界面等等)這個問題提示我們,文件系統的內容是有一些約定的,比如要有/sbin/init,要有配置文件
2. 你寫的hello,world程序,有沒有想過裡面用到的printf是誰實現的?
答:這個函數不是你實現的,是庫函數實現的。它運行時,得找到庫。這個問題提示我們,文件系統里還要有庫。
簡單的自問自答到這里,要想深入了解,可以看一下busybox的init.c,就可以知道init進程做的事情了。當然,也可以看<嵌入式Linux應用開發完全手冊>里構建根文件系統那章。
說一下我的學習經歷吧。
總結一下:
1. 硬體方面的書: 微機原理、數字電路,高校里的教材。畢業多年,忘名了。
2. Linux方面的書:
<ARM體系架構與編程>
<嵌入式Linux應用開發完全手冊>
<Linux設備驅動>,老外寫的那本
<linux設備驅動開發詳解>
<linux內核完全注釋>
<Linux內核情景分析>
3. 視頻:
視頻信息請看網頁鏈接
————————————————
版權聲明:本文為博主「韋東山」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/thisway_diy/article/details/51887326
2. 如何學習Linux內核該學習哪些方面的知識謝謝!!!
最早接觸inux是看了《linux操作系統實用教程》,98~99年的光景,學習了簡單的操作和內核編譯,那時候開始注意並學習內核。看的第一本是《Unix環境高級編程》,看了一部分沒看完,開始對
if(!(p=fork()))
{
…………
}
else
{
……
}
結構恨意很疑惑,這和一般的應用程序邏輯相背,因此想搞明白內核在干什麼,怎麼乾的。開始買了《操作系統設計與實現》,上下冊,下冊全是minix操作系統內核代碼。它和linux完全不同的,一個是微內核,一個單內核。即便看懂了minix,linux也要從頭看起,反之亦然。因此後來沒鑽進去。我看的第一本Linux內核書是李善平老師的《linux操作系統實驗教程》,當時市面上關於內核的書很少,這本是講2.0.35版的好像,似懂非懂。就開始邊看邊讀源代碼,間或看點操作系統原理的書,有不懂得在論壇上提問,這樣慢慢琢磨,就有點懂了。現在比當時好多了,很多內核的書,各方面剖析得很詳盡。不過要學懂,還是要:1、有好奇心和興趣 2、看書、讀代碼,這樣能夠比較懂。要進一步提高的話還要學會修改內核。有以下書籍可以參考:
1、《linux內核完全剖析》0.11版內核
2、《深入理解linux內核》(1、2、3版) ,3個版本分別對應2.2、2.4、2.6版的內核。
3、《linux內核源代碼情景分析》2.4.0版內核
4、《linux內核設計與實現》
5、《linux設備驅動程序》
3. linux怎麼自學
這是我的學習經歷,希望對你有所幫助!
1 學習一些操作系統的理論知識,一些概念。比如:進程,內存管理,文件系統等等。關於這一方面的書籍太多了,自己找一本就行了
2 學習x86匯編,雖然linux用的是AT&T匯編,但二者只是格式不同而已。而且學習x86匯編有助於了解x86系統結構。書籍推薦王爽的《匯編語言》 ,我學的時候用的不是這個,後面看到這本書,才覺得自己做了「苦功了」。學完大部分匯編指令時,找些匯編程序讀讀,熟悉這些指令的用法。不需要有寫匯編程序的能力,能讀就行了,當然會寫更好
3 趙炯的《Linux內核0.11完全注釋》。這個linux內核版本低,作者也講得很詳細。不過關於x86體系的那一部分,作者講得很繁瑣,這一部分一定要大體看懂,那後面章節的內容就沒有多大的問題了。我先把書通看了一遍,用了1個月的時間。後來,再返回來一個一個研究,用了2個月。
之所以看這本書,是讓自己對內核有個實質的感受,不僅僅只是理論上的東西。
4 毛德操的《linux內核情景分析》。linux內核版本2.4.0,這本書很厚,上下兩冊。我通讀一遍,用了2個月時間。後來,再返回來一個一個研究,現在已用了2個月,正在研究中。。。。就我個人覺得,linux內核最難的是內存管理,這2個月我就只大體搞清內存頁面的周轉,但搞清了這個,就會對內核的整體結構有個大致的了解,因為你已經清楚了用戶進程和內核的其它部分是怎樣使用內存頁面的。
5 學習linux內核最需要的是堅持和思考。這是一個很長的過程,也許你會發現學了linux內核,並不會給你帶來什麼,我現在就是這樣覺得的,感覺自己什麼都不會做,真希望有人能我一些建議!不過學習學習也是有好處的,比如看了趙炯的《Linux內核0.11完全注釋》後,你再去看UCOS-II,會感覺那太容易了!也許學習linux內核會對將來的工作有所幫助吧!
4. 學習Linux的步驟是怎樣的
對於Linux的學習,可以分為四個階段,Linux初級入門階段→Linux中級進階→Linux高級進階→Linux資深方向細化階段
第一階段:初級階段
初級階段需要把linux學習路線搞清楚,任何學習都是循序漸進的,所以學linux也是需要有一定的路線。
1. Linux基礎知識、基本命令;
2. Linux用戶及許可權基礎;
3. Linux系統進程管理進階;
4. linux高效文本、文件處理命令;
5. shell腳本入門
第二階段:中級進階
中級進階需要在充分了解linux原理和基礎知識之後,對上層的應用和服務進行深入學習,其中說到服務肯定涉及到網路的相關知識,是需要花時間學習的。
1. TCP/IP網路基礎;
2. Linux企業常用服務;
3. Linux企業級安全原理和防範技巧;
4. 加密/解密原理及數據安全、系統服務訪問控制及服務安全基礎;
5. iptables安全策略構建;
6. shell腳本進階;
7. MySQL應用原理及管理入門
第三階段:Linux高級進階
1. http服務代理緩存加速;
2. 企業級負載集群;
3. 企業級高可用集群;
4. 運維監控zabbix詳解;
5. 運維自動化學習;
第四階段:Linux資深方向細化
1. 大數據方向;
2. 雲計算方向;
3. 運維開發;
4. 自動化運維;
5. 運維架構師
以上是Linux的一個學習方向和路線,對於Linux學習是一個需要堅持的過程,也許通過自學或者培訓,3至6個月都可以把基本知識學會,但是重在實踐,深入的思考和不斷的摸索,你會發現Linux更多的美!
5. 2.6了,看linux 內核源代碼情景分析有意義嗎
意義肯定有,只是你如何評定你的時間精力「投入」與「收獲」問題。看基於2.4版的《linux 內核源代碼情景分析》要注意,內存管理部分與2.6完全不同。
6. LINUX內核源代碼情景分析(上冊)
毫不猶豫的買下了,京東速度果然非常快的,從配貨到送貨也很具體,快遞非常好,很快收到書了。書的包裝非常好,沒有拆開過,非常新,可以說無論自己閱讀家人閱讀,內核源代碼情景分析(上冊)採取類似於英語教學中行之有效的情景會話的教學方法,全面深入地剖析了最新版本核心源代碼,並對核心的獨特優點和需要進一步改進的問題作了精闢的評述。內核源代碼情景分析(上冊)包括預備知識、存儲管理、中斷和系統調用、進程和進程調度、文件系統以及傳統的進程通訊共六章。收藏還是送人都特別有面子的說,特別精美各種十分美好雖然看著書本看著相對簡單,但也不遑多讓,塑封都很完整封面和封底的設計、繪圖都十分好畫讓我覺得十分細膩具有收藏價值。書的封套非常精緻推薦大家購買。打開書本,書裝幀精美,紙張很乾凈,文字排版看起來非常舒服非常的驚喜,讓人看得欲罷不能,每每捧起這本書的時候似乎能夠感覺到作者毫無保留的把作品呈現在我面前。作業深入淺出的寫作手法能讓本人猶如身臨其境一般,好似一杯美式咖啡,看似快餐,其實值得回味無論男女老少,第一印象最重要。從你留給別人的第一印象中,就可以讓別人看出你是什麼樣的人。所以多讀書可以讓人感覺你知書答禮,頗有風度。多讀書,可以讓你多增加一些課外知識。培根先生說過知識就是力量。不錯,多讀書,增長了課外知識,可以讓你感到渾身充滿了一股力量。這種力量可以激勵著你不斷地前進,不斷地成長。從書中,你往往可以發現自己身上的不足之處,使你不斷地改正錯誤,擺正自己前進的方向。所以,書也是我們的良師益友。多讀書,可以讓你變聰明,變得有智慧去戰勝對手。書讓你變得更聰明,你就可以勇敢地面對困難。讓你用自己的方法來解決這個問題。這樣,你又向你自己的人生道路上邁出了一步。多讀書,也能使你的心情便得快樂。讀書也是一種休閑,一種娛樂的方式。讀書可以調節身體的血管流動,使你身心健康。所以在書的海洋里遨遊也是一種無限快樂的事情。用讀書來為自己放鬆心情也是一種十分明智的。讀書能陶冶人的情操,給人知識和智慧。所以,我們應該多讀書,為我們以後的人生道路打下好的、扎實的基礎!讀書養性,讀書可以陶冶自己的性情,使自己溫文爾雅,具有書卷氣讀書破萬卷,下筆如有神,多讀書可以提高寫作能力,寫文章就才思敏捷舊書不厭百回讀,熟讀深思子自知,讀書可以提高理解能力,只要熟讀深思,你就可以知道其中的道理了讀書可以使自己的知識得到積累,君子學以聚之。總之,愛好讀書是好事。讓我們都來讀書吧。其實讀書有很多好處,就等有心人去慢慢發現.最大的好處是可以讓你
7. Linux內核應該怎麼去學習
學嵌入式Linux要先學以下幾點:
1.C語言。要有C語言的基礎,當然越熟練越好,不熟也沒關系,具備基本技能就可以:比如寫一個數組排序、輸入數字求和什麼的。C語言的學習就是多些多練。
2.Linux基礎
Linux操作系統的概念、安裝方法,詳細了解Linux下的目錄結構、基本命令、編輯器VI ,編譯器GCC,調試器GDB和 Make 項目管理工具, Shell、 Makefile腳本編寫等知識,嵌入式開發環境的搭建。
3.Linux系統編程
重點學習標准I/O庫,Linux多任務編程中的多進程和多線程,以及進程間通信(pipe、FIFO、消息隊列、共享內存、signal、信號量等),同步與互斥對共享資源訪問控制等重要知識,主要提升對Linux應用開發的理解和代碼調試的能力。
4.Linux網路編程
計算機網路在嵌入式Linux系統應用開發過程中使用非常廣泛,通過Linux網路發展、TCP/IP協議、socket編程、TCP網路編程、UDP網路編程、Web編程開發等方面入手,全面了解Linux網路應用程序開發。重點學習網路編程相關API,熟練掌握TCP協議伺服器的編程方法和並發伺服器的實現,了解HTTP協議及其實現方法,熟悉UDP廣播、多播的原理及編程方法,掌握混合C/S架構網路通信系統的設計,熟悉HTML,Javascript等Web編程技術及實現方法。
5.數據結構與演算法
數據結構及演算法在嵌入式底層驅動、通信協議、及各種引擎開發中會得到大量應用,對其掌握的好壞直接影響程序的效率、簡潔及健壯性。此階段的學習要重點理解數據結構與演算法的基礎內容,包括順序表、鏈表、隊列、棧、樹、圖、哈希表、各種查找排序演算法等應用及其C語言實現過程。
6.Cortex A8 、Linux 平台開發
通過基於ARM Cortex-A8處理s5pv210了解晶元手冊的基本閱讀技巧,掌握s5pv210系統資源、時鍾控制器、電源管理、異常中斷控制器、nand flash控制器等模塊,為底層平台搭建做好准備。Linux平台包括內核裁減、內核移植、交叉編譯、GNU工具使用、內核調試、Bootloader介紹、製作與原理分析、根文件系統製作以及向內核中添加自己的模塊,並在s5pv210實驗平台上運行自己製作的Linux系統,集成部署Linux系統整個流程。同時了解Android操作系統開發流程。Android系統是基於Linux平台的開源操作系統,該平台由操作系統、中間件、用戶界面和應用軟體組成,是首個為移動終端打造的真正開放和完整的移動軟體,目前它的應用不再局限於移動終端,還包括數據電視、機頂盒、PDA等消費類電子產品。
7.驅動開發
驅動程序設計是嵌入式Linux開發工作中重要的一部分,也是比較困難的一部分。本階段的學習要熟悉Linux的內核機制、驅動程序與用戶級應用程序的介面,掌握系統對設備的並發操作。熟悉所開發硬體的工作原理,具備ARM硬體介面的基礎知識,熟悉ARM Cortex-A8處理器s5pv210各資源、掌握Linux設備驅動原理框架,熟悉工程中常見Linux高級字元設備、塊設備、網路設備、USB設備等驅動開發,在工作中能獨立勝任底層驅動開發。
8. Linux學習書籍求推薦
Linux學習書籍求推薦
1、《Linux與Unix Shell 編程指南》
C語言基礎
1、《C Primer Plus,5th Edition》【美】Stephen Prata著
2、《The C Programming Language, 2nd Edition》【美】Brian W. Kernighan David M. Rithie(K & R)著
3、《Advanced Programming in the UNIX Environment,2nd Edition》(APUE)
4、《嵌入式Linux應用程序開發詳解》
Linux內核
1、《深入理解Linux內核》(第三版)
2、《Linux內核源代碼情景分析》毛德操 胡希明著
研發方向
1、《UNIX Network Programming》(UNP)
2、《TCP/IP詳解》
3、《Linux內核編程》
4、《Linux設備驅動開發》(LDD)
硬體基礎
1、《ARM體系結構與編程》杜春雷著
2、S3C2410 Datasheet
英語基礎
1、《計算機與通信專業英語》
系統教程
1、《嵌入式系統――體系結構、編程與設計》
2、《嵌入式系統――採用公開源代碼和StrongARM/Xscale處理器》毛德操 胡希明著
3、《Building Embedded Linux Systems》
理論基礎
1、《演算法導論》
2、《數據結構(C語言版)》
3、《計算機組織與體系結構?性能分析》
4、《深入理解計算機系統》【美】Randal E. Bryant David O』Hallaron著
5、《操作系統:精髓與設計原理》
6、《編譯原理》
7、《數據通信與計算機網路》
8、《數據壓縮原理與應用》
入門篇
《LINUX權威指南》書不錯,寫的很全面也比較廣,涉及的不深,做為入門書籍不錯,可以比較全面的了解linux 。另外比較熱門的也可以看看《鳥哥的私房菜》等書,偏管理類的書。如果想做server方向的可以找來看看。
驅動 篇
《LINUX設備驅動程序 》就是網上說的「LDD」,經典之作,必備書籍。國產經典《Linux驅動詳細解》也是一本非常不錯的書,很實用,書中源代碼分析比較多,基於2440的,對linux外圍驅動有很全面的講解
內核篇
浙江大學的《LINUX內核源代碼情景分析》,外國鬼子的《萊昂氏UNIX源代碼分析》還有《深入理解linux內核》都是出名的經典巨作。另外趙 炯的《LINUX內核完全剖析–基於0.12內核》也非常不錯,對內核代碼進行了詳細的注釋,非常有助於對內核的理解和代碼的分析。
shell篇
《LINUX與UNIX Shell編程指南》
應用 編程
不用說了肯定是《unix環境高級編程》被稱為unix編程的聖經。
TCP/IP篇
《TCP/IP詳解》作者W.Richard Stevens也是《unix環境高級編程》的作者,牛人出的書沒有一本不是經典的。但是英年早逝,默哀一下。
c語言
《The C Programming Language》正是作者造出來的c語言,書能垃圾就怪了
《c和指針》和《c缺陷和陷阱》兩本必備。包含了c語言最容易出錯的地方,加深c語言功力的好材料。
關於演算法
《演算法導論》
1 熟悉linux基本環境 >>> 《鳥哥的私訪菜》《unix初級教程》 《linux編程寶典》(市面上無,圖書館有), 等等。
2 熟悉操作系統的基礎知識 >>> 《現代操作系統》 《操作系統概念》
3 熟悉系統編程 >>> 《unix環境高級編程第二版》《unix操作系統設計與實現》
4 內核 按先後順序: 《 linux內核設計與實現》 《linux設備驅動程序》 《深入理解 linux內核》 《linux內核源代碼情景分析》 《深入理解linux虛擬內存系統》
5 其他一些書籍: 《freebsd操作系統設計與實現》 《solaris內核結構》 《unix高級教程:系統技術內幕》 《現代體系結構的unix系統:內核程序員的smp與cache技術》 《保護方式下的80386及其編程》 (後3本市面上沒了,大學圖書館里一般都有》 《Intel64 and IA-32 Arichitectures Software Developer』s Manual》
6 其實內核玩深了,體系和編譯也要學好 《計算機體系結構:量化研究方法》 《編譯原理》(龍書)
Linux編程推薦書籍一覽表
shell 編程
《LINUX與UNIX SHELL編程指南》
BASH寶典:
Advanced Bash Scripting Guide (如果你使用的是 GNU/Debian 系統,可以用 apt-get install abs-guide 安裝該文檔)
BASH Programming – Introction HOW-TO
Bash Man
用戶級編程書籍:
Advanced Programming in the UNIX Environment(中文版《UNIX環境高級編程》第二版) 作者 W.Richard
Stevens/尤晉元等
GNU/Linux編程指南 作者 Kurt Wall
Linux 程序設計權威指南 作者 於明儉、陳向陽、方漢
《The Art of Unix Programming》作者 E.S.R
Computer Systems A Programmer』s Perspective
(中文名)《深入理解計算機系統(修訂版)》
《Unix Systems Programming》(中文版《UNIX系統編程》)作者: (美)KAY
A.ROBBINS, STEVE ROBBINS 譯者:陳涓 趙振平
網路編程:
Unix Network Programming V1 & V2,Unix網路編程卷1、2 作者 W.Richard Stevens
《unix網路編程》
XWindow編程
Definitive Guides to the X WindowSystem 作者 Dan Heller, Paula M. Ferguson
內核源代碼閱讀(結合源代碼)和編程
(入門)
《邊干邊學Linux內核指導》
(高級)
《Linux Kernel Development》
《Linux內核源代碼情景分析》
《深入分析Linux內核源代碼》 陳莉君
《 Understanding Linux Network Internals 》即《 深入理解Linux網路內幕(英文影印版)》Christian Benvenuti
內核模塊編程
《The Linux Kernel Mole Programming Guide》
Linux設備驅動編程
Linux設備驅動程序/Linux Device
Drivers 作者 Alessandro Ruibini
多線程編程
《多線程編程指南》
9. linux內核源代碼情景分析 怎麼樣
這段時間一直在為畢業論文糾結,論文題目是關於Linux進程模塊的源代碼分析與研究。 以前拜讀過《操作系統設計與實現》,《Linux內核設計與實現》,《understanding the linux kernel 3rd》等等,桌面還有大把的網路下下來的資料。 初識這本書,是大三時候一位同學跟我提起,當時覺得還沒到閱讀源代碼的程度。一直到做這篇論文,在我最糾結的時候,忽然想起朋友說過這本書,於是下了電子版本。 理所當然,我完全被這本書吸引。 我難掩心中的激動,幾乎要歡呼起來,這何嘗不是一本可以當做小說閱讀的書籍! 這本書不像前兩本那樣,僅僅只是羅列出Linux的特性,數據結構,相關的技術等等,他是在帶領你去走進Linux源代碼的世界,順著代碼的調用,一路斬荊披棘,最後帶你到底目的地。途中雖然驚險,但一路過來,卻是充滿了趣味,更是享受到了智力上的成就感。 關於書的語言。 讀這本書,彷彿是你的好朋友就坐在你面前跟你講話,他把Linux源碼中的枯燥的理論跟生活中普遍的事物聯系起來,像進程的task_struct結構體,相當於我們的「戶口本」,進程轉換到"zombie」狀態,「進程死亡了無法幫自己注銷戶口登記,要父進程幫忙」等等,這些解釋非常地形象。所謂的大師也便是如此,用最通俗的語言把最深奧的道理講明白,我想,這本書的作者做到了。 此書的不足。 這本書也存在著不足之處。第一點,此書是2001年出版的,所以是以2.4版本的源代碼為基礎的,而現在已經長期停留在2.6版本了;第二是,書中的圖片嚴重不足,很多原理只要附加張圖片便能讓讀者明了,可是作者花了不少的篇幅去解釋而沒有附加圖片,這很讓人費解,或者這是因為錄入不是作者本人做的原因;第三,這跟很多國內書籍類似,沒有索引,查找代碼的講解是件很痛苦的事情。 距離這本書第一次出版已經有八年的時間了,希望作者能抽出時間再修訂,在此基礎上做2.6版本源代碼的分析。 這是我見過的國內比較好的真正用心去寫的計算機書籍,在此之前也只讀過一本關於匯編語言的書籍,作者是王爽。依稀還記得當年舍友都睡了的時候,一個人小心翼翼地趴在筆記本前仔細閱讀的情景,如今甚是懷念。 這是本好書。