国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務(wù)器 > Web服務(wù)器 > 正文

Linux在應(yīng)用層讀寫寄存器的方法及實現(xiàn)實例

2024-09-01 13:50:46
字體:
供稿:網(wǎng)友

Linux在應(yīng)用層讀寫寄存器的方法

可以通過操作/dev/mem設(shè)備文件,以及mmap函數(shù),將寄存器的地址映射到用戶空間,直接在應(yīng)用層對寄存器進行操作,示例如下:

#include <stdio.h> #include <stdlib.h> #include <time.h> #include <unistd.h> #include <fcntl.h> #include <unistd.h>  #include <sys/mman.h> #define AUDIO_REG_BASE  (0xB800E000) #define MAP_SIZE    0xFF  static int dev_fd; int main(int argc, char **argv) {    dev_fd = open("/dev/mem", O_RDWR | O_NDELAY);       if (dev_fd < 0)    {     printf("open(/dev/mem) failed.");       return 0;   }     unsigned char *map_base=(unsigned char * )mmap(NULL, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, dev_fd, AUDIO_REG_BASE );    printf("%x /n", *(volatile unsigned int *)(map_base+0x38)); //打印該寄存器地址的value  #if 1 // LINE IN   printf("%x /n", *(volatile unsigned int *)(map_base+0x30));    *(volatile unsigned int *)(map_base + 0x30) = 0x208121bc; //修改該寄存器地址的value   usleep(1000000);   *(volatile unsigned int *)(map_base + 0x30) &= ~(0x1<<16); //修改該寄存器地址的value   usleep(1000000);    printf("%x /n", *(volatile unsigned int *)(map_base+0x30)); #endif    if(dev_fd)     close(dev_fd);    munmap(map_base,MAP_SIZE);//解除映射關(guān)系    return 0; } 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 左权县| 高唐县| 静宁县| 金坛市| 峨眉山市| 阿图什市| 连州市| 休宁县| 顺义区| 龙川县| 正定县| 科技| 嫩江县| 巢湖市| 峡江县| 雷州市| 鸡泽县| 古浪县| 金阳县| 清镇市| 岳西县| 广西| 泸水县| 冀州市| 鱼台县| 固安县| 永定县| 靖边县| 湖州市| 湘潭县| 拉孜县| 峨眉山市| 花垣县| 田林县| 当雄县| 宁波市| 五家渠市| 怀仁县| 牙克石市| 思茅市| 读书|