設備樹
下面截取gpio0的設備樹,復制自:linux_5.10/arch/riscv/boot/dts/cvitek/cv180x_base.dtsi
gpio0: gpio@03020000 {
compatible = "snps,dw-apb-gpio";
reg = 0x0 0x03020000 0x0 0x1000?>;
#address-cells = 1?>;
#size-cells = 0?>;
porta: gpio-controller@0 {
compatible = "snps,dw-apb-gpio-port";
bank-name = "porta";
gpio-controller;
#gpio-cells = 2?>;
snps,nr-gpios = 32?>;
reg = 0?>;
};
};
以下是復制自:linux_5.10/arch/riscv/boot/dts/cvitek/cv180x_base_riscv.dtsi
gpio0: gpio@03020000 {
porta: gpio-controller@0 {
interrupt-controller;
interrupts = 60 IRQ_TYPE_LEVEL_HIGH?>;
interrupt-parent = &plic0?>;
};
};
驅動
cv180x的GPIO控制器用到是dw-apb-gpio控制器驅動,驅動代碼位于:linux_5.10/drivers/gpio/gpio-dwapb.c
#define DWAPB_DRIVER_NAME "gpio-dwapb"
// 省略其他代碼
static struct platform_driver dwapb_gpio_driver = {
.driver = {
.name = DWAPB_DRIVER_NAME,
.pm = &dwapb_gpio_pm_ops,
.of_match_table = dwapb_of_match,
.acpi_match_table = dwapb_acpi_match,
},
.probe = dwapb_gpio_probe,
};
module_platform_driver(dwapb_gpio_driver);
關鍵函數(shù)是probe函數(shù)
// drivers/gpio/gpio-dwapb.c
dwapb_gpio_probe:
dwapb_gpio_get_pdata(dev)
device_for_each_child_node(dev, fwnode) { //遍歷設備樹節(jié)點
fwnode_property_read_u32(fwnode, "snps,nr-gpios", &pp->ngpio)
fwnode_property_read_u32(fwnode, "reg", &pp->idx)
}
dwapb_gpio_add_port
devm_gpiochip_add_data
devm_gpiochip_add_data_with_key
gpiochip_add_data_with_key //注冊到gpiolib的gpio_devices中
gpio子系統(tǒng)
// drivers/gpio/gpiolib.c
struct gpio_desc *gpio_to_desc(unsigned gpio) //從gpio_devices獲取gpio_desc
// include/asm-generic/gpio.h
// drivers/gpio/gpiolib-sysfs.c
gpio_export:
gpiod_export(gpio_to_desc(gpio), direction_may_change)
device_create_with_groups
device_create_groups_vargs
device_add
kobject_add //添加到相關的設備模型子系統(tǒng)
device_create_file //創(chuàng)建/sys下的設備屬性文件
... //其他相關設置
小結
通過上面的3塊,就實現(xiàn)了/sys/class/gpio/export導出gpio的過程即對gpio的操作。
關于gpio的相關操作函數(shù)就在gpiolib.c里面。
審核編輯 黃宇
-
開發(fā)板
+關注
關注
25文章
5542瀏覽量
102504 -
GPIO
+關注
關注
16文章
1276瀏覽量
53608 -
Milk-V Duo
+關注
關注
2文章
28瀏覽量
328
發(fā)布評論請先 登錄
【Milk-V Duo 開發(fā)板免費體驗】小身板大能力RISC-V開發(fā)板

【Milk-V Duo 開發(fā)板免費體驗】+ 1、開箱

評論