[150312]linux內核,驅動,應用程三者的概念和之間的關係

http://zhidao.baidu.com/link?url=TZ14V5nI4ba0Ym2KcT08PesVpijMO0F6wWQ5JkYtV_NGtB5d0VBr6u4pcBcE2u29kNcN9kuZ-pHGV94aOpUSCa


Q:我知道三者是怎麼下載到開發板的,linux內核是編譯以後利用u-boot下載到開發板的,那驅動程序是單獨下載的還是編譯好後放在linux內核中一起隨內核編譯下載的還是其它的什麼,應用程序編譯好後放在內核中還是單獨下載到開發板的,要是單獨下載的話那它們之間的下載順序是怎麼樣的。本菜鳥也是剛學linux 嵌入式,我覺得怎麼樣寫代碼這不重要,重要的是弄清楚一些概念,很多書只講了怎樣寫代碼,怎麼移植,但不知道如何下載。

 

 A:1、首先樓主腦子中要有個概念 U-BOOT(BOOTLOADER)   LINUX內核(一般包含驅動,也就是和內核一起編譯好後下載到板子中) 文件系統(包含用戶應用程序等)這三個重要部分是按照預先設定好的位置放置於NAND FLASH(我這裏就不說BOOTLOADER放在NOR FLASH,從NOR 啓動了),板子上電後直接運行BOOTLOADER,BOOTLOADER 根據預先設置好的位置 把LINUX內核加載到內存,並將控制權交給LINUX內核,內核利用文件系統驅動(比如YAFFS驅動等)來從NANDFLASH中操作文件系統。

2、應用程序是放在文件系統(比如YAFFS文件系統)中的,所以應用程序不放在內核中,而是放在文件系統中,製作成文件系統一併下載到NAND FLASH中(或者通過其它途徑把文件拷貝到該文件系統中)。

 

Q:文件系統編譯好後單獨利用U-Boot下載到開發板中的嗎,是不是U-BOOT已經把nand flash分區好了,先將內核下載到一個分區,再下載文件系統啊,另外應用程序是編譯好後放在文件系統的哪個文件夾中,還是將應用程序源文放到文件系統中一起編譯,如果是這樣那放到文件系統的哪個文件夾下?

 

A:是的,需要單獨下載到開發板中,分區是事先根據各個大小確定好位置後,然後BOOTLOADER和內核的分區裏面一致不衝突就可以了。你可以先下載文件系統後在下載內核,不衝突。因爲現在已經對這兩塊內容固定起始位置了。先下載哪個都無所謂。


Q:內核跟驅動有什麼關係?


A: 這個問法好籠統.
       據我讀代碼的理解,驅動的任務:
1)驅動利用內核文件系統層的接口,提供接口給用戶層操控硬件.ioctl/dev/sysfs等
2)驅動提供硬件實際上的“操作窗口”給內核使用。比如說內核要關閉設備,文件系統層處理了.close操作,驅動層負責寫入指定的值給設備的特定寄存器來關閉設備。

  所以我的理解驅動層是硬件設備的一層抽象層,它也是內核的一個子系統,提供接口供內核其他子系統來操控硬件.


A2:腦袋和手的關係吧。


A3:1.從功能角度來說的話,驅動在內核的下層。即:硬件,驅動,內核,應用(從下往上)。也就是說,驅動直接操作硬件,來給內核提供服務。內核不能直接操作硬件。
2.從代碼結構的角度來看,驅動和內核實際上已經融爲一體,驅動開發就是內核開發,內核開發很多時候也指驅動開發。還記得內核模塊嗎?爲什麼會提供內核模塊這種形式,即module_init和module_exit這種形式。你看下驅動開發的書籍,驅動全部都是以內核模塊這種形式來實現的。這就說明驅動開發實際就是內核開發,而內核模塊這種形式,說白了本身也就是爲了開發驅動才搞出來的。驅動已經成爲內核的一部份了,內核源碼的70%以上都是驅動的代碼,剩下的代碼說白了就是進程管理,內存管理,文件管理,這些部分所有系統都公用,所以只佔到30%。而外設的發展是日新月異的,數量太多了。新的外設必須要有相應的驅動,所以內核部分的發展主要就是驅動的發展。
  

發佈了7 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章