这个linux结构是什么?

时间:2014-10-28 16:05:46

标签: 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中引用了什么?

1 个答案:

答案 0 :(得分:1)

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