2014-09-30 66 views
1

我在linux驅動程序開發方面只有2周的經驗,但在嵌入式c編程方面有很好的經驗。我只在linux中嘗試過字符設備驅動程序。現在我想嘗試一組連接到GPIO的LED的設備驅動程序。我正在使用BeagleBone Black。我希望從寄存器級訪問它,而不是隻調用任何驅動程序。 (我這樣做是爲了學習基礎知識)Linux設備驅動程序的註冊級訪問

我希望我的司機GPIO訪問代碼是有點像下面

但我需要關於如何訪問寄存器直接在linux一些幫助。我已經從數據表中得到了端口OUT寄存器的實際地址0x4804C13C

對不起,如果我打破了我的問題中的任何基礎知識。我對Linux非常陌生。

+0

的笨蛋,但許多現代外設優化了他們的寄存器接口,這樣很少需要讀 - 修改 - 寫序列。 – sawdust 2014-09-30 19:14:39

回答

0

你的驅動程序必須調用

struct resource *request_mem_region(unsigned long start, unsigned long len, char *name); 

註冊到的內存區域獨佔訪問。

然後,它必須使用ioread8()ioread16()等,iowrite8()iowrite16()

+0

*「因此,您的驅動程序只需要調用request_mem_region()」* - 您的答案不完整,因此不正確。寄存器不可能映射到虛擬地址空間,這是** ioremap()**的用途。 – sawdust 2014-09-30 19:03:52

+0

請不要混淆人。在x86上,可以找到MMIO和IO。此外,如果您知道寄存器可通過MMIO使用,則* ioreadN()*和* iowriteN()*會過度殺傷。 – 0andriy 2018-01-19 23:23:49

相關問題