linux - 这是什么linux结构

标签 linux

#define GPIO_CHIP(_bank) { \
    .irq_base = IRQ_GPIO_BASE_ ## _bank, \
    .gpio_chip = { \
        .label = "Bank " # _bank, \
        .owner = THIS_MODULE, \
        .set = gpio_set_value, \
        .get = gpio_get_value, \
        .direction_output =gpio_direction_output, \
        .direction_input = gpio_direction_input, \
        .base = GPIO_BASE_ ## _bank, \
        .ngpio =GPIO_NUM_ ## _bank, \
    }, \
}

用 .label 和 .set 等定义的是什么?

static void gpio_set_value(struct gpio_chip *chip, unsigned gpio, int value)
{
    uint32_t __iomem *reg = CHIP_TO_REG(chip, REG_GPIO_DATA_SET);
    reg += !value;
    writel(BIT(gpio), reg);
}

这个带有 writel, __iomen, BIT() 的函数,它们在 Linux 中是从哪里引用的?

最佳答案

GPIO_CHIP 用于初始化一组 GPIO(通用 I/O)的结构。如果你有

struct s {
   int a, b, c;
   char * d;
}

然后你可以像这样初始化一个变量

struct s example = { .a = 1, .b = 2, .c = 3, .d = "Hello!" };

你也可以这样做

struct s example = { 1, 2, 3, "Hello!" };

但在那种情况下,您需要跟踪结构成员的顺序,一目了然地看不到 12 等. 实际上被用于,它很容易失去同步。

如果你需要像这样初始化很多变量,你可以使用一个#define,它只是一个初始化器,比如

#define S_INIT(num) { .a = num, .b = 2, .c = 3 }
struct s example = S_INIT(0);
struct s examples[] = { S_INIT(1), S_INIT(2), S_INIT(3) };

GPIO_CHIP 将结构中的函数指针 .gpio_chip.set 设置为指向 gpio_set_value,因此对该函数的任何调用都可能通过那个函数指针。

咨询kernel documentation for the GPIO driver interface了解详情。

关于linux - 这是什么linux结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26613049/

相关文章:

linux - 是否有用于在 Linux 上搜索 msword 文档文件的模块?

linux - 屏幕距离不好

linux - Git、Gitolite、部署和 Linux 权限

c++ - 如何计算 ELF 文件中的静态初始值设定项?

c++ - CLOCKS_PER_SEC 在不同操作系统中的行为

linux - 网站从带有 cPanel 的服务器迁移到没有 cPanel 的服务器?

node.js - 从Docker容器获取音频到主机

linux - Vim 命令日志

linux - 如何从视频文件中获取纵横比?

linux - 错误 libapache2-mod-php5 软件包 ubuntu