- 论坛徽章:
- 0
|
本帖最后由 q1531 于 2010-06-05 21:10 编辑
问题里的代码就是关键代码了。写一个简单的例子:
- #include <fcntl.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <memory.h>
- #include <unistd.h>
- #include <string.h>
- #include <sys/mman.h>
- #include <sys/types.h>
- #define MEM_DEVICE "/dev/mem"
- char *data;
- int main(int argc, char **argv)
- {
-
- int fd,i;
- int size=512;
- int offset=78848;
- int offset_cut=offset%sysconf(_SC_PAGE_SIZE);
- offset-=offset_cut;//offset必须是page_size的倍数
- size+=offset_cut;
-
- fd=open(MEM_DEVICE,O_RDWR);
- if(fd<0)
- {
- printf("open error!\n");
- close(fd);
- exit(-1);
- }
- data=(char *)mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, offset);
- if(data == MAP_FAILED){
- printf("map failed\n");
- close(fd);
- exit(-1);
- }
- close(fd);
- data=data+offset_cut;
- for(i=0;i<10;i++){
- printf("%c - 0x%x\n",*(data+i),*(data+i));
- }
-
- munmap(data-offset_cut, size);
- return 1;
- }
复制代码 在模拟器android2.1下运行的结果
# /data/prop
/data/prop
r - 0x72
o - 0x6f
. - 0x2e
s - 0x73
e - 0x65
c - 0x63
u - 0x75
r - 0x72
e - 0x65
在milestone上运行就和问题里出现的错误一样了。 |
|