設備樹
下面截取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);
關鍵函數是probe函數
// drivers/gpio/gpio-dwapb.c
dwapb_gpio_probe:
dwapb_gpio_get_pdata(dev)
device_for_each_child_node(dev, fwnode) { //遍歷設備樹節點
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子系統
// 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 //添加到相關的設備模型子系統
device_create_file //創建/sys下的設備屬性文件
... //其他相關設置
小結
通過上面的3塊,就實現了/sys/class/gpio/export導出gpio的過程即對gpio的操作。
關于gpio的相關操作函數就在gpiolib.c里面。
審核編輯 黃宇
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
開發板
+關注
關注
25文章
5210瀏覽量
99126 -
GPIO
+關注
關注
16文章
1223瀏覽量
52745 -
Milk-V Duo
+關注
關注
2文章
28瀏覽量
238
發布評論請先 登錄
相關推薦
【Milk-V Duo 開發板免費體驗】小身板大能力RISC-V開發板
Milk-V Duo是一款基于算能 CV1800B芯片的MPU,能夠運行基于LINUX和RTOS的操作系統。Milk-V Duo為專業人士、工業OEM企業、物聯網愛好者、業余愛好者、D

【Milk-V Duo 開發板免費體驗】+ 1、開箱
Milk-V Duo是一個基于CV1800B芯片的超緊湊嵌入式開發平臺。它可以運行Linux和RTOS,為專業人士、工業ODM、AIoT愛好者、DIY愛好者和創作者提供了一個可靠、低成本和高性能的平臺。

【Milk-V Duo 開發板免費體驗】Milk-V Duo之開箱初體驗
一,第一印象
外觀設計方面,Milk-V Duo以簡約而精致的風格為主,采用沉金工藝,給人一種高端大氣的感覺。開發板的尺寸小巧,便于攜帶和使用,在我拿到的所有的開發板中,也只有
發表于 07-16 01:15
【Milk-V Duo 開發板免費體驗】Milk-V Duo 開發板學習初體驗
第一次申請成功,心情很是喜悅,經過幾天的等待收到了我心心念念的Milk-V Duo 開發小板。
迫不及待的開始了學習初體驗,先犧牲下愛車的行車記錄儀SD卡貢獻下
1、直接下載鏡像
發表于 07-28 15:58
【Milk-V Duo 開發板免費體驗】milkv-duo 申請成功體驗
。
引腳圖
總結
Milk-V Duo開發板的小巧精致設計和強悍的性能確實為創客和開發者提供了一個優秀的平臺。它的緊湊設計使得它適用于各種空間有限的場景,同時強大的性能可以支持復雜
發表于 07-29 14:31
【Milk-V Duo 開發板免費體驗】初體驗(一)---- 初識GPIO外掛點燈
1、初識milk-v duo GPIO
milk-v duo將GPIO分為了五組,每組32個端口
發表于 08-16 08:04
【Milk-V Duo 開發板免費體驗】Milk-V Duo 開發板初體驗
今天收到 ,打開快遞的第一感覺就是非常精致小巧,一個黑色的小盒子及一塊非常小巧但功能非常完善的開發板。
Milk-V Duo是一款基于算能 CV1800B芯片的MPU,能夠運行基于LINUX
發表于 08-18 00:26
【Milk-V Duo 開發板免費體驗】3-Linux控制小車方向
接上兩篇:【Milk-V Duo 開發板免費體驗】2控制螺旋槳電路https://bbs.elecfans.com/jishu_2371054_1_1.html
【
發表于 08-20 23:57
【Milk-V Duo 開發板免費體驗】4-Linux控制小車動作(原創)首發
接上三篇:
[接上兩篇:【Milk-V Duo 開發板免費體驗】3-Linux控制小車方向https://bbs.elecfans.com/jishu_2371135_1_1.html
發表于 08-21 02:11
【Milk-V Duo 開發板免費體驗】②、ssh連接Milk-V Duo開發板
承接上期的開箱貼,此次將Milk-V Duo開發板運行linux系統。在此之前需要手頭準備一張8GB以上的TF卡,并使用讀卡器將TF燒錄Linux鏡像文件。這里需要借助燒寫工具rufus,這款工具
發表于 08-29 00:53
評論