[問題]LINUX I2C mmap R/W一問

作者: Eenie (Eenie)   2017-08-25 15:32:54
OS:Linux code:C
小弟目前希望能於linux上讀寫soc板子定義好的I2C Memory Mapped Registers,目前已
知I2C的Memory Base Address為:0xdf02e000,因linux無法直接存取physical address
,故小弟利用開啟/dev/mem及使用mmap映射/dev/mem至虛擬位址上,但對於R/W的方式並
不是相當熟悉,目前撰寫code進行mapping如下:
int main(int argc, char** argv){
unsigned int base, basepage, baseoff, pagesize;
unsigned char* mem;
int fd;
fd = open("/dev/mem",O_RDWR);
if (fd < 0){
printf("device file open error !\n");
return 0;
}
pagesize = getpagesize();
base = 0xDF02E000;
baseoff = base % pagesize;
basepage = base - baseoff;
mem = (unsigned char*) mmap(NULL, 0x20FD1FFF, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, basepage);
if (mem == (void *)-1){
printf("Error while maping memory\n");
return 0;
}
printf("%x\n",(mem+offset));
#if 0
這邊是需做讀寫的部分。
#endif
close(fd);
munmap(mem, 0x20FD1FFF);
return 0;
}
作者: hizuki (ayaka)   2017-08-25 16:45:00
你幹嘛阿,為什麼不直接用driver來搞
作者: Eenie (Eenie)   2017-08-25 17:01:00
不好意思,因為學習時間還沒有很長,從driver下手不太了解,可否請大大指點
作者: soso7885 (YOHO)   2017-08-25 20:48:00
看看devmen這個tool怎麼做的
作者: clampsakura (妖應封光)   2017-08-25 23:21:00
MMAP 不知道是NORMAL MEMORY否 有點危險啊
作者: tomgod17 (湯神17)   2017-09-19 14:30:00
在上層用i2ctool去讀看看
作者: leolarrel (真.粽子無雙)   2017-10-03 09:21:00
想在user space 控制i2c , 最好還是用lm-senser之類的tools , 自己搞memory mapping真的很....

Links booklink

Contact Us: admin [ a t ] ucptt.com