设备树
下面截取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文章
5040浏览量
97412 -
GPIO
+关注
关注
16文章
1204浏览量
52074 -
Milk-V Duo
+关注
关注
2文章
28浏览量
198
发布评论请先 登录
相关推荐
【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
评论