Linux驱动开发中设备树的学习笔记(1)_pad_name combo_tx7n;reg_value 0x0--ttl_r6,0x1--tco

#define MX6UL_PAD_UART1_CTS_B__UART1_DCE_CTS 0x008C 0x0318 0x0000 0x0 0x0
#define MX6UL_PAD_UART1_CTS_B__UART1_DTE_RTS 0x008C 0x0318 0x0620 0x0 0x2
#define MX6UL_PAD_UART1_CTS_B__ENET1_RX_CLK 0x008C 0x0318 0x0000 0x1 0x0
#define MX6UL_PAD_UART1_CTS_B__USDHC1_WP 0x008C 0x0318 0x066C 0x2 0x1
#define MX6UL_PAD_UART1_CTS_B__CSI_DATA04 0x008C 0x0318 0x04D8 0x3 0x0
#define MX6UL_PAD_UART1_CTS_B__ENET2_1588_EVENT1_IN 0x008C 0x0318 0x0000 0x4 0x0
#define MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0x008C 0x0318 0x0000 0x5 0x0
#define MX6UL_PAD_UART1_CTS_B__USDHC2_WP 0x008C 0x0318 0x069C 0x8 0x1


## 在设备树文件中,定义方法如下:



/* sneak KEY /
pinctrl_key: keygrp {
fsl,pins = <
MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0xF080 /
KEY0 */
>;
};


这里以**MX6UL\_PAD\_UART1\_CTS\_B\_\_GPIO1\_IO18**为例



#define MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0x008C 0x0318 0x0000 0x5 0x0


其中:



0x008C—> The pin mux register.
0x0318—> The config register.
0x0000—> The select input register
0x5 —> mux_mode
0 ----> input_value


        这里的mux register和config register对应的数值,都是该寄存器相较于基地址的偏移地址


在设备树文件中上还需要给这个引脚赋值



MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0xF080 /* KEY0 */


0xF080 ->config value


       **这里的赋值可以参考逻辑开发时对该引脚的电气属性配置数值**


## imx6ull 设备树中引脚定义规则和解析——根节点


### **一、根节点命名格式**



/ {
model = “Freescale i.MX6 ULL 14x14 EVK Board”;
compatible = “fsl,imx6ull-14x14-evk”, “fsl,imx6ull”;

chosen {
	stdout-path = &uart1;
};

memory {
	reg = <0x80000000 0x20000000>;
};

reserved-memory {
	#address-cells = <1>;
	#size-cells = <1>;
	ranges;

	linux,cma {
		compatible = "shared-dma-pool";
		reusable;
		size = <0x14000000>;
		linux,cma-default;
	};
};

backlight {
	compatible = "pwm-backlight";
	pwms = <&pwm1 0 5000000>;
	brightness-levels = <0 4 8 16 32 64 128 255>;
	default-brightness-level = <7>;
	status = "okay";
};


/* sneak key 2022/4/18 */
key {
#address-cells = <1>;
#size-cells = <1>;
compatible = “sneak-key”; //compatible兼容属性,属性值为一个字符串列表
pinctrl-names = “default”;
pinctrl-0 = <&pinctrl_key>;
key-gpio = <&gpio1 18 GPIO_ACTIVE_LOW>;
status = “okay”;
};
};


## 二、设备/根节点的常见属性


样例:



/* sneak key 2022/4/18 */
key {
	#address-cells = <1>;
	#size-cells = <1>;
	compatible = "sneak-key";		//compatible兼容属性,属性值为一个字符串列表
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_key>;
	key-gpio = <&gpio1 18 GPIO_ACTIVE_LOW>;
	status = "okay";
};

