这是什么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和其他定义什么?这是什么linux结构
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!" };
但在这种情况下,你需要保持秩序的轨道该结构的成员,一目了然不清楚1
,2
等实际使用,并且它可以很容易地不同步。
如果您需要初始化很多像这样的变量,你可以使用一个#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
,所以任何可能通过该函数指针调用该函数。