android 驱动学些入门-------Device Tree 第一篇

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项目。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
device-tree-compiler (dtc) 代表Device Tree Compiler(设备树编译器),是一个用于编译、反汇编和验证设备树的工具。Device Tree 是一种描述硬件和设备的数据结构,用于在嵌入式系统中描述设备的特性和配置信息,在Linux内核中广泛应用。 deb是Debian软件包的文件扩展名,也用于Ubuntu等基于Debian的Linux发行版。在Debian系统中,你可以使用apt-get或dpkg命令来安装和管理软件包。device-tree-compiler deb是针对Debian系统打包的设备树编译器。 安装device-tree-compiler deb可以通过以下步骤完成: 1. 下载device-tree-compiler deb文件(例如device-tree-compiler.deb)。 2. 打开终端,使用cd命令进入deb文件所在目录。 3. 运行sudo dpkg -i device-tree-compiler.deb命令安装软件包。你需要输入管理员密码来确认安装。 4. 等待安装完成。安装过程中,系统会自动解决软件包的依赖关系。 5. 安装完成后,你可以使用device-tree-compiler命令来编译、反汇编和验证设备树。 除了基本的安装和使用,你还可以通过apt-get命令来更新和卸载device-tree-compiler deb。例如,运行sudo apt-get update命令可以更新软件包列表,sudo apt-get upgrade命令可以升级已安装的软件包,sudo apt-get remove device-tree-compiler命令可以卸载软件包。 在嵌入式系统开发中,使用device-tree-compiler可以方便地处理设备树相关的工作。它使开发人员能够轻松编译、反汇编和验证设备树,并将其用于描述设备的特性和配置信息。这对于设备驱动程序开发和系统配置非常有帮助,能够提高开发效率和便捷性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值