2013-05-29 38 views
1

我正在爲NIOS II處理器和設備樹使用嵌入式Linux。 GPIO功能提供了一次讀取和寫入一個位的功能。我有一些固件和PIOS,我想通過一次設置或讀取所有32位來原子讀取或寫入。看起來好像會有一個通用的設備驅動程序,如果設備樹被賦予適當的兼容性,驅動程序將存在,允許打開設備,然後讀取和寫入設備。我已經搜索了這個功能,並沒有找到驅動程序。一個存在於分支中但被Linus移除的分支。Linux和讀寫通用32位寄存器

我的問題是什麼是Linux設備樹方式來讀寫一個通用32位寄存器/ pio設備?

回答

1

你的答案是櫓

Character Device Drivers

你將不得不用寫文件操作字符設備驅動程序來打開和關閉設備。讀取,寫入,ioctl,並複製設備的內容。

static struct file_operations query_fops = 
{ 
    .owner = THIS_MODULE, 
    .open = my_open, 
    .release = my_close, 
    .ioctl = my_ioctl 
}; 

使用iomem映射地址,並使用rawread和rawwrite直接讀取和寫入該地址。創建和如下注冊一個設備,然後它可以從用戶空間訪問:

register_chrdev (0, DEVICE_NAME, & query_fops); 

device_create (dev_class, NULL, MKDEV (dev_major, 0), NULL, DEVICE_NAME); 

,然後從用戶空間訪問,如下所示:

fd = open("/dev/mydevice", O_RDWR); 

,然後你可以用GPIO使用用戶空間的ioctl的發揮:

ioctl(fd, SET_STATE);