android 驱动学些入门

编程入门 行业动态 更新时间:2024-10-15 06:17:02

android 驱动学些<a href=https://www.elefans.com/category/jswz/34/1770026.html style=入门"/>

android 驱动学些入门

dts的实例:

上面的dts,注意以下几点
1:rtk_gpio_ctl_mlk这个是node的名字,可以随便定义,可以通过驱动程序打印当前使用的设备树节点
printk(“now dts node name is %s\n”,pdev->dev.of_node->name);
2:compatible选项是用来和驱动程序中of_match_table指针所指向of_device_id结构里的compatible字段匹配的,只有dts里的compatible字段的名字和驱动程序中of_device_id里的compatible字段的名字一样,驱动程序才能进入probe函数
3:对于gpios这个字段,首先&rtk_iso_gpio指明了这个gpio是连接到的是rtk_iso_gpio,接着那个8是gpio number偏移量,它是以rtk_iso_gpiobase为基准的,紧接着那个0说明目前配置的gpio number 是设置成input,如果是1就是设置成输出output,最后一个字段1是指定这个gpio默认为高电平,如果是0则是指定这个gpio默认是低电平
4:如果驱动里面只是利用compatible字段进行匹配进入probe函数,那么gpios可以不需要,但是如果驱动程序里面是采用设备树相关的方法进行操作获取gpio number,那么gpios这个字段必须使用。gpios这个字段是由of_get_gpio_flags函数默认指定的name.
获取gpio number的函数如下:
of_get_named_gpio_flags()
of_get_gpio_flags()

注册i2c_board_info,指定IRQ等板级信息
static struct i2c_board_info __initdata afeb9260_i2c_devices[] = {{I2C_BOARD_INFO("tlv320aic23",0X1a),},{I2C_BOARD_INFO("fm3130",0X68);},{I2C_BOARD_INFO("24c64",0x50);}
};
之类的i2c_board_info代码,目前不在需要出现,现在只需要tlv320aic23,fm3130,24c64这些设备节点填充作为相应的I2C controller节点的子节点
i2c@1,0 {compatible = "acme,a1234-i2c-bus";  …  rtc@58 {compatible = "maxim,ds1338";reg = <58>;interrupts = < 7 3 >;};};
Device Tree 中的I2C client透过I2C host驱动的probe()函数中调用of_i2c_register_devices(&i2c_dev->adapter) 

常见的DTS 函数
Linux 内核目前DTS相关的函数都是以of_前缀开头的,他们的实现位于内核源码的driver/of下面

void _iomem* of_iomap(struct device_node *node, int index)

通过设备节点直接进行设备内存区间的ioremap(),index是内存段的索引。若设备节点的reg属性有多段,可通过index标识要ioremap的是哪一段,只有1段的情况,index为0。采用Device Tree后,大量的设备驱动通过of_iomap()进行映射,而不再通过传统ioremap

DTC(device tree compiler)

将.dts编译为.dtb的工具。DTC的源代码位于内核scripts/dtc目录,在linux内核使能了Device Tree的情况下,编译内核的时候主机工具DTC就被编译出来,对应scripts/dts/Makefile中"hostprogs-y := dtc" 这一hostprogs编译target。在linux内核的arch/arm/boot/dts/Makefile中,描述了当某种SOC被选中后,哪些.dtb文件会编译出来,如与VEXPRESS对应的.dtb包括:

dtb-$(CONFIG_ARCH_VEXPRESS) += vexpress-v2p-ca5s.dtb \vexpress-v2p-ca9.dtb \vexpress-v2p-ca15-tc1.dtb \vexpress-v2p-ca15_a7.dtb \xenvm-4.2.dtb

我们可以单独编译Device Tree文件。当我们在Linux内核下运行make dtbs时,若选择了ARCH_VEXPREE,上述.dtb都会由对应的.dts编译出。因为arch/arm/Makefile中含有一个dtbs编译target项目。

更多推荐

android 驱动学些入门

本文发布于:2024-03-12 01:28:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1730384.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:入门   android

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!