#### 1、**#address-cells 和#size-cells 属性**


        这两个属性的值都是无符号 32 位整形,#address-cells 和#size-cells这两个属性可以用在任何拥有子节点的设备中,用于描述子节点的地址信息。#address-cells属性值决定了子节点reg 属性中地址信息所占用的字长(32 位),#size-cells属性值决定了子节点 reg属性中长度信息所占的字长(32 位)。#address-cells 和#size-cells 表明了子节点应该如何编写reg属性值,一般 reg 属性都是和地址有关的内容,和地址相关的信息有两种:起始地址和地址长度,reg属性的格式一为:  
  



reg = <address1 length1 address2 length2 address3 length3……>


        每个`“address length”`组合表示一个地址范围,其中 `address`是起始地址,`length`是地址长度,`#address-cells`表明 `address`这个数据所占用的字长,`#size-cells`表明`length`这个数据所占用的字长,比如:



/* sneak 2022/4/9 */
sneak {
	#address-cells = <1>;
	#size-cells = <1>;
	compatible = "sneak-led";
	status = "okay";
	reg = < 0X020C406C 0X04		/* CCM_CCGR1_BASE */
			0X020E0068 0X04		/* SW_MUX_GPIO1_IO03_BASE */
			0X020E02F4 0x04		/* SW_PAD_GPIO1_IO03_BASE */
			0X0209C000 0x04		/* GPIO1_DR_BASE */
			0X0209C004 0X04 >;	/* GPIO1_GDIR_BASE */
};

        #address-cells = <1>;//表示用一个32位的数来描述地址  
         #size-cells = <1>;//表示用1个32位的数来描述该地址的大小  
 上面两个信息#address-cells和#size-cells主要用来描述子节点里面reg的信息  
 reg里面的个数,应该是address-cells + size-cells的整数倍  
         解析上方代码:


        reg的起始地址为0X020C406C 大小为0x04


        reg的起始地址为0X020E02F4 大小为0x04


        reg的起始地址为0X020E02F4 大小为0x04等。


#### 2、**compatible 属性**


`compatible`属性也叫做“兼容性”属性,这是非常重要的一个属性!`compatible` 属性的值是一个字符串列表,`compatible`属性用于将设备和驱动绑定起来。字符串列表用于选择设备所要使用的驱动程序,`compatible` 属性的值格式如下所示:



model = "SMDK24440";
compatible = "samsung,smdk2440","samsung,smdk24140","samsung,smdk24xx";

        这里的compatible属性声明想要什么machine\_desc,属性值可以是一系列字符串,依次与machine\_desc匹配。  
         内核最好支持samsung,smdk2440,如果不支持,再尝试是否支持samsung,smdk24140,再不支持,最后尝试samsung,smdk24xx</code  
 总结如下:  
 设备树根节点的compatible属性列出了一系列的字符串,表示它兼容的单板名,从"最兼容"到次之;


**特别注意,在设备节点中compatible 属性值是为了匹配 Linux 内核中的驱动程序**


**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数嵌入式工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/4684fa0f3b81ea32290a9ad08f5835c2.png)

![img](https://img-blog.csdnimg.cn/img_convert/e6dcffe6b2213d64fa47a661bf15aad7.jpeg)

![img](https://img-blog.csdnimg.cn/img_convert/31338e52967472353604ba2b91f4dc70.png)

 **既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

![img](https://img-blog.csdnimg.cn/img_convert/49258842176655145d75f957b7f7bbba.png)

![img](https://img-blog.csdnimg.cn/img_convert/340199d8847803e8a85e54e5ece82ce0.png)

 

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)**

<img src="https://img-community.csdnimg.cn/images/73bb5de17851459088c6af944156ee24.jpg" alt="img" style="zoom: 67%;" />



# 最后

**资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~**

**你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!**

04z获取!!! (备注:嵌入式)**

<img src="https://img-community.csdnimg.cn/images/73bb5de17851459088c6af944156ee24.jpg" alt="img" style="zoom: 67%;" />



# 最后

**资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~**

**你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!**

**[更多资料点击此处获qu!!](https://bbs.csdn.net/topics/618376385)**
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值