嵌入式Linux驅動(dòng)程序開(kāi)發(fā)要點(diǎn)
#include
int request_irq(unsigned int irq,
void (*handler)(int irq, void dev_id, struct pt_regs *regs),
unsigned long flags,
const char *device,
void *dev_id);
void free_irq(unsigned int irq, void *dev_id);
參數irq表示所要申請的硬件中斷號;handler為向系統登記的中斷處理子程序,中斷產(chǎn)生時(shí)由系統來(lái)調用,調用時(shí)所帶參數irq為中斷號;dev_id為申請時(shí)告訴系統的設備標識;regs為中斷發(fā)生時(shí)的寄存器內容;device為設備名,將會(huì )出現在/proc/interrupts文件里;flag是申請時(shí)的選項,它決定中斷處理程序的一些特性,其中最重要的是中斷處理程序是快速處理程序還是慢速處理程序??焖偬幚沓绦蜻\行時(shí),所有中斷都被屏蔽,而慢速處理程序運行時(shí),除了正在處理的中斷外,其他中斷都沒(méi)有被屏蔽。在Linux系統中,中斷可以被不同的中斷處理程序共享。
作為系統核心的一部分,設備驅動(dòng)程序在申請和釋放內存時(shí)不是調用malloc和free,而代之以調用kmalloc和kfree,它們被定義為:
#include
void *kmalloc(unsigned int len, int priority);
void kfree(void *obj);
參數len為希望申請的字節數;obj為要釋放的內存指針;priority為分配內存操作的優(yōu)先級,即在沒(méi)有足夠空閑內存時(shí)如何操作,一般用GFP_KERNEL。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論