A. 求研究linux內核的好方法
學習和研究Linux內核是一個非常艱苦的工程,一定要有耐心。推薦幾本Linux內核的書籍,《深入理解Linux內核》這本是linux內核編程的,要是想做驅動,就選《Linux設備驅動》,如果你是搞UNIX/Linux環境下的應用程序編程,那麼就看《UNIX環境高級編程》。
B. 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設備等驅動開發,在工作中能獨立勝任底層驅動開發。
C. 關於LINUX內核
如果你現在以學習的態度來扎實的看,我推薦一本於淵的《自己動手寫操作系統》,他參照了Minix代碼,從最小MBR動手構建操作系統,徹底分析從實模式到保護模式,內存模型,進程等基礎概念。最難能可貴的事情,他會非常細膩的劃分出模塊,一個一個用代碼實現,極大提高你的動手能力。
如果你能花費兩個月時間通讀多遍,然後在從Linux0.11內核開始入手,事情將會事半功倍。直接進入2.4以後的內核,對新人實在不利,收效甚微。
直至你對模塊大概情形掌握以後,再去研究<Understanding Linux kernel>, <Linux Device Driver>這樣的大作,一切水到渠成。
但是這是需要消耗極大的時間和精力,操作系統的方方面面自然無法掌握,你可能找到一個切入點來深入。即便Linus本人也非全才的。
D. Linux 內核學習的經典書籍及途徑
在這里說說我自己的經驗,可以先看Unix內核相關的書籍,了解內核的經典實現方法,然後再結合源碼去研究Linux內核。這樣做的原因是避免從一開始就陷入細節
不過在學習這些之前,還是要先把C語言學好,畢竟C語言是一切的基礎
E. linux內核是偏底層嗎
Linux可以說是近期非常火的了,有的人想學習linux內核,那他到底是什麼呢?
Linux內核是一個操作系統(OS)內核,本質上定義為類Unix。它用於不同的操作系統,主要是以不同的Linux發行版的形式。Linux內核是第一個真正完整且突出的免費和開源軟體示例。Linux 內核是第一個真正完整且突出的免費和開源軟體示例,促使其廣泛採用並得到了數千名開發人員的貢獻。
Linux 內核由芬蘭赫爾辛基大學的學生 Linus Torvalds 於 1991 年創建。隨著程序員調整其他自由軟體項目的源代碼以擴展內核的功能,它迅速取得了進展。Torvalds 首先使用 80386 匯編語言編寫的任務切換器以及終端驅動程序,然後將其發布到 comp.os.minix Usenet 組。它很快被 MINIX 社區所改編,為該項目提供了見解和代碼。
Linux 內核越來越受歡迎,因為 GNU 自己的內核 GNU Hurd 不可用且不完整,而 Berkeley Software DistribuTIon(BSD)操作系統仍然受到法律問題的困擾。在開發人員社區的幫助下,Linux 0.01 於 1991 年 9 月 17 日發布。
二、linux內核學習路線
很多同學接觸Linux不多,對Linux平台的開發更是一無所知。而現在的趨勢越來越表明,作為一 個優秀的軟體開發人員,或計算機IT行業從業人員,掌握Linux是一種很重要的謀生資源與手段。下來我將會結合自己的幾年的個人開發經驗,及對 Linux,更是類UNIX系統,及開源軟體文化,談談Linux的學習方法與學習中應該注意的一些事。
就如同剛才說的,很多同學以前可能連Linux是什麼都不知道,對UNIX更是一無所知。所以我們從最基礎的講起,對於Linux及UNIX的歷史我們不做多談,直接進入入門的學習。
Linux入門是很簡單的,問題是你是否有耐心,是否愛折騰,是否不排斥重裝一類的大修。沒折騰可以說是學不好Linux的,鳥哥說過,要真正了解Linux的分區機制,對LVM使用相當熟練,沒有20次以上的Linux裝機經驗是積累不起來的,所以一定不要怕折騰。
三、學習linux內核的建議
學習linux內核,這個可不像學一門語言,c或者java一個月或者3月你就能精通掌握。學習linux內核是需要一步一步循序漸進,掌握正確的linux內核學習路線對學習至關重要,本篇文章就來分享學習linux內核的一些建議吧。
了解操作系統基本概念。如果不會,可以學習《操作系統:設計與實現》Andrew S.Tanenbaum 寫的那本。以MINIX為例子講解操作系統的概念。非常推薦。
有了操作系統的基本概念以後,可以了解Linux的機制了。推薦《Linux內核設計與實現》Robert Love 寫的。這本書從概念上講解了Linux有什麼,他們是怎麼運行的。這本書要反復認真看透。
有了Linux內核的了解,還需要具體研究Linux內核源碼。經典的就是《深入理解Linux內核》Daniel P. Bovet 寫的。學習這本書的時候,要對著內核代碼看著學。這本書學起來相當費力了,那麼多多代碼要研究。不過這本書如果學明白了,恭喜你,Linux內核你已經很熟悉了。
如果要開發設備驅動,可以學習《linux設備驅動程序》O『Reilly出版社的。這本作為驅動的入門是很好的資料。另外還有一本《精通Linux 驅動程序開發》也是不錯的教材,可以參考著看。學習驅動,免不了要學習一些硬體的協議和資料,研究哪個就找到相應的硬體文檔,把硬體的工作原理搞明白。這些就不細說了。
網路部分,學些Linux網路部分就學習《深入理解LINUX網路技術內幕》。這本書把Linux的網路部分講的非常清晰透徹。但是通常不做這方面的工作研究,也不用研究這么深,畢竟現在相關職位較少。
現在Linux相關的工作,多集中在一些嵌入式開發領域,arm,mips等,要學習以下這些體系架構的的資料,了解CPU的設計和工作方式。ARM就看對應的晶元手冊,講的很細致。MIPS就看 《see mips run》,有一二兩版,兩版內容有些差異,推薦都看。
補充一點經驗。不要認為Linux很龐大,很復雜,就覺的很難學。任何東西認真學下來都是能學會的,看你都恆心和毅力了。另外,不要走彎路,不要看市面上講什麼Linux0.11的那些書,直接學你要學的東西。就像學C語言看什麼譚浩強一樣,彎路走了,力氣沒少花,還嚴重影響學習效果。
F. 如何才能學好linux
來自網路經驗針對如何才能學好linux的網路資料
目前比較學習Linux系統比較火的論壇
談談如何學習Linux操作系統,來自51cto網路資料,參考資料http://ixdba.blog.51cto.com/2895551/569329
真正想學好linux系統,還是要研究linux內核源碼。
為什麼這么說呢?
無論是使用linux裡面的一些命令,還是做linux應用層的開發,其實都是在使用linux內核的功能,但是其實你對linux底層的機制並不了解。長遠來看,其實對你技術的提升不大。
比如:
1. 你天天使用linux里的docker命令,那你知道docker是如何做到這種隔離性的嗎?
2. 你寫linux應用程序,會看到入口是main()函數。那麼,問題來了,為什麼是main()呢?為什麼不是hello()、不是fuck(),不是love()呢?
3. 你寫linux應用程序,也會用write()函數。這個write函數,我們代碼里並沒有實現它,那是誰實現了它?是c庫嗎?有可能。但是如果我是寫磁碟呢?c庫能做到嗎?
顯然不能!還是需要linux內核的功能。
4. 我們知道,在linux里,不同的應用程序可以共享一個動態鏈接庫,這又是怎麼做到的?不是說進程是隔離的嗎?為什麼對動態鏈接庫就不做隔離了?
5. linux應用層調用malloc是直接調用到內核嗎?
很顯然不是! c庫里也有內存管理,c庫里的內存管理單元會向內核批發內存(以page為單位),然後向應用程序零售內存(更小的粒度,可以是int大小,char大小等)
6. linux里進程和線程的共同點和差別究竟是什麼?不要拿教科書里那一套來說教,從代碼里得到的才是真知。
....
問題太多了,難道你不好奇嗎?
如果你不好奇,那很顯然你不太適合做技術,在技術這條路上可能走不遠,應該早日轉行;如果你很好奇,那就從現在開始,研究linux內核吧。
對於這個問題作為一個在linux下開發代碼十幾年的人,忍不住說幾句
任何一門技能的學習,想要學精學透,都要付出巨大的努力,尤其是一些專業性比較強的技能,更需要持之以恆長期不斷的投入大量的精力去學習和實踐,比如linux的學習,就是一門專業性非常強的技能,如何能學好這項技能。
如何才能學好那?
思想上的重視首先要明白自己為什麼要學習linux,學習linux能給自己帶來什麼,也就是說要知道學好linux對自己的重要性。當從思想上認識到一件事對自己的重要性有多大的時候,就會投入多大的精力去做這件事。
行動上的具體
有了思想上的重視,下面就需要具體的行動
(1)從基礎知識學習,打好基本功;任何一門新知識的學習,都要了解它的一些基本內容,基本概念等等,這樣就需要找一本介紹linux的專業書籍,先大致了解一下linux的相關內容,不至於後期學習linux的時候,連一些最基本的專業名稱都搞不懂。
(2)勤學多練,多多思考;linux是一門實用性非常強的技術,基礎理論的學習就是為了應用的更好實現,應用的實現反過來也會使理論的知識更加鞏固;找一套功能比較齊全的開發板,在開發板上實現各種功能,不斷地去實踐,帶著問題去尋找答案,當看著自己設計的功能在開發板上實現,會樂此不彼。
總之,學好 Linux 絕非一朝一夕之事,時間、知識的積累是必不可少的
Linux是一個很大的概念,建議先從簡單的入手,結合你的興趣、工作內容,在某一方面深挖,來張圖介紹Linux的學習升級。
初學入門Linux的話,可以先安裝一個桌面版的Linux虛擬機(Ubuntu、CentOS7等都行),以熟悉常用命令為主,待基本掌握環境後,可以研究一下 內核源碼 及 常用伺服器的搭建,加深理解和應用,下面我簡單介紹一下Linux的學習過程,感興趣的朋友可以嘗試一下:
01 安裝Linux這里建議安裝一個桌面版的Linux虛擬機(Ubuntu、CentOS7等發行版本都行),初學入門的話,如果對Linux完全不熟悉,安裝迷你版會非常不適應,許多功能和包都需要自己適配下載,可以先使用桌面版,不至於完全手足無措,後期熟悉環境後,可以使用無界面版,操作起來也會非常容易:
02 入門Linux
Linux虛擬機安裝好後,就是Linux基礎入門,這里網上教程和資料非常多,像慕課網、菜鳥教程、B站等都有大量優質視頻和文檔,當然,你也可以找一本專業的Linux書籍,一邊學習一邊練習,《 鳥哥的私房菜 》就非常不錯,覆蓋面比較廣,講解的也非常細致,常見的基礎命令和配置等都要熟悉掌握,這些是使用Linux的基礎:
03 深入Linux
Linux基礎熟悉後,就是深入Linux的過程,這里可以學習和研究的東西就非常多了,基礎的Linux應用,包括伺服器搭建、嵌入式開發等,都有非常光明的前景,當然,你也可以研究一下Linux內核,包括內存管理、進程管理、文件系統、驅動等,對於深入理解操作系統來說,可以說是大有裨益:
Linux畢竟只是個操作系統,只要掌握了正確的學習方法,不會有多難。今天咱們就好好看看,Linux到底怎麼學才是正確的學習方法。轉自——馬哥linux運維
一、從命令開始從基礎開始
常常有些朋友一接觸Linux 就是希望構架網站,根本沒有想到要先了解一下Linux 的基礎。這是相當困難的。雖然Linux桌面應用發展很快,但是命令在Linux中依然有很強的生命力。Linux是一個命令行組成的操作系統,精髓在命令行,無論圖形界面發展到什麼水平這個原理是不會變的,Linux命令有許多強大的功能:從簡單的磁碟操作、文件存取、到進行復雜的多媒體圖象和流媒體文件的製作。這里筆者把它們中比較重要的和使用頻率最多的命令,按照它們在系統中的作用分成幾個部分介紹給大家,通過這些基礎命令的學習我們可以進一步理解 Linux系統:
安裝和登錄命令:login、 shutdown、 halt、 reboot 、mount、umount 、chsh
文件處理命令:file、 mkdir、 grep、dd、 find、 mv 、ls 、diff、 cat、 ln
系統管理相關命令: df、 top、 free、 quota 、at、 lp、 adser、 groupadd kill、 crontab、 tar、 unzip、 gunzip 、last
網路操作命令:ifconfig、 ip 、ping 、 netstat 、telnet、 ftp、 route、 rlogin rcp 、finger 、mail 、nslookup
系統安全相關命令: passwd 、su、 umask 、chgrp、 chmod、chown、chattr、sudo、 pswho
二、選擇一本好的Linux書籍
在各個Linux論壇中,我們看到最多的問題往往是某個新手,在安裝或使用linux的過程中遇到一個具體的問題就開始提問,很多都是重復性的問題,甚至有不少人連基本的問題描述都不是很清楚。這說明很多初學linux的人還沒有掌握基本功。怎樣才能快速提高掌握linux的基本功呢? 最有效的方法莫過於學習權威的linux工具書,工具書對於學習者而言是相當重要的。一本錯誤觀念的工具書卻會讓新手整個誤入歧途。目前國內關於 linux的書籍有很多不過精品的不多,筆者強烈建議閱讀《鳥哥的Linux私房菜 基礎篇》,現在出到了第三版。新手最好能夠買一本紙版書來仔細研讀,並認真做好學習筆記。當然,如果習慣看電子書,也可以從這里 下載 PDF電子書。
三 、養成在命令行下工作的習慣
一定要養成在命令行下工作的習慣,要知道X-window只是運行在命令行模式下的一個應用程序。在命令行下學習雖然一開始進度較慢,但是熟悉後,您未來的學習之路將是以指數增加的方式增長的。從網管員來說,命令行實際上就是規則,它總是有效的,同時也是靈活的。即使是通過一條緩慢的數據機線路,它也能操縱幾千公里以外地遠程系統。
四、用Unix思維思考Linux
由於Linux是參照Unix的思想來設計的,理解和掌握它就必須以Unix的思維來進行,而不能以Windows思維。不可否認,windows 在市場上的成功很大一部分在於技術思想的獨到之處。可是這個創新是在面對個人用戶的前提下進行的,而面對著企業級的服務應用,它還是有些力不從心。多年來在計算機操作系統領域一直是二者獨大:unix在伺服器領域,Windows在個人用戶領域。由此可見,用戶需求決定了所採用的操作系統。不管什麼原因,如果要學習Linux,那麼首先要將思維從Windows的「這個小河」 中拖出來,放入Unix的海洋。
五、學習shell
對於Shell(中文名稱殼),習慣Windows的讀者肯定是非常陌生的,因為Windows只有一個「Shell」(如果可以說是Shell的話),那就是Windows自己。用一句話容易理解的解釋就是,shell是用戶輸入命令與系統解釋命令之間的中介。最直觀的說法,一種Shell有一套自己的命令。舉一個容易理解的例子,Linux的標准Shel是Bash Shel;Solaris的shell是B shell;Linux的Shell是以命令行的方式表現出來的。讀者可能會不理解,Windows從命令行「進化」到了圖形界面,那麼Linux現在還使用命令行豈不是一種倒退?
當初我剛剛接觸Linux時就曾有過這種想法。可是後來發現,如果使用圖形界面,那麼分配給應用軟體的資源就少了,在價格昂貴的伺服器上,能夠以較低的硬體配置實現同樣的功能是非常重要的。
下面舉例說明,一台伺服器有1GB內存,假設其中512MB用於處理圖形界面,若要安裝一個需要784MB內存的資料庫軟體,惟一的辦法就是擴大內存。但是如果使用命令行,系統可能只需要64MB內存,其它的內存就可以供資料庫軟體使用了。使用命令行,不僅是內存,而且CPU及硬碟等資源的佔用都要節省很多。所以,作為伺服器使用命令行是優點而不是缺點。既然Shell有這么多優點,就必須要學習它。
簡單來說就是:興趣,堅持,方法。
興趣第一對於任何事情,興趣在很大程度上會影響你做這件事的結果。去做一件自己很感興趣的事情,和做一件自己本來毫無興趣卻由於某種原因而不得不做的事情,其結果往往是天地之別。究其緣由,無非是對於自己感興趣的事情,是以一種享受其中樂趣的心態去做,在不自覺中就會投入更多的心思在上面,也會更加專注,更容易一直堅持下去。而對於毫無興趣的事情,往往是迫於某種壓力才不得不做,心裡或多或少會有一定排斥拒絕,甚至會有煎熬的感覺,其結果也可想而知。
對於程序開發,也是一樣的。工作中,同樣是程序員,卻經常會有兩種不同的人。一種對程序開發真的是很感興趣,一天不寫代碼不看代碼就如坐針氈,感覺這一天總缺少點什麼,往往這種人才能成為技術人口中的大神。另外一種人,則是相反,看代碼寫代碼完全是因為完成任務而不得不做,處理問題時能靠嘴忽悠過去的,絕不會看一眼代碼,所以這種人往往技術平庸。當然,這只是從技術角度說,如果單純看收入的話,第一種人卻不見得比第二種人收入高。
所以,首先要確定自己是否對程序開發感興趣,如果沒有興趣,那就自然不必繼續下去了,完全可以換一個職業選擇。然後再選擇一個自己最感興趣的方向,如內核開發,驅動開發,應用開發等等,選定方向後由淺入深,循序漸進。
持之以恆在互聯網迅猛發展的今天,我們處在一個知識迅速爆發和更新更新時代,每一天都有各種各樣的新事物層出不窮,當然也會伴隨著各種老的舊的東西消失。計算機技術更是如此,從編程語言到開發工具,從設計模式到系統框架,每一天每個領域都會有新的技術出現,從也會有舊的技術被淘汰被丟棄被遺忘。
這就意味著,從成為程序員的那一天開始,就不可能停止學習的腳步,不得不面對各種技術的更新換代,因此,必須要持續學習,及時更新自己的知識結構,以適應各種業務需求的變化,否則,可能就不得不面對被淘汰的結果。
找到適合自己的學習方法就像看電影一樣,同一部電影,有的人覺得精彩,有的人覺得無趣。每個人的習慣、個性、思維、背景、基礎不同,學習的方法也不同,沒有什麼放之皆準的方法,適合自己的才是最好的。
對於入門,找到一本自己能看得懂適合自己的書。很多別人推薦的堪稱聖經的經典書籍,不妨嘗試一下,看自己是否能夠很容易的理解和消化。如果實在看不懂,果斷換一本,切忌過於勉強。剛入門時,如果長時間處於一種雲里霧里的感覺,往往會對自己信心造成打擊,繼而一點點消耗掉繼續學下去的興趣。很多聖經級的書籍往往適合在有一定基礎之後再細細品讀的,卻並非入門首選。
入門之後就是逐步深入了。一般來說,在實際項目中進行學習是效果最好的。做項目過程中往往能夠鞏固已經學到的技能,同時發現自己的知識盲點,進而消滅盲點。
此外,多讀代碼,多寫代碼。
最後的最後, 珍惜你現在的每一根頭發。
linux系列有兩種發行版本
1).Red
Hat系,包括RHEL、fedora、centos等
2).Debian系,包括Debian、Ubuntu、Mint等
想要學習的話如果個人學習,推薦使用Ubuntu。如果是工作的話,則使用centos學習
1.學習Linux,首先就是安裝Linux系統,通過鏡像安裝,這個過程可以先大概的了解一下linux的啟動過程,對一些概念有個大致的印象
2.在安裝好的系統之上,學習一些基本命令的操作,比如ls . 列出當前文件夾下的子文件和子目錄,cd /root 切換到root的目錄下,top命令查看一些進程的cpu,內存等資源的使用情況,ps命令同樣也可以查看進程的內存等資源使用情況,pwd查看當前所在的路徑等等,將這一些命令熟練的掌握
3.在掌握了linux的一些基本命令之後,那麼可以進行一些服務的安裝搭建練習,比如在Linux下安裝搭建DNS伺服器,搭建nginx伺服器等等
4.進階階段的話,可以嘗試進行內核參數的調優,比如tcp關閉連接之後保持高速通道,擴大linux系統的最大句柄打開數之類的內核參數的優化,sysctl -a可以查看目前已經載入的內核參數
5.學會了造句子,那麼之後就可以寫作文了。同理學會了linux的命令之後,那麼可以學習一下shell的基本語句,awk sed的學習,用shell實現一些特定功能的腳本,比如可以通過cat /proc/cpuinfo加上awk命令來實現對cpu相關信息的統計等
如果你在Linux上是一個小白請看下面的回答~
想學好Linux,先問自己幾個問題。
1. 你對計算機感興趣嗎?
2. 為什麼學習Linux(他能給你帶來什麼價值,這個價值點是否可以支持你一直堅持下去)
3.你每天可以在工作生活之餘或者大學課余抽出多少時間去學習(任何的技能都是需要時間去練習+時間才能掌握的)
如果這三個問題的答案都是肯定的,那麼請看下文:
我也是一個從0技術基礎的小白開始學習的
推薦你一個教程:【菜鳥教程】
http://www.runoob.com/linux/linux-tutorial.html
一定要有耐心、有恆心的堅持學完,這樣你對Linux才能有一定的理解
學習的中間需要您自己不斷的實操,自己去敲命令,去安裝,去驗證
G. 介紹Linux內核的書求推薦
第一:《Linux內核設計與實現》
簡稱LKD,從入門開始,介紹了諸如進程管理、系統調用、中斷和中斷處理程序、內核同步、時間管理、內存管理、地址空間、調試技術等方面,內容比較淺顯易懂,個人認為是內核新人首先必讀的書籍。新人得有此書,足矣!
第二:《深入理解Linux內核》
簡稱ULK,相比於LKD的內容不夠深入、覆蓋面不廣,ULK要深入全面得多。
前面這兩本,一本提綱挈領,一本全面深入。
第三:《Linux設備驅動程序》
簡稱LDD,驅動開發者都要人手一本了。
第四:《深入理解Linux虛擬內存管理》
簡稱LVMM,是一本介紹Linux虛擬內存管理機制的書。如果你希望深入的研究Linux的內存管理子系統,仔細的研讀這本書無疑是最好的選擇。
第五:《深入理解LINUX網路內幕》
一本講解網路子系統實現的書,通過這本書,我們可以了解到Linux內核是如何實現復雜的網路功能的。
了解更多開源相關,去LUPA社區看看吧。
H. Linux內核應該怎麼去學習
1.首先要了解為什麼要學習內核?下圖已表明,如果要從事驅動開發或系統研究,就要學習內核。
2.內核的知識就像下面的繩結一樣,一環扣一環,我們要解開它們,就必須要先找到線頭也就是內核中的函數介面。初學階段,我們一般不深入的研究內核代碼,會使用內核的介面函數就不錯了。
3.下面提供了如何學習這些內核函數的方法,就像解繩子一樣
4.學習內核的四步法則,思維導圖的設計尤為重要,這也是能否學習好內核的關鍵
5.語言基礎也需要扎實,所以需要把C語言鞏固鞏固
I. 怎麼學習linux
給你一個嵌入式Linux操作系統學習規劃吧
希望對你有所幫助
ARM+LINUX路線,主攻嵌入式Linux操作系統及其上應用軟體開發目標:
(1) 掌握主流嵌入式微處理器的結構與原理(初步定為arm9)
(2) 必須掌握一個嵌入式操作系統 (初步定為uclinux或linux,版本待定)
(3) 必須熟悉嵌入式軟體開發流程並至少做一個嵌入式軟體項目。
從事嵌入式軟體開發的好處是:
(1)目前國內外這方面的人都很稀缺。這一領域入門門檻較高,所以非專業IT人員很難切入這一領域;另一方面,是因為這一領域較新,目前發展太快,大多數人無條件接觸。
(2)與企業計算等應用軟體不同,嵌入式領域人才的工作強度通常低一些(但收入不低)。
(3)哪天若想創業,搞自已的產品,嵌入式不像應用軟體那樣容易被盜版。硬體設計一般都是請其它公司給訂做(這叫「貼牌」:OEM),都是通用的硬體,我們只管設計軟體就變成自己的產品了。
(4)興趣所在,這是最主要的。
從事嵌入式軟體開發的缺點是:
(1)入門起點較高,所用到的技術往往都有一定難度,若軟硬體基礎不好,特別是操作系統級軟體功底不深,則可能不適於此行。
(2)這方面的企業數量要遠少於企業計算類企業。
(3)有少數公司經常要碩士以上的人搞嵌入式,主要是基於嵌入式的難度。但大多數公司也並無此要求,只要有經驗即可。
(4)平台依託強,換平台比較辛苦。
興趣的由來:
1、成功觀念不同,不虛度此生,就是我的成功。
2、喜歡思考,挑戰邏輯思維。
3、喜歡C
C是一種能發揮思維極限的語言。關於C的精神的一些方面可以被概述成短句如下:
相信程序員。
不要阻止程序員做那些需要去做的。
保持語言短小精幹。
一種方法做一個操作。
使得它運行的夠快,盡管它並不能保證將是可移植的。
4、喜歡底層開發,討厭vb類開發工具(並不是說vb不好)。
5、發展前景好,適合創業,不想自己要死了的時候還是一個工程師。
方法步驟:
1、基礎知識:
目的:能看懂硬體工作原理,但重點在嵌入式軟體,特別是操作系統級軟體,那將是我的優勢。
科目:數字電路、計算機組成原理、嵌入式微處理器結構。
匯編語言、C/C++、編譯原理、離散數學。
數據結構和演算法、操作系統、軟體工程、網路、資料庫。
方法:雖科目眾多,但都是較簡單的基礎,且大部分已掌握。不一定全學,可根據需要選修。
主攻書籍:the c++ programming language(一直沒時間讀)、數據結構-C2。
2、學習linux:
目的:深入掌握linux系統。
方法:使用linux—〉linxu系統編程開發—〉驅動開發和分析linux內核。先看深,那主講原理。看幾遍後,看情景分析,對照深看,兩本交叉,深是綱,情是目。剖析則是0.11版,適合學習。最後深入代碼。
主攻書籍:linux內核完全剖析、unix環境高級編程、深入理解linux內核、情景分析和源代。
3、學習嵌入式linux:
目的:掌握嵌入式處理器其及系統。
方法:(1)嵌入式微處理器結構與應用:直接arm原理及匯編即可,不要重復x86。
(2)嵌入式操作系統類:ucOS/II簡單,開源,可供入門。而後深入研究uClinux。
(3)必須有塊開發板(arm9以上),有條件可參加培訓(進步快,能認識些朋友)。
主攻書籍:毛德操的《嵌入式系統》及其他arm9手冊與arm匯編指令等。
4、深入學習:
A、數字圖像壓縮技術:主要是應掌握MPEG、mp3等編解碼演算法和技術。
B、通信協議及編程技術:TCP/IP協議、802.11,Bluetooth,GPRS、GSM、CDMA等。
2010-8-21 16:46 回復
122.90.173.* 2樓
C、網路與信息安全技術:如加密技術,數字證書CA等。
D、DSP技術:Digital Signal Process,DSP處理器通過硬體實現數字信號處理演算法。
說明:太多細節未說明,可根據實際情況調整。重點在於1、3,不必完全按照順序作。對於學習c++,理由是c++不只是一種語言,一種工具,她還是一種藝術,一種文化,一種哲學理念、但不是拿來炫耀得東西。對於linux內核,學習編程,讀一些優秀代碼也是有必要的。
注意: 要學會舉一反多,有強大的基礎,很多東西簡單看看就能會。想成為合格的程序員,前提是必須熟練至少一種編程語言,並具有良好的邏輯思維。一定要理論結合實踐。
不要一味鑽研技術,雖然擠出時間是很難做到的,但還是要留點餘地去完善其他的愛好,比如宇宙,素描、機械、管理,心理學、游戲、科幻電影。還有一些不願意做但必須要做的!
技術是通過編程編程在編程編出來的。永遠不要夢想一步登天,不要做浮躁的人,不要覺得路途漫上。而是要編程編程在編程,完了在編程,在編程!等機會來了在創業(不要相信有奇跡發生,盲目創業很難成功,即便成功了發展空間也不一定很大)。
嵌入式書籍推薦
Linux基礎
1、《Linux與Unix Shell 編程指南》 《linux就該這么學》《鳥哥的Linux私房菜》
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)
5、《Linux高級程序設計》 楊宗德著
硬體基礎
1、《ARM體系結構與編程》杜春雷著
2、S3C2410 Datasheet
英語基礎
1、《計算機與通信專業英語》
系統教程
1、《嵌入式系統――體系結構、編程與設計》
2、《嵌入式系統――採用公開源代碼和StrongARM/Xscale處理器》毛德操 胡希明著
3、《Building Embedded Linux Systems》
4、《嵌入式ARM系統原理與實例開發》 楊宗德著
理論基礎
1、《演算法導論》
2、《數據結構(C語言版)》
3、《計算機組織與體系結構?性能分析》
4、《深入理解計算機系統》【美】Randal E. Bryant David O''Hallaron著
5、《操作系統:精髓與設計原理》
6、《編譯原理》
7、《數據通信與計算機網路》
8、《數據壓縮原理與應用》
C語言書籍推薦
1. The C programming language 《C程序設計語言》
2. Pointers on C 《C和指針》
3. C traps and pitfalls 《C陷阱與缺陷》
4. Expert C Lanuage 《專家C編程》
5. Writing Clean Code -----Microsoft Techiniques for Developing Bug-free C Programs
《編程精粹--Microsoft 編寫優質無錯C程序秘訣》
6. Programming Embedded Systems in C and C++ 《嵌入式系統編程》
7.《C語言嵌入式系統編程修煉》
8.《高質量C++/C編程指南》林銳
盡可能多的編碼,要學好C,不能只注重C本身。演算法,架構方式等都很重要。
這里很多書其實是推薦而已,不必太在意,關鍵還是基礎,才是重中之重!!!
J. 簡述Linux內核和Linux發行版的區別.DNY版
做伺服器運維工作,要經常和Linux的版本號打交道,但一直搞不明白Linux內核和Linux發行版到底是個啥東西。其實要理解Linux內核和Linux發行版之間的關系,只要能理解下面的關系就可以了:
1.類似於游戲引擎《虛幻4》和游戲《絕地求生》之間的關系。沒有虛幻4這款引擎,就沒有絕地求生的游戲,但是有了虛幻4這款引擎,可以開發各種各樣的游戲。
2.類似於汽車的核心三大件(發動機、變速箱、底盤)和寶馬汽車之間的關系。汽車最重要的東西就是發動機、變速箱、底盤,寶馬汽車和賓士汽車可能用的都是同樣的發動機,但是寶馬汽車和賓士汽車的外觀是完全不一樣的。
3.類似於電腦的核心硬體(CPU、內存、硬碟、主板、顯卡)和戴爾電腦之間的關系。不管是聯機的電腦,還是戴爾的電腦,CPU都是Intel或者AMD的。
4.類似於安卓系統和華為手機或者說和華為手機操作系統之間的關系。三星、華為、小米、Vivo這些手機的操作系統都是安卓的操作系統,除去手機硬體的外觀不說,在操作使用上就存在差異。並且同是華為的品牌,手機型號不同,使用的安卓的內核版本號也不相同。
簡單的說,內核就是內部的核心的東西,大家的內核都是一樣的,發行版對應的則是外部的東西,例如功能、特性、外觀、操作啊,大家的發行版都是不一樣的。
Linux內核是Linux操作系統創始人主持的網站www.kernel.org上發布的操作系統的最基本的那些東西。Linux發行版則是在前述那些東西的基礎上添加了一些工具、軟體,構成的一套龐大復雜的操作系統。雖然內核都是一樣的,但添加部分各不相同,這就構成了不同的發行版本。Linux本身指的是一個操作系統內核,只有內核是無法直接使用的。我們需要的是可以使用的操作系統,是一個包含了內核和一批有用的程序的一個集合體,這個就是Linux發行版。其中,Ubuntu、RedHat就是Linux的不同的發行版。
外延1:既然內核這么牛逼,那麼Linux的內核長啥樣兒,幹啥的?
參考1: https://www.cnblogs.com/yuanqiangfei/p/10225202.html
文中給出了Linux內核的整體架構。根據內核的核心功能,Linux內核提出了5個子系統,分別負責如下的功能:1. Process Scheler,也稱作進程管理、進程調度。2. Memory Manager,內存管理。3. VFS(Virtual File System),虛擬文件系統。4. Network,網路子系統。5. IPC(Inter-Process Communication),進程間通信。
到此打住,不再繼續研究Linux內核了,否則偏離了文章的主題,而且Linux內核這方面的知識也不是一兩天就能掌握的。
外延2:既然Linux有內核,那麼Windows有內核么?
參考2: https://www.cnblogs.com/skyer/p/8608113.html
Windows顯然也是有內核的說法的,只不過一個內核版本對應一個發行版本。說到這我真要吐槽一把Linux的版本問題,做伺服器運維,經常遇到因為Linux的版本不同,導致應用程序死活裝不上,庫文件版本號死活對不上,依賴包死活找不到......這些一提起來就讓人惡心的問題。
外延3:Linux內核版和發行版之間大致是怎麼一種聯系?
參考3: https://www.jianshu.com/p/f96880637e42
通過上面的解釋,當我們的頭腦里能區分出內核版和發行版的概念之後,再看兩者之間的關系,就很清晰了。
外延4:如何查看Linux內核版本號和發行版本號?
參考4: https://blog.csdn.net/haiziccc/article/details/90203967
查看操作系統版本一般有三個命令:
1. lsb_release -a,適用於所有Linux發行版
2. cat /etc/redhat-release,適用於Redhat
3. cat /etc/issue,適用於所有Linux發行版
查看系統內核版本一般有兩個命令:
1. cat /proc/version
2. uname -a