【linux】【驱动】<specifier>-map-pass-thru讲解

简介: 【linux】【驱动】<specifier>-map-pass-thru讲解

< specifier>-map-pass-thru讲解

提示:仅供学习

一、DTS示列代码

soc {
  soc_gpio1: gpio-controller1 {
    #gpio-cells = <2>;
  };
  soc_gpio2: gpio-controller2 {
    #gpio-cells = <2>;
  };
};
connector: connector {
  #gpio-cells = <2>;
  gpio-map =  <0 0 &soc_gpio1 1 0>,
        <1 0 &soc_gpio2 4 0>,
        <2 0 &soc_gpio1 3 0>,
        <3 0 &soc_gpio2 2 0>;
  gpio-map-mask = <0xf 0x0>;
  gpio-map-pass-thru = <0x0 0x1>;
};
expansion_device {
  reset-gpios = <&connector 2 GPIO_ACTIVE_LOW>;
};

二、gpio-map-pass-thru 讲解

讲述了如何使用掩码在父单元标识符和子单元标识符之间进行映射。


设备树映射掩码的作用

在设备树的 gpio-map 属性中,掩码用于定义如何将子单元标识符映射到父单元标识符。掩码的具体作用如下:


掩码定义:


gpio-map-mask:定义了一个掩码,表示哪些位会影响映射操作。这个掩码用于从父单元标识符中清除特定的位,并将子单元标识符中的相关位复制到父单元标识符。

掩码应用:


清除父单元标识符中的位:掩码中的每一位为 1 的位置会从父单元标识符中清除。这意味着,掩码决定了父单元标识符中需要被忽略的位。

从子单元标识符复制位:掩码中的每一位为 1 的位置会将子单元标识符中相应位置的位复制到父单元标识符中。

示例

假设有以下掩码和单元标识符:


掩码:gpio-map-mask = <0x0 0x3>

子单元标识符:0x0 0xA

父单元标识符:0x0 0x5

掩码 0x3 表示我们关注的是父单元标识符的低两位(即 0b11)。


步骤如下:


清除父单元标识符中的位:


原始父单元标识符:0x5(即 0b0101)

掩码为 0x3,即 0b0011

清除父单元标识符中与掩码相应的位:

plaintext

0b0101 & ~(0b0011) = 0b0101 & 0b1100 = 0b0100

清除后的父单元标识符是 0x4(即 0b0100)

从子单元标识符复制位:


子单元标识符:0xA(即 0b1010)

掩码为 0x3,即 0b0011

复制子单元标识符中掩码相应的位:

plaintext

(0b1010 & 0b0011) = 0b0000

复制的位是 0x0(即 0b0000)

结合结果:


将清除后的父单元标识符与复制的位结合:

plaintext

0b0100 | 0b0000 = 0b0100

最终得到的父单元标识符是 0x4(即 0b0100)

总结

掩码用于在将子单元标识符映射到父单元标识符时进行位操作。掩码中的每一位为 1 的位置会从父单元标识符中清除相应位,并从子单元标识符中复制相应位。这确保了父单元标识符被正确地更新以反映子单元标识符中的值。


相关文章
|
4月前
|
Java Linux API
Linux设备驱动开发详解2
Linux设备驱动开发详解
54 6
|
4月前
|
消息中间件 算法 Unix
Linux设备驱动开发详解1
Linux设备驱动开发详解
58 5
|
4月前
|
Ubuntu NoSQL Linux
Linux内核和驱动
Linux内核和驱动
33 2
|
4月前
|
数据采集 Linux
Linux源码阅读笔记20-PCI设备驱动详解
Linux源码阅读笔记20-PCI设备驱动详解
|
5月前
|
存储 JSON Linux
|
5月前
|
Oracle 关系型数据库 Linux
讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so
通过这一连串的步骤,可以专业且有效地在Linux下为Qt编译Oracle驱动库 `libqsqloci.so`,使得Qt应用能够通过OCI与Oracle数据库进行交互。这些步骤适用于具备一定Linux和Qt经验的开发者,并且能够为需要使用Qt开发数据库应用的专业人士提供指导。
169 1
讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so
|
3月前
|
Linux API
Linux里的高精度时间计时器(HPET)驱动 【ChatGPT】
Linux里的高精度时间计时器(HPET)驱动 【ChatGPT】
|
4月前
|
Linux
【linux】【驱动】phy接口类型
【linux】【驱动】phy接口类型
24 0
|
5月前
|
缓存 网络协议 算法
【Linux系统编程】深入剖析:四大IO模型机制与应用(阻塞、非阻塞、多路复用、信号驱动IO 全解读)
在Linux环境下,主要存在四种IO模型,它们分别是阻塞IO(Blocking IO)、非阻塞IO(Non-blocking IO)、IO多路复用(I/O Multiplexing)和异步IO(Asynchronous IO)。下面我将逐一介绍这些模型的定义:
263 2
|
6月前
|
Linux
【GEC6818开发板】Linux驱动中printk无法在终端输出显示
【GEC6818开发板】Linux驱动中printk无法在终端输出显示