sys_config | 强制性规范 | 主键命名方式统一采用[设备+编号] | 例如: 只有一个设备: [uart0] 存在多个设备: [uart0] [uart1] [uart2] |
子键用来表示设备是否使用,采用“主键名称_used"字段 | 例如: [s_uart0] s_uart0_used=1 | ||
子键值是十进制数值类型 | 例如: [csi0] csi0_mode=1 | ||
子键值是十六进制数值类型 | 例如: [dram0] dram0_zq=0x77bb | ||
主键之间如果存在从属关系,采用[父主键名/子主键名] | 例如: [spi0] spi0_used=1 [spi0/spi0_board0] ... | ||
子键值如果是数值类型,不允许出现负值 | |||
建议性 | 子键用来表示其他配置,采用"主键名称_xxxx"字段 | 例如: [s_uart0] s_uart0_tx=port:PL02<2><default><default><default> s_uart0_rx=port:PL03<2><default><default><default> |
device tree | 强制性规范 | 节点名称前边的lable要跟sys_config 主键名匹配 | device tree配置: /{ soc@01c20000{ s_rsb0: s_rsb@1f03400 { compatible = "allwinner,s_rsb"; reg = <0x0 0x01f03400 0x0 0x400>; interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&s_rsb0_pins_a>; status = "okay"; }; }; }; sys_config配置: [s_rsb0] s_rsb_used = 1 s_rsb_sck = port:PL00<2><1><2><default> s_rsb_sda = port:PL01<2><1><2><default> |
属性值如果为十进制整形数据 | /{ soc@01c20000{ vdevice0: vdevice0{ compatible = "allwinner,vdevice0"; vdevice0_prop_1=<10>; status = "okay"; }; }; }; | ||
属性值如果为十六进制整形数据 | /{ soc@01c20000{ vdevice0: vdevice0{ compatible = "allwinner,vdevice0"; vdevice0_prop_1=<0x10>; status = "okay"; }; }; }; | ||
一个sys_config主键映射到一个device tree节点, 不允许出现多对多映射、一对多映射、多对一映射 | / | ||
节点属性不允许出现label | / | ||
同时在device tree&&sys_config都存在配置的节点, 需要在device tree设备节点中添加device_type属性, 属性值为sys_config的主键名 | device tree配置: /{ soc@01c20000{ s_rsb0: s_rsb@1f03400 { compatible = "allwinner,s_rsb"; device_type = "s_rsb0"; reg = <0x0 0x01f03400 0x0 0x400>; interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&s_rsb0_pins_a>; status = "okay"; }; }; }; sys_config配置: [s_rsb0] s_rsb_used = 1 s_rsb_sck = port:PL00<2><1><2><default> s_rsb_sda = port:PL01<2><1><2><default> |
GPIO | dts配置规范(强制性规范) | 通用GPIO/中断脚配置 | /{ soc@01c20000{ vdevice: vdevice@0{ device_type = "vdevice"; compatible = "allwinner,sun50i-vdevice"; pinctrl-names = "default"; pinctrl-0 = <&vdevice_pins_a>; vdevice_gpio_1 = <&r_pio PL 0 1 1 1 1>; status = "okay"; }; }; }; 例子中GPIO配置参数说明:(例子配置仅说明参数意义,不具备实际配置参考) 参数1:指向哪个PIO控制器,CPU域的GPIO使用&pio, CPUS域的GPIO使用&r_pio 参数2:指明哪个bank,(PA/PB/PC/...) 参数3:指明bank内索引号. 参数4:指明复用功能(0-GPIO IN; 1-GPIO_OUT 6-INTERRUPT) 参数5:指明上下拉配置 参数6:指明驱动力配置 参数7:指明电平配置 |
PIN配置 | dts配置: /{ soc@01c20000{ pinctrl@01c20800{ vdevice_pins_a: vdevice@0 { allwinner,pins = "PB0", "PB1"; allwinner,pname= "vdevice_pin_0", "vdevice_pin_1"; allwinner,function = "vdevice"; allwinner,drive = <2>; allwinner,pull = <1>; allwinner,data = <0>; }; }; vdevice: vdevice@0{ device_type = "vdevice"; compatible = "allwinner,sun50i-vdevice"; pinctrl-names = "vdevice-default"; pinctrl-0 = <&vdevice_pins_a>; vdevice-gpios_1 = <&r_pio PL 0 1 2 3 4>; status = "okay"; }; }; }; sys_config配置: [vdevice] vdevice_used = 1 | ||
vdevice_pin_0 = port:PB01<4><1><2><default> vdevice_pin_1 = port:PB02<4><1><2><default> vdevice_gpios_1 = port:PL00<1><1><1><1> vdevice_prop_1 = 0x1234 vdevice_prop_3 = "device-string" |
dts | 规范 | (1)同个文件下,一个节点中是否存在重复子节点? |
(2)板级配置会覆盖soc配置,需要确认板级配置是否合乎需求. | ||
(3)属性值为value时默认采用16进制,需要注意是否与十进制混淆. | ||
资源 | (1)设备节点clock配置信息是否正确 | |
(2)设备节点memory配置信息是否正确(起始地址、大小、是否存在多片不连续) | ||
(3)设备节点interrupt配置信息是否正确 | ||
(4)设备节点compatible配置信息是否跟驱动保持一致 | ||
(5)设备节点pin配置信息是否正确(用了哪些pin、设备名、属性配置) | ||
(6)设备节点其它属性配置是否正确. | ||
(6)设备节点需要划分好哪些资源与soc相关,哪些与板级相关。
|
sys_config | 规范 | (1)字符串表示可以有两种形式,subkey="xxx" 或者 subkey=string: xxx; 不支持subkey="xxx", "xxx"; |
资源 | ||
SCRIPT_TO_DTS | 规范 | (1)sys_config.fex主键名字定义是否合乎规范, 是否与dts节点label名字保存一致. |
(2)sys_config.fex子键名字定义是否合乎规范, 是否与dts中节点属性名称保存一致。 | ||
(3)sys_config.fex子键如果为value时,是否存在属性值为负数的情况。 | ||
(4)sys_config.fex主键与dts节点一一配对,确保不要出现sys_config几个主键糅合成dts一个节点 | ||
(4)sys_config.fex子键used字段使用是否合乎规范 | ||
资源 | (1)客户可以修改的配置,需要配置在sys_config.fex | |
(2)客户可以删除的配置,只能配置在sys_config.fex | ||
(3)模块需要仔细检查sys_config.fex配置,它优先级最高,会覆盖dts定义的配置. |