2019年8月12日 星期一

如何界定User Space Driver和Kernel Space Driver?



課程提供的Image中有一個bcm2835_clibbcm2835_clib資料夾,裡面有兩個資料夾。其中一個example應該是控制IT Shield上面不同External Device的Source Code。另一個src資料夾是不是類似"SoC HAL或BSP"之類的腳色,看起來比較像HAL,因為沒有包成板上Device控制的API,而是SoC Peripheral? 這是底層的HAL code 供上層使用 其中,下面的程式碼中為什麼是MAP_FAILED,而不是BCM2835_GPIO_BASEADDR之類的暫存器位置,而且找不到MAP_FAILED這個MACRO的定義 bcm2835_init () 會給正確值 另外,這樣子的寫法如果理解沒有錯誤,應該是Base Metal的寫法。為什麼blink.c編譯出來的執行檔可以直接執行? 這樣是不是等於不是走syscall -> LDD的方式,這樣Kernel怎麼管理這種Process? 這種方式如何界定User Space和Kernel Space? 這是User Space Driver 的寫法.. Kernel 只當它是一般User Process來管理..所以無法像Kernel Space Driver可以在底層做設備管理
User Space Driver 作法可以走 device file 的方式, 也可以用mmap(2)方式來操作SFR (special function register) . 細節可以自行參考 bcm2835_init () 函式

沒有留言 :

張貼留言