IO内存 与 IO端口 >>Linux 设备驱动程序

本文详细介绍了Linux设备驱动程序中如何访问和操作IO内存及端口,包括内存屏障的创建、I/O内存映射的注册与销毁、IO端口的注册与注销等关键步骤。通过理解这些概念和实践,有助于深入掌握Linux驱动开发。
摘要由CSDN通过智能技术生成

啥时候要是写代码的时候像玩游戏一样开心就好了,我觉得那一天应该不会遥远,要做一个快乐的小二逼 哈哈哈;
懂得越多责任就越重大,喜欢责任重大,那就要让自己一天天的变强大。
如是说就得每天早上给自己一杯自己造的“鸡血”喝,热乎乎的比别人给的容易喝下去;不是吗?

[0x100] 内容概述

  1. 内存读写 checkpoint
  2. IO内存访问与操作
  3. IO端口访问与操作

[0x200] 访问硬件的不同方式

[0x210] 内存读写同步点–内存屏障

[0x211] 创建内存屏障

概念定义 :CPU对内存随机访问的一个同步点,必须执行该点之前的所有I/O 操作,才可以继续执行之后的指令;

#include <linux/compiler-gcc.h >
/*gcc编译器中的内存屏障的调用*/
#define barrier() __asm__ __volatile__("": : :"memory")
#include <asm-generic/barrier.h>
#define mb()    asm volatile ("": : :"memory")
#define rmb()   mb()
#define wmb()   asm volatile ("": : :"memory")
/*多处理器的的内存屏障,按照情况编译,其实都是一个*/
#ifdef CONFIG_SMP
#define smp_mb()        mb()
#define smp_rmb()       rmb()
#define smp_wmb()       wmb()
#else
#define smp_mb()        barrier()
#define smp_rmb()       barrier()
#define smp_wmb()       barrier()
#endif
#include <linux/compiler.h >
/*编译器的宏调用*/
#define barrier() __memory_barrier()

[0x212] 驱动中的实例

 priv->tx_curr_desc++;
        if (priv->tx_curr_desc == priv->tx_ring_size) {
   
                priv->tx_curr_desc = 0;
                len_stat |= DMADESC_WRAP_MASK;
        }
        priv->tx_desc_co
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值