在裸奔代码中,如果要控制gpio,直接控制gpio寄存器地址即可;

在linux系统中,所有操作的地址都是虚拟地址,都是由linux内核去管理,所以需要将物理地址转换成内核可识别的虚拟地址。

1、ioremap 和 iounmap

// 功能:将物理地址映射为虚拟地址

// 参数1:需要映射的物理地址

// 参数2:需要映射的地址长度

// 返回值:映射后的虚拟地址(例:void*reg_base = ioremap(0x12345678, 4);)

void *ioremap(cookie, size);

// 功能:取消映射

// 参数:需要取消的虚拟地址

void iounmap(cookie);

2、虚拟地址操作

// 功能:将虚拟地址中的值读出来

// 参数:需要读取的虚拟地址

__raw_readl(addr);        等同于      readl(addr);

// 功能:将数据写入虚拟地址

// 参数1:数据

// 参数2:需要写入的虚拟地址

__raw_writel(data, addr);        等同于      writel(data, addr);

// 从虚拟地址读取4个字节数据

unsigned int readl(unsigned int addr);

// 往虚拟地址写入4个字节数据

void writel(unsigned int data, unsigned int addr);

// 从虚拟地址读取2个字节数据

unsigned short readw(unsigned int addr);

// 往虚拟地址写入2个字节数据

void writew(unsigned short data, unsigned int addr);

// 从虚拟地址读取1个字节数据

unsigned char readb(unsigned int addr);

// 往虚拟地址写入1个字节数据

void writeb(unsigned char data, unsigned int addr);

void led_on(void)
{
void *reg_base;
unsigned int temp;
reg_base = ioremap(0x12345678, 4); temp = __raw_readl(reg_base);
temp &= ~(0xff<<12);
temp |= (0x11<<12); __raw_writel(temp, reg_base);
}

Linux I/O 映射(ioremap)和writel/readl的更多相关文章

  1. Linux内核访问外设I/O--动态映射(ioremap)和静态映射(map_desc) (转载)

    [转](转)Linux内核访问外设I/O资源的方式-静态映射(map_desc)方式 Linux内核访问外设I/O资源的方式 Author: Dongas Date: 08-08-02 我们知道默认外 ...

  2. writel(readl(&pwm_timer->tcfg0) | 0xff, &pwm_timer->tcfg0);

    解析这句代码什么意思! 神说:选定预分频器0 为什么? 神说:因为实验中选的是timer1,在预分频器0下: 若选择timer4,该如何写这句代码? 首先看tcfg0中选择预分频器1,在看tcfg1里 ...

  3. 查看Linux服务器被映射的公网ip

    查看Linux服务器被映射的公网ip   现在云服务器非常流行,不仅企业甚至是个人都可能拥有自己的云服务器,但是目前的云服务器厂商提供的公网IP大都是映射而来,所以在Linux服务器上执行ifconf ...

  4. Linux下内存映射文件的用法简介

    由于项目需要,所以学习了一下Linux下内存映射文件的用法,在这里共享一下自己的收获,希望大家提出宝贵意见,进行交流. 简介: 内存映射文件与虚拟内存有些类似,通过内存映射文件可以保留一个地址空间的区 ...

  5. Linux共享文件夹映射到Windows磁盘

    摘自:https://www.jianshu.com/p/4a06121450e5 1.1方案背景 本方案就是在解决磁盘不足的问题而产生的,利用映射盘的原理将Linux共享文件夹映射到Windows磁 ...

  6. linux 内存映射-ioremap和mmap函数

    最近开始学习Linux驱动程序,将内存映射和ioremap,mmap函数相关资料进行了整理 一,内存映射  对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器 ...

  7. Linux 字符设备驱动—— ioremap() 函数解析

    一. ioremap() 函数基础概念 几乎每一种外设都是通过读写设备上的相关寄存器来进行的,通常包括控制寄存器.状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址.根据CPU体系结构的不同, ...

  8. linux kernel内存映射实例分析

    作者:JHJ(jianghuijun211@gmail.com)日期:2012/08/24 欢迎转载,请注明出处 引子 现在android智能手机市场异常火热,硬件升级非常迅猛,arm cortex ...

  9. Linux动态DMA映射

    1. 几种地址类型 虚拟地址 Linux内核使用的地址是虚拟地址,数据类型为void *.例如,kmalloc()和vmalloc()函数返回值就是虚拟地址. 物理地址 处理器真实地址总线上的地址,数 ...

随机推荐

  1. spring security使用哈希加密的密码

    之前我们都是使用MD5 Md5PasswordEncoder 或者SHA ShaPasswordEncoder 的哈希算法进行密码加密,在spring security中依然使用只要指定使用自定义加密 ...

  2. 最简单的CI框架入门示例--数据库取数据

    前提: 安装好MySQL,Apache,PHP. 1.下载CI框架 下载地址  http://www.codeigniter.com/ 2.配置 database.php配置:    为数据库服务器设 ...

  3. LeetCode——Number of Boomerangs

    LeetCode--Number of Boomerangs Question Given n points in the plane that are all pairwise distinct, ...

  4. BI项目中的ETL设计详解(数据抽取、清洗与转换 )(转载)

    原文:http://www.cnblogs.com/reportmis/p/5939732.html ETL是BI项目最重要的一个环节,通常情况下ETL会花掉整个项目的1/3的时间,ETL设计的好坏直 ...

  5. bzoj 3884 上帝与集合的正确用法 指数循环节

    3884: 上帝与集合的正确用法 Time Limit: 5 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description   根据一些 ...

  6. POST方式跨域上传文件

    JSONP请求有限制: 第一,不能跳出两层, 第二,不支持POST. 往往解决跨域POST请求的方案是个"古老"方法, 请求同域下的iframe. 服务器端:  需要附加头信息: ...

  7. 5.8 页面对象(Page Object)模式

    页面对象(Page Object)模式是目前自动化测试领域普遍使用的设计模式之一,此模式可以大大提高测试代码的复用率,提高测试脚本的编写效率和维护效率,是中级自动化测试工程师的必备技能之一. 1.页面 ...

  8. Visual Studio 调试技巧:10 篇热文汇总

    本文精选了 DotNet  2017年11月份的10篇热门文章.其中有技术分享.技术资源. 注:以下文章,点击标题即可阅读 <Visual Studio的调试技巧 > 调试技巧是衡量程序员 ...

  9. LeetCode OJ:Recover Binary Search Tree(恢复二叉搜索树)

    Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...

  10. UI-不常用控件 UIActivityIndicatorView、UIProgressView、UISegmentedControl、UIStepper、UISwitch、UITextView、UIAlertController

    1 //UIActivityIndicatorView //小菊花,加载================================================================ ...