全志平台SUNXI device tree和sys_config.fex配置规范

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_rsb0s_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>
GPIOdts配置规范(强制性规范)通用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定义的配置.

 

<think>嗯,用户问的是sunxi-fexc这个程序的作用。首先,我需要确定用户对全志科技(Allwinner)的工具有没有基础了解。之前他们问过F1C100s的FEL模式,可能是在进行嵌入式开发或者修复设备,所以这次的问题可能也是相关的工具使用。 sunxi-fexc这个工具,我记得是全志芯片的配置文件相关的。全志的芯片通常使用FEX文件(.fex)作为硬件配置描述,类似于设备树的作用。但用户可能不太清楚FEX设备树之间的区别,所以需要解释清楚。 用户可能是在配置自己的开发板,遇到了需要修改硬件设置的情况,比如GPIO、内存分配或者外设配置。这时候sunxi-fexc的作用就是转换FEX文件二进制格式,因为全志的引导程序需要二进制配置,而开发时编辑的是文本格式的FEX文件。 另外,用户可能在使用过程中遇到了转换的问题,或者不知道如何将修改后的配置应用到系统中。这时候需要说明sunxi-fexc的具体用法,比如如何将.fex转换成.bin,或者反向操作。可能还需要提到一些常见的使用场景,比如配置屏幕参数、调整GPIO引脚功能等。 用户可能还关心这个工具其他工具(比如sunxi-tools中的其他命令)的关系,是否需要配合使用。比如在编译固件时,是否需要在某个步骤中使用sunxi-fexc来生成必要的二进制配置。 此外,用户可能对FEX文件的结构语法不太熟悉,需要简要说明FEX文件的组成部分,以及如何编辑它。虽然用户没有直接问这个,但作为相关知识点,简要提及可能有助于他们更好地理解工具的作用。 最后,要确保回答清晰,结构分明,步骤明确,这样用户能快速找到所需信息。同时,考虑到用户可能是在实际开发中遇到问题,给出示例命令典型流程会很有帮助,比如如何将.fex转换为.bin,并打包到固件中。</think>`sunxi-fexc` 是 **全志(Allwinner)芯片开发工具链** 中的关键工具,主要用于 **FEX 文件与二进制配置的相互转换**。以下是详细说明: --- ### **1. 核心作用** - **FEX 文件编译**:将人类可读的文本格式 **.fex** 文件(硬件配置描述)转换为二进制格式 **.bin**,供全志 Bootloader(如 U-Boot)加载。 - **逆向解析**:将二进制配置(如从芯片中读取的配置)反向解析为可编辑的 .fex 文本文件。 --- ### **2. FEX 文件的重要性** 全志芯片通过 **FEX**(*Fex Ellaborate Xtended*)文件定义硬件行为,类似于设备树(Device Tree),但语法更简单。它包含: - **GPIO 引脚配置**(复用功能、上下拉、驱动能力) - **内存分配**(DRAM 参数、时钟) - **外设初始化**(LCD 屏幕、触摸屏、摄像头等) - **系统参数**(电源管理、启动选项) --- ### **3. 典型使用场景** - **开发板配置**:适配新硬件时,通过修改 `.fex` 文件定义外设行为。 - **固件定制**:调整屏幕分辨率、修改按键映射、启用/禁用特定硬件模块。 - **故障排查**:逆向分析现有固件的二进制配置,还原为可读的 `.fex` 文件。 --- ### **4. 基本命令示例** ```bash # 将 .fex 文本文件编译为二进制 .bin sunxi-fexc script.fex script.bin # 将二进制 .bin 逆向解析为 .fex 文本(可能丢失部分注释) sunxi-fexc -I bin -O fex script.bin decompiled.fex ``` --- ### **5. 工作流程示例(以修改屏幕参数为例)** 1. 从固件中提取原始的 `sys_config.bin`; 2. 使用 `sunxi-fexc` 将其逆向解析为 `sys_config.fex`; 3. 编辑 `sys_config.fex`,修改 `lcd_para` 段的屏幕时序参数; 4. 重新编译为 `sys_config.bin` 并烧录到设备; 5. 重启设备,验证新配置是否生效。 --- ### **6. 注意事项** - **语法严格性**:.fex 文件对缩进格式敏感,需严格遵循全志定义的结构。 - **版本兼容性**:不同全志芯片(如 F1C100s、H3、A64)的 FEX 字段可能不同,需参考对应文档。 - **工具依赖**:通常需配合 `sunxi-tools` 中的其他工具(如 `fel`、`sunxi-nand-part`)使用。 --- 通过 `sunxi-fexc`,开发者可以灵活定制全志芯片的硬件行为,是嵌入式系统适配优化的核心工具之一。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值