ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2011年5月30日 星期一

read soc register from /dev/mem

就是參考這一篇 : http://blog.richliu.com/2006/10/17/369/ 這一篇甚至為 iMX51/3 Android 寫了 register name 轉換功能 http://boundarydevices.com/blogs/i-mx5x-device-register-access
就是利用 /dev/mem,把datasheet 裡面 soc 的 register 位址map 出來存取 (所以要 root 權限). include <stdio.h> #include <sys/mman.h> #include <fcntl.h> #define MAPSIZE 1024 unsigned long *getMappedAddr(unsigned long addr) { int fd; void *map; unsigned int offset = addr & (MAPSIZE-1); fd = open("/dev/mem",O_RDWR | O_SYNC); if(fd<0){ printf("open dev/mem error\n"); return (unsigned long*)-1; } map = mmap(0, MAPSIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, addr & ~(MAPSIZE-1)); if(map == MAP_FAILED){ printf("mmap error\n"); return (unsigned long*)-1; } return (unsigned long*)((char*)map+offset); } int main(int argc, char **argv) { unsigned long regaddr; unsigned long *mapaddr; char *end; if(argc<2){ printf("please specify address\n"); return 0; } regaddr = strtoul(argv[1],&end,16); mapaddr = getMappedAddr(regaddr); if(mapaddr!=(unsigned long*)-1){ printf("%X = %X\n",regaddr,*(mapaddr)); } return 0; }
.. 這個拿來讀 GPIO STATE 應該很方便吧...不知道 overhead 大不大...

沒有留言:

標籤

網誌存檔