/dev/mem直接操作硬件寄存器

/*******************************************************************************
 *                        /dev/mem直接操作硬件寄存器
 * 说明:
 *     在和左栋讨论如何处理iomux的时候,可以直接通过操作/dev/mem进行iomux的pin映射。
 *
 *                                              2017-9-27 深圳 龙华樟坑村 曾剑锋
 *******************************************************************************/

 一、参考文档:
    1. 利用mmap /dev/mem 读写Linux内存
        http://blog.csdn.net/zhanglei4214/article/details/6653568
时间: 2024-10-14 14:03:42

/dev/mem直接操作硬件寄存器的相关文章

/dev/mem可没那么简单

这几天研究了下/dev/mem.发现功能非常奇妙,通过mmap能够将物理地址映射到用户空间的虚拟地址上.在用户空间完毕对设备寄存器的操作,于是上网搜了一些/dev/mem的资料. 网上的说法也非常统一,/dev/mem是物理内存的全映像,能够用来訪问物理内存,一般使用方法是open("/dev/mem",O_RDWR|O_SYNC),接着就能够用mmap来訪问物理内存以及外设的IO资源,这就是实现用户空间驱动的一种方法.用户空间驱动听起来非常酷.可是对于/dev/mem,我认为没那么简

通过/dev/mem操作物理内存

/dev/mem设备可以用来访问物理内存.下面一段应用程序的代码,实现了通过/dev/mem对物理内存空间中SRAM1的访问. #include <stdio.h> #include <stdint.h> #include <fcntl.h> #include <unistd.h> #include <sys/mman.h> #define SRAM1_ADDR 0x10000000 struct test_data { int32_t val;

open(&quot;/dev/mem &quot;,O_RDWR | O_SYNC)

[摘要]/dev/mem是物理内存的全映像,可以用来访问物理内存,一般用法是open("/dev/mem",O_RDWR|O_SYNC),然后mmap,接着就可以用mmap的地址来访问物理内存,这实际上就是实现用户空间驱动的一种方法. http://blog.csdn.net/wlp600/article/details/6893636# 1.用户空间驱动优点 有几个论据倾向于用户空间编程,有时编写一个所谓的用户空间设备驱动对比钻研内核是一个明智的选择,用户空间驱动的好处在于: 1.完

linux下操作gpio寄存器的方法

一. 在驱动中: 1. 用的时候映射端口:ioremap; #define GPIO_OFT(x) ((x) - 0x56000000) #define GPFCON (*(volatile unsigned long *)(gpio_va + GPIO_OFT(0x56000050))) gpio_va = ioremap(0x56000000, 0x100000); // 物理地址0x56000000, 映射区分配的大小0x100000字节 这样映射过后,就可以直接操作寄存器了: 配置3引脚

通过/dev/mem只能访问高端内存以下的内核线性地址空间

http://blog.chinaunix.net/uid-20564848-id-74706.html   </proc/iomem和/proc /ioports对应的fops> <浅析pc机上如何将vmlinuz- 2.6.31-14-generic解压出vmlinux> fs_initcall(chr_dev_init); chr_dev_init ==> register_chrdev(MEM_MAJOR,"mem",&memory_fop

/dev/mem和/dev/kmem的区别

/dev/mem 用来访问物理IO设备,比如X用来访问显卡的物理内存,或嵌入式中访问GPIO.用法一般就是open,然后mmap,接着可以使用map之后的地址来访问物理内存.这其实就是实现用户空间驱动的一种方法. /dev/kmem 一般可以用来查看kernel的变量,或者用作rootkit之类的. 访问/dev/mem和/dev/kmem都需要root权限,否则普通用户就可以访问任意物理地址,进而破坏系统. 原文地址:https://www.cnblogs.com/fourstupidguns

MSR和MRS指令操作CPSR寄存器

1.MSR和MRS指令介绍 MRS 指令:  对状态寄存器CPSR和SPSR进行读操作.通过读CPSR可以获得当前处理器的工作状态.读SPSR寄存器可以获得进入异常前的处理器状态(因为只有异常模式下有SPSR寄存器). MSR指令:    对状态寄存器CPSR和SPSR进行写操作.与MRS配合使用,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换处理器模式.或者允许/禁止IRQ/FIQ中断等. 2.CPSR寄存器介绍 如图所示,ARM每种工作模式除R0~R15共16个寄存器外,还有

字符设备---ADC(自己配置硬件寄存器)

ADC:两种方式:1.自己配置寄存器 2.调用三星封装好的函数,这个要简单一些: 由于我们是初学,在这里我采用第一种方法进行ADC设备驱动的编写: 有很多传感器,都是经过模拟电压来反应传感器的感应值:比如说温度传感器,气体浓度传感器等. 这个要结合中断来进行ADC的值的读取:有两种方式:轮询(忙等)和中断,根据具体情况来选择方式: 配置ADC的寄存器(参数):裸板代码之前已经写过了,这里利用裸板代码为基础进行修改: 一 :裸板代码写成驱动的过程中要注意两点:第一解决物理地址到虚拟地址的映射:io

3.Docker与LXC、虚拟化技术的区别——虚拟化技术本质上是在模拟硬件,Docker底层是LXC,本质都是cgroups是在直接操作硬件

先说和虚拟化技术的区别 难道虚拟技术就做不到吗? 不不不,虚拟技术也可以做到,但是会有一定程度的性能损失,灵活度也会下降.容器技术不是模仿硬件层次,而是 在Linux内核里使用cgroup和namespaces来打造轻便的.将近裸机速度的虚拟技术操作系统环境.因为不是虚拟化存储,所以容器技术不会管 底层存储或者文件系统,而是你放哪里,它操作哪里. 这从根本上改变了我们如何虚拟化工作负载和应用程序,因为容器速度比硬件虚拟化技术更快,更加便捷,弹性扩容的更加高效,只是它的工作负载要求操作系统,而不是