A. 如何自學linux下C語言嵌入式編程詳細點謝謝!書籍及開發板用什麼的最好
開發板用友善之臂的吧
mini2440 連3.5寸屏500塊錢的樣子
有好幾張DVD學習光碟
這款口碑比較高
嵌入式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 編程指南》
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本身。演算法,架構方式等都很重要。
這里很多書其實是推薦而已,不必太在意,關鍵還是基礎,才是重中之重!!!
B. 怎麼學習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本身。演算法,架構方式等都很重要。
這里很多書其實是推薦而已,不必太在意,關鍵還是基礎,才是重中之重!!!
C. linux內核模塊,怎麼編譯
我來說下吧 本身復你制這個問題問的有點歧義 不知道你問的是內核編譯 還是模塊編譯 兩個不是一個東西 盡管模塊載入後 也是內核的一部分 看看其他的回答 以為是單純的內核的編譯了 模塊本身在linux下面是可以分為靜態和動態載入的 要是採用靜態載入的話 就是從新編譯內核 和內核的編譯基本是一回事 但是多採用動態載入 這個也簡單點
從你的下面的模版可以看出 你是想寫驅動程序吧 驅動一般作為動態載入的就可以了 寫好你的c文件 格式和上面的差不多 然後GCC編譯 生成.o文件,不要生成可執行文件 ( 如果是玩Embedded 就下載到目標板了 minicom 的使用) 如果是就在linux機器上 直接執行 insmod lsmod rmmod 這些就好了 這里也是簡單的說下了 內核的編譯 寫驅動程序 本身就是個比較難得事情了 要個很長的時間去學習了 慢慢積累 好運
D. linux下的c/c++開發
我就是做LINUX下的C開發的。
准確的說,LINUX下C才是主要的開發語言,但是寫應用程序還是要用面向對象的,尤其是圖形界面的,不如QT和X和GTK等等。下面說的必須要求你C語言學的很好而且會使用LINUX的情況下。LINUX常用命令要熟悉。
要學LINUX下的C編程,先看一兩本LINUX下C的書比較好,這個你自己選擇,但是經典的書還是好一些,比如《LINUX程序設計》、《UNIX環境高級編程》,看這些的時候把書上的例子選擇一些自己編譯一下,哪怕是照著敲進去,事半功倍。
看完一本這樣的書,你對LINUX系統編程的知識就足夠了,這時候你可以開始閱讀一些LINUX下的源代碼來鍛煉和提升能力了,LINUX下有很多開源的軟體,你可以搜一下,應用程序也很多,但是最好的源代碼還是LINUX內核。
推薦一本簡單的內核書《linux內核完全剖析0.12》,這個講的是0.12內核,代碼量只有1萬多行的內核,現在的2.6估計一千萬,一輩子看不完。這個書講了很多X86體系結構的知識,這時理解內核必備的,匯編你要能看懂。
能看懂內核代碼了,就說明你至少不是初學者了,現在肯定能開發項目了,有了經驗後,恭喜你,你就成為一名LINUX程序員了。
再由這些基礎後,你就可以選擇一些具體的開放方向了,比如底層一點,驅動,協議等、或者嵌入式應用等、或者是QT等。不過這就是後話了,呵呵
我自己的一些體會,希望能對你有用。
E. linux環境c語言編程!問題棘手!高手進!
【第一個問題】
argv[i]越界了,不能保證都是null,改成這樣
for(i=1;i<argc;i++)
demo[i-1]=atoi(argv[i]);
for(--i;i<3;++i)
demo[i]=10;
【第二個問題】
我的理解是第一個子回進程答wakeup的瞬間,其他的子進程還是sleep,因此第一個子進程執行了printf
優先順序再高的進程sleep了也搶不過優先順序低的活動進程
因此最好保持3個子進程同時活動
else//子進程執行代碼
{
sleep(1);//為了父進程順利啟動3個子進程,sleep還是留著吧
for(i=1;i;i++);//保持活動一段時間
//報告進程號和優先順序
printf("child %d priority=%d\n",getpid(),getpriority(PRIO_PROCESS,0));
exit(EXIT_SUCCESS);
//return EXIT_SUCCESS;
}
F. 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設備等驅動開發,在工作中能獨立勝任底層驅動開發。
G. 如何進行Linux Kernel 開發
學習匯編語言、C語言,這兩種語言是你進行Linux Kernel開發與維護的必備語言能力,這樣你才有能力閱讀與編寫Linux Kernel的能力。
下載Linux Kernel源代碼,建議下載先前的版本,因為目前的新版本代碼數量太龐大,技術太新,如果是進行Linux Kernel的開發的話,先從簡單的版本0.11或者1.XX.XX版本開始,以前的版本中沒有過多的新技術的代碼,適合入門Linux Kernel的學習。
當你熟悉了Linux Kernel了後,可以下載目前最新的版本Linux Kernel3.18版本的源代碼,裡麵包含了很多的新技術的知識,方便你了解與學習~~~
這是一篇很重要的文檔,它介紹了內核開發的方方面面。這篇文檔已被加入到內核源碼樹的Documentation文檔里(名字為HOWTO),你可以在最新的內核樹里找到它。盡管已經有網友翻譯過這篇文檔,但是我還是決定自己再翻譯一遍。翻譯完之後,我的感觸是如果依靠翻譯來進行學習,速度太慢了。以後的技術文檔直接看英文,適當的做做筆記即可。
山濤
-----------------------------------------------------
How to do Linux Kernel development
-----------------------------------------------------
關於如何進行Linux Kernel development,這篇文檔是最值得你閱讀的一篇。它指導你如何成為一名Linux內核開發者以及如何和Linux內核開發社區一同工作。盡管它不包含內核編程的技能方面的知識,但是本篇能夠給你正確的指導去做內核開發。
如果這篇文檔講述的任何東西已經過時了的話,請給這篇文檔的維護者發送你的更新。
Greg [email protected]
Introction
-----------------
你想成為一名Linux內核開發者嗎?或者你的老闆曾經告訴你:去給某個設備寫個Linux驅動程序。這篇文檔的目標是,通過描述你進行開發時需要經歷的一些流程規則去指導你如何與社區一起工作,教會你所需要的一切從而讓你實現你的目標(成為一名合格的內核開發者,或者寫出合格的令老闆滿意的驅動程序);這篇文檔也會說明內核社區工作的風格和原因。
內核絕大部分代碼是基於C語言編程,與體系結構有關的一小部分由匯編完成。很好的理解和掌握C語言,是內核開發的必備要求。匯編語言(不同的體系結構有不同的匯編語言)不是必需的,除非你計劃做體系結構相關的底層開發。如果你想加強C語言的掌握,很好的參考資料如下:
- "The C Programming Language" by Kernighan and Ritchie [Prentice Hall]
- "Practical C Programming" by Steve Oualline [O'Reilly]
Linux內核是使用GNU C和GNU工具鏈完成的。盡管它遵循ISO C89標准,但是內核的編寫也使用了許多的GNU C的擴展特性,這些特性不屬於標準的一部分。內核的C編程環境自成體系,不依賴於C標准庫,所以C標準的一部分特性沒有被支持:例如Arbitrary long long divisions和浮點指針不被支持。有時你會很難理解內核基於GNU工具鏈的一些假定以及內核使用的一些GNU C擴展,不幸的是對於這類問題沒有確定性的參考資料。如果你遇到這類問題,建議你查閱GCC的info pages來獲取相關的信息(在Linux PC上,通過命令info gcc可以獲得信息)。
請記住你正在學習如何與已經存在的內核開發社區一起工作。內核開發社區由全球不同地方的開發人員組成,它以代碼、風格、開發流程的高質量標准著稱。這些高質量的標准使內核開發社區(這個組織非常大,地理位置非常分散)能夠非常有效的進行。應當提早努力學習這些高質量標准(編程風格、代碼要求以及開發流程),它們有很好的文檔;不要期望內核開發社區別的開發人員會適應你自己的或者你公司的開發風格。
Legal Issues
------------------
Linux內核代碼基於GPL許可協議發布。請閱讀內核源碼樹的主目錄里的COPYING文件,它提供了GPL許可的詳細描述。如果你有關於GPL許可的進一步問題,請聯系一名律師,不要在Linux kernel mailing list里詢問。Linux kernel mailing list里的開發人員不是律師,所以你不應當聽取他們的任何關於法律事務的建議。
對於一些通常的關於GPL許可的問題和解答,請參考:
http://www.gnu.org/licenses/gpl-faq.html
Documentation
---------------------
Linux內核源碼樹里有大量的非常有用的文檔用於學習,使你與內核社區相互促進和共同發展。當一個新的特性要加入到內核里,建議相關的文檔也要加入到內核里,用於描述如何使用這個新特性;當一個內核的修改導致了內核提供給用戶的介面發生了變化,建議你發送信息或者一個補丁給[email protected],告訴manual pages的維護者用戶介面的變化。
這里羅列了一些內核源碼樹里的需要閱讀的文檔:
README
這篇文檔簡要的介紹了Linux內核的背景,描述了配置和build內核需要什麼。一個剛剛接觸內核的新手應當從這里開始。(註:build kernel,就是編譯內核源代碼,生成可供系統使用的內核二進制文件(vmlinux/zImage)的過程。
Documentation/Changes
這篇文檔給出了一個用於成功編譯和運行內核的各種軟體包的列表的最小集合。
Documentation/CodingStyle
這篇文檔描述了Linux內核編碼風格,和一些隱藏在背後的基本原理。所有的想加入內核的新代碼應當遵循這篇文檔的指導。絕大數的內核代碼維護者只願意接受那些符合這篇文檔描述的風格的補丁,許多內核開發者也只願意審查那些符合Linux內核編碼風格的代碼。
Documentation/SubmittingPatches
Documentation/SubmittingDrivers
這些文檔清楚而又詳細地告訴你如何成功的創建和向社區遞交一個補丁,包括:
----郵件內容
----郵件格式
----發送者和接收者
遵循文檔里提倡的規則並不一定保證你提交補丁成功(因為所有的補丁遭受詳細而嚴格的內容和風格的審查),但是不遵循它們,提交補丁肯定不成功。
其他的一些非常優秀的描述如何正確的創建補丁的文檔如下:
"The Perfect Patch"
http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt
"Linux kernel patch submission format"
http://linux.yyz.us/patch-format.html
Documentation/stable_api_nonsense.txt
這篇文檔描述了有意決定在內核里沒有固定內核API的基本原因,包含下面的討論主題:
---子系統的shim-layers(為了兼容性?)
---操作系統之間的驅動移植性
---減緩內核源碼樹的快速變化(或者說,防止快速變化)
這篇文檔對於理解Linux的開發哲學非常關鍵,也對於從其他操作系統轉移到Linux上的開發人員非常重要。
Documentation/SecurityBugs
如果你確知你在Linux Kernel里發現了security problem,請遵循這篇文檔描述的步驟,幫助通知內核的開發者們並解決這類問題。
Documentation/ManagementStyle
這篇文檔描述了Linux內核開發者們如何進行管理運作,以及運作方法背後的分享精神(shared ethos)。這篇文檔對於那些內核開發新手們(或者那些好奇者)值得一讀,因為它解決或解釋了很多對於內核維護者獨特行為的誤解。
Documentation/stable_kernel_rules.txt
這篇文檔描述了一個穩定的內核版本如何發布的規則,以及需要做些什麼如果你想把一個修改加入到其中的一個版本。
Documentation/kernel-docs.txt
關於內核開發的外部文檔列表。如果你在內核開發的內部文檔中找不到你想要的資料,請參考這篇文檔提供的資料鏈接。
Documentation/applying-patches.txt
這篇文檔很好地描述了什麼是補丁(patch),以及如何將它應用到內核的不同開發分支(branch)上。
內核里也有大量的由內核源碼自動生成的文檔。其中包括了內核內部API的全面描述,和如何處理好鎖的規則。這些文檔在Documentation/DocBook/下創建,格式可以是PDF、Postscritpt、HTML和man pages,在內核源碼主目錄下通過運行下面命令自動生成:
make pdfdocs
make psdocs
make htmldocs
make mandocs
附上出處鏈接:http://www.cppblog.com/flyonok/archive/2011/04/15/144316.html
H. linux 內核是什麼, 本人有linux基礎
Linux內核:Linux是一種開源電腦操作系統內核。它是一個用C語言寫成,符合POSIX標準的類Unix操作系統。Linux最早是由芬蘭Linus Torvalds為嘗試在英特爾x86架構上提供自由的類Unix操作系統而開發的。該計劃開始於1991年,在計劃的早期有一些Minix 黑客提供了協助,而今天全球無數程序員正在為該計劃無償提供幫助。
Linux最早是由芬蘭人Linus Torvalds設計的。當時由於UNⅨ的商業化,Andrew Tannebaum教授開發了Minix操作系統以便於不受AT&T許可協議的約束,為教學科研提供一個操作系統。
(8)linux內核編程論壇擴展閱讀:
Linux將標準的GNU許可協議改稱Copyleft,以便與Copyright相對照。通用的公共許可(GPL)允許用戶銷售、拷貝和改變具有Copyleft的應用程序。當然這些程序也可以是Copyright的,但是你必須允許進一步的銷售、拷貝和對其代碼進行改變,同時也必須使他人可以免費得到修改後的源代碼。事實證明,GPL對於Linux的成功起到了極大的作用。它啟動了一個十分繁榮的商用Linux階段,還為編程人員提供了一種凝聚力,誘使大家加入這個充滿了慈善精神的Linux運動。
I. 該怎樣學習嵌入式Linux的基礎課程
1.LZ這樣想是對的,一般處於嵌入式入門階段的,即使經過幾個月的自學或回者培訓,能夠到公司答上任工作,也一般只能從應用做起,之後的發展憑自己的努力,當然也有少數例外。
2.至於你說的專業課,最最基礎的有C語言,操作系統,數據結構,了解計算機組成原理與體系結構這些,然後就是匯編和微機介面,熟悉linux的一些基本操作、linux操作系統原理、linux驅動、linux內核等等這些,最後就是單片機和arm 這兩個是硬體部分,建議先學軟體部分。
3.根據你現在的基礎,在畢業之前能很好的掌握到應用部分就很不錯了,然後畢業找一份工作是完全可以的。
給你推薦一個網站,華清遠見的官方網站和技術論壇,上面有很多嵌入式學習相關的實時信息和學習方法,更新的也比較快,學習資料和視頻教程很多也都可以下載,你可以下載下來作為學習參考用。