Linux在应用层读写寄存器的方法

可以通过操作/dev/mem设备文件,以及mmap函数,将寄存器的地址映射到用户空间,直接在应用层对寄存器进行操作,示例如下:

 

 

[cpp] view plain copy

 
 

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <time.h>  
  4. #include <unistd.h>  
  5. #include <fcntl.h>  
  6. #include <unistd.h>   
  7. #include <sys/mman.h>  
  8. #define AUDIO_REG_BASE   (0xB800E000)  
  9. #define MAP_SIZE        0xFF  
  10.   
  11. static int dev_fd;  
  12. int main(int argc, char **argv)  
  13. {  
  14.   
  15.     dev_fd = open("/dev/mem", O_RDWR | O_NDELAY);        
  16.   
  17.     if (dev_fd < 0)    
  18.     {  
  19.         printf("open(/dev/mem) failed.");      
  20.         return 0;  
  21.     }    
  22.   
  23.     unsigned char *map_base=(unsigned char * )mmap(NULL, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, dev_fd, AUDIO_REG_BASE );  
  24.   
  25.     printf("%x \n", *(volatile unsigned int *)(map_base+0x38)); //打印该寄存器地址的value  
  26.   
  27. #if 1 // LINE IN  
  28.     printf("%x \n", *(volatile unsigned int *)(map_base+0x30));  
  29.   
  30.     *(volatile unsigned int *)(map_base + 0x30) = 0x208121bc; //修改该寄存器地址的value  
  31.     usleep(1000000);  
  32.     *(volatile unsigned int *)(map_base + 0x30) &= ~(0x1<<16); //修改该寄存器地址的value  
  33.     usleep(1000000);  
  34.   
  35.     printf("%x \n", *(volatile unsigned int *)(map_base+0x30));  
  36. #endif  
  37.   
  38.     if(dev_fd)  
  39.         close(dev_fd);  
  40.   
  41.     munmap(map_base,MAP_SIZE);//解除映射关系  
  42.   
  43.     return 0;  
  44. }  
时间: 2024-09-19 08:57:54

Linux在应用层读写寄存器的方法的相关文章

Linux在应用层读写寄存器的方法。。。

参考链接:http://blog.csdn.net/liukang325/article/details/26601811 /dev/mem:物理内存的全镜像.可以用来访问物理内存.由于应用运行都在用户空间,使用的是虚拟内存,不能直接访问物理地址空间,通过/dev/mem文件可以用来访问系统的全部寻址空间. /dev/kmem:kernel看到的虚拟内存的全镜像.可以用来访问kernel的内容. 在开启MMU之前,你可以直接用物理地址访问.在开启MMU之后,你需要先将物理地址映射为虚拟地址,然后

Python使用minidom读写xml的方法

  本文实例讲述了Python使用minidom读写xml的方法.分享给大家供大家参考.具体分析如下: 一 python提供的xml支持 2种工业标准的xml解析方法-SAX和DOM.SAX(simple API for XML),是基于事件处理的,当XML文档顺序地读入时,每次遇到一个元素会触发相应的事件处理函数来处理.DOM(Document Object Model),通过构建一个树结构来表现整个xml文档,一旦树被构建,可以通过DOM提供了接口来遍历树和提取相应的数据. python还提

在Linux下开发GUI程序的方法

在Linux下开发GUI程序的方法有很多,比如Gnome桌面使用GTK+作为默认的图形界面库,KDE桌面使用Qt作为默认的图形界面库,wxWidgets则是另一个使用广泛的图形库,此外使用Java中的Swing/AWT组件也可以用于开发Linux下的GUI应用. 本文将依次介绍GTK+.Qt.wxWidgets和Swing/AWT,对其进行对比分析. 1. GTK+ 平台支持 虽然GTK+最初是为X Window系统开发的,但是目前已经发展成为一个跨平台的图形界面API,其支持的平台包括: Li

常用的Linux删除文件恢复工具的使用方法

然后使用相关工具进行恢复.本文以 Ubuntu 12.04 平台为例介介绍四个(foremost.extundelete.testdisk 和 phtorec)常用的 Linux 删除文件恢复工具的使用方法. Linux 文件恢复的原理 inode 和 block 首先简单介绍一下 Linux 文件系统的最基本单元:inode.inode 译成中文就是索引节点,每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份,一部份是 inode,另一部份是 block,block 是

使用Python进行二进制文件读写的简单方法(推荐)_python

总的感觉,python本身并没有对二进制进行支持,不过提供了一个模块来弥补,就是struct模块. python没有二进制类型,但可以存储二进制类型的数据,就是用string字符串类型来存储二进制数据,这也没关系,因为string是以1个字节为单位的. import struct a=12.34 #将a变为二进制 bytes=struct.pack('i',a) 此时bytes就是一个string字符串,字符串按字节同a的二进制存储内容相同. 再进行反操作 现有二进制数据bytes,(其实就是字

linux下python抓屏实现方法

  本文实例讲述了linux下python抓屏实现方法.分享给大家供大家参考.具体实现代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 7

C#读写文件的方法

17.3.1 按文本模式读写 SteamReader和StreamWriter类为我们提供了按文本模式读写数据的方法.下面的例子是从一个文本文件中读取内容并打印在屏幕上. 程序清单17-5: using System; using System.IO; class FileTest { public static void Main() { streamReader srd; try{ srd=File.OpenText("c:\\C#\\file1\\file1.txt"); } c

ARM开发板嵌入式Linux修改开机启动LOGO的方法

1.嵌入式 Linux LOGO显示原理 嵌入式Linux是直接在FrameBuffer的基础上.直接显示一个ppm格式的图象.它 kernel/drivers/video/fbcon.c中的fbcon_show_logo()完成,最大颜色支持224色而不常见的255色. 默认的logo文件是 drivers/video/logo/logo_linux_clut224.ppm. 2.制作流程 因为LINUX LOGO格式需要ppm格式来显示.这种格式是一种用ASCII来描述图像数据一种格式.一般

python读写ini配置文件方法实例分析

  本文实例讲述了python读写ini配置文件方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 import ConfigParser import os class ReadWriteConfFile: currentDir=os.path.dirname(__file__) fil