利用 dev mem實現使用者空間驅動

2021-07-03 19:58:24 字數 1182 閱讀 3391

/dev/mem是物理記憶體的全映像,可以用來訪問物理記憶體,一般用法是open("/dev/mem",o_rdwr|o_sync),然後mmap,接著就可以用mmap的位址來訪問物理記憶體,這實際上就是實現使用者空間驅動的一種方法。

它的好處參見博文:

#include #include #include #include #include #include #include #include #include #include #include #define map_size 4096ul

#define map_mask (map_size - 1)

unsigned long phymem_get(unsigned long addr)

/* map one page */ //將核心空間對映到使用者空間

map_base = mmap(0, map_size, prot_read | prot_write, map_shared, fd, addr & ~map_mask);

if(map_base == (void *) -1)

virt_addr = map_base + (addr & map_mask);

val = *((unsigned long *) virt_addr);

if(munmap(map_base, map_size) == -1)

close(fd);

return val;

}int phymem_set(unsigned long addr,unsigned long val)

/* map one page */ //將核心空間對映到使用者空間

map_base = mmap(0, map_size, prot_read | prot_write, map_shared, fd, addr & ~map_mask);

if(map_base == (void *) -1)

virt_addr = map_base + (addr & map_mask);

*((unsigned long *) virt_addr) = val;

if(munmap(map_base, map_size) == -1)

close(fd);

return 0;

}

利用redis實現使用者簽到

很多 都提供了簽到功能 這裡不考慮資料落地事宜 並且需要展示最近乙個月的簽到情況,如果使用bitmap我們怎麼做?一言不合亮 redis new redis redis connect 127.0.0.1 使用者uid uid 1 記錄有uid的key cachekey sprintf sign d...

利用SSH框架實現使用者登入功能

由於是登入功能,要用到表單,所以相應的就要用到actionform,寫乙個類,繼承於actionform類,由於已經有乙個pojo物件了,所以不用再寫eneity物件。直接在裡面例項化乙個pojo物件user,並提供set 與get 方法。如下 private user user new user ...

Freeradius Mysql實現使用者認證

作者採用mysql 4.0與freeradius 0.9成功實現了認證與計費功能,下面是我遇到的一些問題,希望大家在遇到與我相同問題時少走一些彎路 configure make make install 之後執行radius x命令,若你看到類似authenting on port 1812,acc...