最近,在知乎看到一個問題,“嵌入式Linux有哪些好書推薦”。我讀研期間也喜歡收藏一些書籍,每次看到京東有活動,總是忍不住想買一些書籍回來。
隨着時間越來越久,我買的書越來越多,但是都看完不太現實。後來發現書不在於多,而在於經典。
買了書搬家是個麻煩事,我從網上搜集了一套計算機電子書,從中篩選了我看過的好書分享給大家。
在這裏我推薦我看過的比較好的書,從入門到進階。
這是我上學期間買過的一些書,其中的很大一部分還沒看完:
我整理的這些書大家可以在這裏免費白嫖,都是嵌入式領域的經典書籍,從入門到深入理解,整理全了!
推薦一個 github倉庫,上面放了上百本經典的嵌入式,計算機書籍,可以star一下,下次找書直接在上面搜索就可以了:
github 書籍寶藏倉庫
gitee 書籍寶藏倉庫
@[toc]
編程語言
C
《C primer plus》
這本書幾乎囊括了C語言所有的知識點,並且書中對於每一個語法細節都有很多生動簡單的例子,同時給出了程序的運行結果,學起來會很舒服,不會那麼枯燥。
一直認為,能把printf函數講清楚的書一定是好書。從本書對printf函數的講解的篇幅之大,就可以看出它的專業性。
600多頁的書,算是第一本認真讀完的C語言類書籍。如果不是因為它的趣味而且專業、詳細但不是手冊類型的書籍,我肯定是讀不下去的。
總是覺得厚書通常廢話多,但是這本書卻值得細細品讀。經常性的,書中所提到的問題恰好是困擾了你很久的問題,讀下之後,有想抱着作者親一口的衝動!!
總的來説,前面的比較基礎,後面的稍有難度。前面雖然簡單,但是也有很多比其他書出彩的地方,後面雖然難了點,但是並非虎頭蛇尾,而且這一部分通常很有趣。
強烈建議想好好學C語言的人,一定要讀這本書。如果你還會點彙編知識,並且有探究的精神,那麼這本書真的會讓你很有成就感和共鳴感!
新手學習的時候一定要自己動手敲每一個例子,這樣才能學得好,代碼能看懂跟能寫出來差距還是挺大的。
《C和指針》
學會C的基本理論後,想要從初級水平進階到中級水平,該書無疑是最好的一本參考書。指針可以説是C語言的靈魂,隨便看一下linux kernel源碼,就能發現裏面到處都有指針的身影,很多讓人眼前一亮的技巧都是通過指針實現的。
這裏需要提醒一點,雖然本書書名是《C和指針》,但是其它的C語法都有詳細介紹,只不過書中對指針的介紹比較多。
《C陷阱與缺陷》
這本書是Andrew Koenig大神以自己1985年在Bell實驗室時發表的一篇論文為基礎,結合自己的工作經驗擴展而成的。作者寫作本書的出發點不是要批判C語言,而是要幫助C程序員繞過編程過程中的陷阱和障礙。
相比較那些大部頭的計算機圖書,這本只有100多頁的小冊子會讓你有讀下去的慾望,本書的內容是短小精悍。
全書分為8章,分別從詞法分析、語法語義、連接、庫函數、預處理器、可移植性缺陷等幾個方面分析了C編程中可能遇到的問題。
讀過這本書之後,當自己寫代碼時,要時刻回想書中的內容,防止自己犯同樣的錯誤!
《C專家編程》
這本書與展示了最優秀的C程序員所使用的編碼技巧,並專門開闢了一章對C++的基礎知識進行了介紹。
書中C的歷史、語言特性、聲明、數組、指針、鏈接、運行時、內存以及如何進一步學習C++等問題進行了細緻的講解和深入的分析。全書擷取幾十個實例進行講解,對C程序員具有非常高的實用價值。
C++
《C++ Primer》
這本書完全是從一個專業開發者的角度去寫的,把基礎知識講的很的深入和很透徹,讓你理解什麼是c++開發思想,講解了很多在實際開發中的用法,問題,注意點等。
你可以感受到作者的水平之高,態度之認真,學完這本書,會讓你對整個c++語言有個比較清晰的認識,對代碼的規範化,對內存管理機制,對效率問題都會有不少提升。
《Effective C++ 》
這是一本C++的入門書籍,Lippman之所以寫這本書就是因為《C++ Primer》對於初學者來説太笨重了,而這本書卻是從不同的方面——C++的本質和組織結構對語言進行闡釋,可以幫助初學者對這門語言有一個大致的瞭解。
對於初學者而言,不要在最開始就陷入到C++的細節之中,否則會有“不識廬山真面目,只緣身在此山中”的感覺,C++的語法實在太多了。。。
《STL 源碼剖析》
對這本經典的書我已經無法用簡單的詞語來形容了。我只能説,學C/C++的人如果沒有看過這本書,實在是可惜。
這本書,侯捷老師對 STL 中的各個組件進行了剖析,對 STL 的用法給出了一些示例,另外把 STL 中幾乎所有功能都講了一遍,在容器部分對其中用到的數據結構進行了細緻的講解。
尤其值得一提的是,書中有大量的插圖,對於讀者理解數據結構和算法能夠起到事半功倍的效果,可見侯捷老師是下了大量功夫的。 C++程序員都應該讀讀這本書。
數據結構與算法
《大話數據結構》
如果你跟我一樣不是計算機科班出身,又想自學數據結構以及初步瞭解算法,那麼就從這樣的書籍開始吧。
非常棒的一本入門數據結構的書,每一章節都會有一個場景舉例幫助理解數據結構,書中代碼也可以邊調試邊學習。
《數據結構與算法分析-C語言描述》
在學習過C語言後,不要拖太久了,就看它,書很好,講解透徹簡明,雖然範圍有點廣,但是比國內大部分已經好很多了,建議刷完後面的題目,做有意見挑戰性的鍛鍊能力的題目。
這本講算法的雖然只有300多頁,比不上算法導論那樣的大部頭,不過講了許多的算法設計技術,整本書的信息量很大,好好研讀,一定會有較大收穫。
ARM體系與架構
《ARM體系結構與編程》
這本書可以看作是對ARM參考手冊的中文摘譯版,看ARM英文手冊有難度的,可以參考下這本書。
《嵌入式Linux應用開發完全手冊》
韋老師寫的完全手冊,很全面。從裸機到驅動再到嵌入式應用。 結合着開發板和視頻食用效果更好。
操作系統
《現代操作系統》
介紹計算機操作系統很不錯的一本書,看的時候有種膜拜感啊,入門操作系統必讀的一本書。
從各個層面上進行介紹,夠廣也夠深,最後一章的各方面綜合介紹也好有意思,末尾的相關書籍推薦也大讚。這也是我覺得寫操作系統原理寫的最好的書,很適合初學者入門操作系統閲讀,可以全方面瞭解操作系統原理。
缺點:中文翻譯版不給力,個別地方可能會影響理解,但基本意思是不會有明顯出入的。如果你時間精力允許,建議慢慢啃原版;如果實在沒那麼多精力,翻譯版也還湊合。
《操作系統——精髓與設計原理》
這本書和《現代操作系統》類似,兩本書看一本就好了,另一本可以用來當作工具書查閲。
《操作系統真相還原》
力薦此書,但建議先讀完操作系統原理教材再看,你會發現閲讀教材的過程中產生的很多疑問都被這本書解答了。
教材為了將操作系統原理講得具有普適性,會故意將很多原理抽象化,避免其中的細節,所以讀起來經常感覺雲裏霧裏,似懂非懂。而且為了顯得權威,語言會比較生硬,晦澀難懂。
這本書會把那些由於知識侷限性導致的難以描述清楚的疑惑都回答了,讓你對操作系統有更清晰更全面的認識。
我曾經對操作系統的很多實現細節產生過疑問,但 google 半天也找不到滿意的回答,由於是很細節的東西,關鍵詞少了猶如大海撈針,關鍵詞多了結果往往寥寥無幾,而且還答非所問,即使能搜到很多都是帶着講一下,並沒有深入探討。
總之,這本書非常適合那些對操作系統有很強興趣的同學,讀後絕對受益匪淺。
推薦一個 github倉庫,上面放了上百本經典的嵌入式,計算機書籍,可以star一下,下次找書直接在上面搜索就可以了:
github 書籍寶藏倉庫
gitee 書籍寶藏倉庫
計算機組成原理
《程序是怎樣跑起來的》
計算機的本質本沒有那麼複雜,都被專家教授的一大堆外星語搞得沒人想學。
這本書用人類可以理解的語言配合示例簡要的介紹了cpu,內存,硬盤,操作系統等基本概念,及他們是如何演變成現在這樣的。將一個概念講出來不難,但將一個概念給別人講懂了才難。
讀完這本書,印象最深的是它當中對於補碼的描述。 “將二進制數的各數位的數值全部取反,然後再將結果加1”,這種描述與我看過的教材很不一樣。
我看過的教材都是説“除第一位的其他位取反”,這促使我上網進一步瞭解了一下,才終於明白了為什麼當初我老是記不明白補碼的計算方法。。。因為原本教材給出的方法就是很不自然且很生硬的做法。。。。
《編碼-隱匿在計算機軟硬件背後的語言》
作為電子專業的學生,看到這本書覺得很親切,電路+數電+微機原理的科普版本。裏面涉及了模擬電路,數字電路,組成原理,彙編語言,操作系統,高級編程語言等計算機專業課程。特別偏重模擬電路和數字電路。
如果在我大二的時候看到這本書,我的數電、計算機原理乃至整個大學生涯的理科知識結構都會有翻天覆地的變化。
作者用豐富的想象和清晰的筆墨將看似繁雜的理論闡述得通俗易懂,你絲毫不會感到枯燥和生硬。更重要的是,你會因此而獲得對計算機工作原理較深刻的理解。這種理解不是抽象層面上的,而是具有一定深度的。 深入淺出!從邏輯門到操作系統!
《深入理解計算機系統》
CSAPP yyds,被譽為計算機科學中的聖經。學習這本書,一定要做一下官方的實驗課,如果只看書,大概能學到四成,看書+ 做lab 才可能學到七八成。
所以大家一定要去完成lab,而且這些lab都是非常有趣的,比如拆炸彈、緩衝區溢出攻擊、代理服務器等。
lab鏈接:http://csapp.cs.cmu.edu/3e/la...
視頻教程:https://www.bilibili.com/vide...
看完你會對計算機底層機制有一個overview式的理解,清楚地知道一個"hello world"程序從編寫,編譯,鏈接,最後實際運行的全過程。
作者在開篇提到,"如果你全心投身學習本書中的概念,完全理解底層計算機系統以及它對應用程序的理解,你會步上成為為數不多的大牛之路"。
沒錯,是"步上","逐漸成為"大牛。CSAPP是一本很基礎的書,糅合了計算機組成原理,操作系統,體系結構,網絡編程,並行程序設計原理等課程的基礎知識。
除第一章外,每一章甚至是一小節都可以擴展成一本書來講授。對於剛接觸編程,或者像我這種非CS專業出身的人來説,這是一本方向性的書,它會告訴你,要想成為一個優秀的程序員,你應當重點理解哪些計算機底層原理,告訴你應該在以後的自學過程中,應該重點學習哪些課程。
不瞭解底層,永遠不可能寫出好的C程序,也不可能寫出高效的程序。計算機沒有那麼智能,不會思考,只會按照數字邏輯模式去判斷問題,這就需要程序員對計算機原理有一定了解。
計算機網絡
《網絡是怎樣連接的》
將一個又大又硬的核桃 砸破,掰開,揉碎,餵給你吃,夫復何求?讀起來真的十分暢快,少有些晦澀的字詞句需要反覆咀嚼,多的是基本簡單易懂的解釋和説明。
開局就給出整本書的整體建築架構,章章開頭分析咱到第幾層了,還有幾層,又點明幾個重點,段落間還有些小總結,重要的是插圖做的太好了,抽象變具體圖起到了極大的作用。讀着能讓我覺得有種自己學到了,賺到了的感覺,真的棒。
《計算機網絡:自頂向下方法》
一本很適合自學的書,講解細緻而富有條理,同時略去了很多細枝末節的信息,從而不至於讓初學者無所適從。可以説是學計算機網絡最好的圖書,沒有之一。
無論是對每一層的解釋,還是整個計算機網絡的總體描述都通俗易懂由淺入深,第七版還更新了sdn等比較新的內容與時俱進,唯一的缺點就是翻譯在一些地方不夠認真,有能力還是看原版比較好。
《TCP/IP 詳解》
計算機網絡入門書籍,全面度還是不錯的,雖然舉例上有點老。想對網絡協議有較全面瞭解的可以一看,但卷一關注的是協議部分。
推薦一個 github倉庫,上面放了上百本經典的嵌入式,計算機書籍,可以star一下,下次找書直接在上面搜索就可以了:
github 書籍寶藏倉庫
gitee 書籍寶藏倉庫
Linux環境
《鳥哥的LINUX私房菜》
最好的中文Linux入門書,案頭必備的工具書,內容很全,基本想知道的都可以在裏面找到,適合當作工具書來查閲,不適合通讀。
《UNIX環境高級編程》
百科全書式的書籍,思路清晰,藉着一圈兒介紹各種系統調用的過程,基本上就順帶把每個 api 後面的實現大概也都講了。
翻譯有些生澀。建議先快速通覽,然後用到時再細細翻看所需章節。
《UNIX網絡編程》
unix網絡編程的寶典,這是一本很厚的書(800頁),但是如果學完這本書就以為精通網絡編程的話,那就錯了。
網絡編程水很深,學完這本書只是個開始。 我個人覺得很多章節不用細看,大致瞭解就行,遇到的時候有能有映像,然後翻出來再詳細看看,當手冊用。
《Linux命令行與Shell腳本編程大全》
嵌入式開發中,shell腳本偶爾也會用到。這本書既有基礎又有進階。日常工作中很難系統性學習,通過這本書可以查缺補漏。
有些腳本用shell寫估計比Python會快一些,前提是對shell要足夠熟悉!總的來講這本書還是不錯的!
Linux驅動
《Linux設備驅動開發詳解》
這本書當作驅動開發的入門書籍不錯。特別是裏面講的device tree以及platform bus部分,解釋了之前的一些疑惑。
整體而言這本書尚可,挺實用,可以作為入門,但不適合深入學習。
《Linux設備驅動程序》
對於寫Linux驅動的人來説, 這本書應該是教科書級別的!經典的書籍就是一時半會看不懂,建議大家實踐之後再回過頭來看一看。
雖然現在的linux設備驅動的接口和作者寫書時的差別已經很大了,但是其中的主要框架基本沒有什麼變化。
可以根據自己的興趣去閲讀一個完整的驅動,再通過驅動模型的視角去理解一個驅動如何在模型中表現,就可以把整個驅動的框架了然於心了。剩下的就是去熟悉特定類型驅動的特點和對應接口了。
Linux內核
《Linux內核完全剖析-基於0.12內核》
首先膜拜一下趙博士,通過這本書能感受到他鑽研的態度和無私分享成果的肚量。
如果想了解一個操作系統的實現過程,那麼這本書就是你的最佳選擇,它選擇Linux 0.12內核講解了整個內核代碼,一個簡單的操作系統就是這樣子的!
強烈建議所有欲深究系統編程的同學們通讀一遍,一方面對x86系統會有一個比較深刻的理解,另一方面對提高閲讀代碼能力也有很大的幫助 。
《Linux內核設計與實現》
這本書對於想玩Linux內核開發的人來説,算得上是入門寶典了。基本上涵蓋了Linux內核開發需要的知識,雖然有些地方寫得不夠深入,但我現在每讀一次都有新的理解和收穫。
《深入理解LINUX內核》
經典無需多言!內核設計裏有不少精妙絕倫的設計值得學習和揣摩!
這本書主要內容包括進程管理,內存管理,虛擬文件系統,設備驅動等。讀完這本書,對Linux中斷的硬件原理,進程調度類型時間片原理,內存缺頁中斷處理流程這三部分技術內容領悟更加深刻。
唯一的缺點就是翻譯的有點生硬, 建議與英文原版對照一起閲讀。
《深入Linux內核架構》
講的很細緻,基於 2.6 的源碼來講解,但是幾乎所有東西在 5.0 裏依然是適用的。此書要和《深入理解內核》結合起來看,簡直完美極了。
《Linux內核源代碼情景分析》
基於場景跟着作者去閲讀內核源碼,學習效果還是很好的。作者對各個核心的功能從入口到出口一步步詳細的解釋,將各個函數根據功能串聯起來,形成一條條清晰的主線,形成一個有機的整體。
書本雖然很厚,閲讀起來非常暢快,跟看小説一樣。書本也不止是剖析代碼,而是先把概念講的很清楚。不必在乎它的源碼版本老舊,核心的框架還是一樣的。
這本書對相關細節的描述非常清楚,缺點就是在一堆又一堆代碼中穿梭找不到森林,很容易迷失掉自我。就好像是用source insight跟蹤函數一樣,懶得讀源代碼的朋友,可以先讀讀這本。
。。。。未完待續,後續會整體得更完善,更加成體系。
我整理的這些書大家可以在這裏免費白嫖,都是嵌入式領域的經典書籍,從入門到深入理解,整理全了!
推薦一個 github倉庫,上面放了上百本經典的嵌入式,計算機書籍,可以star一下,下次找書直接在上面搜索就可以了:
github 書籍寶藏倉庫
gitee 書籍寶藏倉庫