4412 驅動認識總結

1、QQ聊天記錄總結

  • 對於全部的驅動設備Linux看來都是文件,這些文件都有固定的接口,read、write、open、ioctl、close等,包含在struct fileoptions中。
  • 經過設備文件的主設備號和次設備號,讓應用程序調用。驅動寫的是主設備號的功能,置於相似功能的設備用次設備號區分。
  • 而後函數接口和設備文件經過,linux特定的函數註冊。如字符設備是register_chrdev等等。
  • 橋接以後,應用層能夠用open調用內核的open函數

 

2、Linux驅動程序的基本認識

Linux驅動包含三種:字符設備驅動、塊設備驅動、網絡設備驅動。理解和掌握字符設備驅動是更重要的 linux

 

Linux驅動程序講解的步驟

  • GPIO(General Purpose Input Output Port),通用輸入輸出口
  • 內存管理單元(MMU)
  • Linux把設備當作了文件( open, read, write, ioctrl,close)
  • Linux字符設備驅動的編程思想:作一組設備對應的驅動函數
  • 設備節點(設備文件)
  • 舉例說明上層應用程序如何對某個外設進行操做
  • 舉例說明底層驅動的編寫方式以及如何註冊到系統(register_chrdev())
  • MISC雜項設備(混雜設備)
  • 模塊(module)

 

學習編寫驅動須要:
程序員

學會查看開發板原理圖
學會查看處理器的數據手冊(datasheet
對外部設備操做的步驟(三部曲)
經過原理圖找到設備鏈接的PIN
根據該PIN腳找到控制這個引腳的相關寄存器,並找到寄存器對應的物理地址
最後,經過編寫程序來實現對該設備的操做
編程

 

好比led0的管腳在底板中叫KP_COL0,對應到核心板管腳叫KP_COL0,對應帶4412管腳是AA4(GPL2_0)安全

而後相關的寄存器有GPL2CON、GPL2DAT、GPL2PUD、GPL2DRV、GPL2CONPDN、GPL2PUDPDN。瞭解了寄存器功能,就能夠寫函數對此控制了網絡

嵌入式控制芯片地址的方式:架構

0x11000104                    ----比方說有一個地址 

unsigned int *pintx;          ----定義一個32位的指針地址

pintx = 0x11000104;          ----給地址指針賦值

*pintx = 0;                   ----對地址的內容吸入數據

*((unsigned int *)0x11000104) = 0;             ----一樣的能夠直接這樣寫

 

  • RISC(精簡指令集)/CiSC(複雜指令集)

精簡指令集的指令長度和運行時間都是同樣的。函數

  • RISC便於實現指令流水線

可使一些須要計算機處理的多項操做在時間上重疊進行,便於提升電路的工做頻率性能

 

Memory Management Unit(MMU)
虛擬地址到物理地址的轉換
如何經過物理地址找到虛擬地址呢?(ioremap)
輔助實現虛擬內存
輔助實現多任務管理
學習

虛擬內存

處理器有了MMU,那麼就有了虛擬內存的概念spa

虛擬存儲器的空間大小取決於計算機的訪存能力而不是實際外存的大小。  - 32位 2^32 = 4G

使存儲系統既具備至關於外存的容量又有接近於主存的訪問速度。        - 硬盤 EMMC FLASH

 

 如何評價處理器

頻率
性能 (MIPS/MHz
ARM7 處理速度爲0.9MIPS/MHz,常見的主時鐘通常爲20MHz-133MHz
ARM9 處理速度爲1.1MIPS/MHz,常見的主時鐘通常爲100MHz-233MHz
CORTEX-A9處理速度2.5 MIPS/MHz,主時鐘通常爲1000MHz-1600MHz
功耗
面積(成本)

 

3、Linux內核基礎

Linux體系結構

從程序員的角度分析
linux底層和應用分開,作應用的作應用,作底層的作底層,各幹各的。經濟學的原理是,分工產生效率

從安全性的角度分析,爲了保護內核。現代CPU一般都實現了不一樣的
工做模式。以ARM爲例:ARM實現了7種工做模式,不一樣模式下CPU能夠執行的指令或者訪問的寄存器不一樣:
(1)用戶模式 usr (2)系統模式 sys(3)管理模式 svc(4)快速中斷 fiq(5)外部中斷 irq(6)數據訪問終止 abt(7)未定義指令異常
(2)X86爲例:X86實現了4個不一樣級別的權限,Ring0Ring3 ;Ring0下能夠執行特權指令,能夠訪問IO設備;Ring3則有不少的限制
Android爲例:將應用放到Java虛擬機上面運行,應用更加遠離底層

用戶空間和內核空間是程序執行的兩種不一樣狀態,咱們能夠經過系統調用硬件中斷來完成用戶空間到內核空間的轉移

Linux內核結構

System Call Interface SCI層)
爲用戶空間提供了一套標準的系統調用函數來訪問Linux內核。
Procees ManagementPM
進程管理是建立進程(forkexec,中止進程(killexit,並控制他們之間的通訊(signal等)。還包括進程調度,控制活動進程如何共享CPU
Memory ManagementMM
內存管理的主要做用是控制多個進程安全的共享內存區域

Virtual File SystemsVFS
虛擬文件系統,隱藏各類文件系統的具體細節,爲文件操做提供統一的接口
Linux提供了一個大的通用模型,使這個模型包含了全部文件系統功能的集合(一切皆文件)

Device Drivers設備驅動
Linux內核中有大量的代碼在設備驅動程序部分,用於控制特定的硬件設備。
Linux驅動通常分爲網絡設備、塊設備、字符設備、雜項設備
網絡協議棧
內核網絡協議棧爲Linux提供了豐富的網絡協議實現。

 

Linux內核源碼目錄結構

 arch目錄
arch目錄是平臺目錄。內核支持的全部CPU架構,在該目錄下都有對應的子目錄。每一個CPU的子目錄,又進一步分解爲bootmmkernel等子目錄,分別控制系統引導,內存管理,系統調用。還有動態調頻,主頻率設置部分等

 

Linux很複雜,很強大。
內核源碼解壓編譯後有1.3G,經過裁減編譯出的linux鏡像zImage不到4M
4M源碼鏡像中,還有大部分不用咱們關心
咱們只須要了解對寫代碼有幫助的部分,掌握咱們須要掌握的代碼
前面Linux代碼中只有紅色標記的一部分是須要了解或者掌握的
做爲開發者只須要學會使用它,咱們要重點學習只是其中很小的一部分。
對架構有必定的瞭解便可
學習的重點是驅動開發相關的知識、函數的調用、驅動的協議、簡單的硬件知識

相關文章
相關標籤/搜索