/dev/mem에 mmap을 쓰면 시스템의 물리 메모리에 접근 가능합니다.
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/mman.h> #include <unistd.h> #include <fcntl.h>
#define REALVIEW_SYS_BASE 0x10000000 #define REALVIEW_SYS_100HZ_OFFSET 0x24 #define REALVIEW_SYS_24MHz_OFFSET 0x5C
int main( void ) { int fd; unsigned int *mapped_addr; unsigned int *p_sys24mhz; unsigned int *p_sys100hz;
fd = open("/dev/mem", O_RDONLY | O_SYNC); if(fd==-1) { perror("open"); return 1; } mapped_addr = (unsigned int *)mmap(0, 0x10000, PROT_READ, MAP_SHARED, fd, REALVIEW_SYS_BASE); //if (mapped_addr<0) // perror("mmap"); p_sys24mhz = mapped_addr+(REALVIEW_SYS_24MHz_OFFSET/sizeof(unsigned int)); p_sys100hz = mapped_addr+(REALVIEW_SYS_100HZ_OFFSET/sizeof(unsigned int)); printf("mapped addr= %p\n", mapped_addr); printf("p_sys100hz = %p\n", p_sys100hz); printf("*p_sys100hz = 0x%x\n", *p_sys100hz); printf("p_sys24mhz = %p\n", p_sys24mhz); printf("*p_sys24mhz = 0x%x\n", *p_sys24mhz); close(fd); return 0; }
[root@target2 ~]# ./mmaptest mapped addr= 0x40158000 p_sys100hz = 0x40158024 *p_sys100hz = 0x396fe45 p_sys24mhz = 0x4015805c *p_sys24mhz = 0x778161b0
이렇게 쓰면 됩니다. /dev/mem을 open하고 mmap을 이 fd에 대해 하면 됩니다.
크리에이티브 커먼즈 라이센스
2010/01/29 00:41 [수정/삭제] [답글]
관리자만 볼 수 있는 댓글입니다.
2010/01/29 20:48 [수정/삭제]
헐
야녀