全能電路設計實戰

2024年3月25日 星期一

[Linux Driver] 技術回覆整理

 

Q0: Driver 開發方式為何?


Ans: 

請參考"Linux Driver開發的模式"  https://blog.ittraining.com.tw/2024/02/linux.html

 

Q1: 在Linux 驅動程式-> Linux GPIO host control 的bcm2708_gpio.c 是在哪個路徑下?


Ans: 課程使用的是kernel 4.4.x , 其關於bcm2708_gpio.c 改為 driver_gpio.c
路徑位於 /home/pi/linux-raspberrypi-kernel_1.20190401-1/drivers/bcma



Q2: 為何在範例"LinuxDriver_Data_20191001 \Code\14-GPIO-RPI_H\gpio.c"裡

只有定義

MODULE_LICENSE("GPL");
MODULE_AUTHOR("ittraining.com.tw");
MODULE_DESCRIPTION("A Simple GPIO Device Driver module for RaspPi");

而沒有定義
module_init();
module_exit();

Ans:

原始module 進入及離開點, 都是固定這個名字,
int init_module(void)
void cleanup_module(void)

若想要換別的名字,可以用以下巨集代換成別的名字.
module_init(led_init_module);
module_exit(led_remove_module);

Q3: 02_BTN_LED 裡的local_irq_save(flags), 禁止的irq是button_irq, 對嗎?

Ans:  不是. 

local_irq_save(flags)   //是對本次被中斷的CPU, 禁止它再接受何任何中斷

/*the critical section of code*/
.
local_irq_restore(flags) //還原被中斷前的CPU狀態


Q4:  Raspberry Pi 開發板接上電源後(I/O板接電腦USB埠, 主板接USB電源), 開機訊息或是下dmesg會常出現以下:

[ 10.391505] Under-voltage detected! (0x00050005)
[ 14.561447] Voltage normalised (0x00000000)

Ans:  其實可以略過此訊息, 但如果要消除此訊息.. 另外購買 2.5A power supply 供電, 不能用PC的 USB供電,因為電腦電流供應不足.

Q5:   關於中斷控制器

   這個local arm周邊的 具體是甚麼樣的周邊 請舉例
   這些周邊也接到GPU的中段控制器裡嗎? 
   另外, 中斷控制器有沒有在GPU裡?
   bcm2835 GPU ARM內部的IP簡圖去哪查?

Ans: 


(1) 來自ARM內部本身的中斷, 主要就是ARM 內部timer和作為和GPU溝通界面(Mailbox)的中斷通知
(2) 不知道,但也不用管GPU內部的中斷控制器
(3) 沒有, 我們講的中斷控制器是用來通知ARM 而己
(4)   Hardware architecture:   GPU ----> Interrupt controller ---> ARM


   資料來源: BCM2835-ARM-Peripherals  Ch7 Interrupts

 

Q5: 如何自己編譯核心或準備本機開發模式

請參閱 "Quick guide for building Raspberry Pi kernel 4.4.x"


Q6:

暫存器的確有可能因為中斷而改變狀態,但不懂得是明明已經說是存取暫存器
並不是一般放在記憶體的變數, 根本沒所謂保存在記憶體裡阿




上面這段描述是不是錯的?  我看gpio dirver也沒有加所以volatile?






Ans: 

(1) 現在計算機架構採用Memory-mapped I/O ,  將Peripheral Register  (Special Function Register)也映射在記憶體的一個區段, 所以存取週邊亦等同於存取記憶體.
   
(2)也許  readl 函式宣告像這樣.  readl (volatile uint32_t* paddr)


沒有留言 :

張貼留言