Loading...
首页专栏正文

全志平台uboot节点dts使用说明

free-jdx 发布于 2020-10-13 21:00:02 浏览 1085 点赞 14 收藏 2

1.前言

uboot中,在控制台修改device tree配置使用的方法

2. FDT工具

在UBOOT控制台停下后,输入fdt

sunxi#fdt
fdt - flattened device tree utility commands
Usage:
fdt addr [-c]  <addr> [<length>]   - Set the [control] fdt location to <addr>
fdt move   <fdt> <newaddr> <length> - Copy the fdt to <addr> and make it active
fdt resize                          - Resize fdt to size + padding to 4k addr
fdt print  <path> [<prop>]          - Recursive print starting at <path>
fdt list   <path> [<prop>]          - Print one level starting at <path>
fdt get value <var> <path> <prop>   - Get <property> and store in <var>
fdt get name <var> <path> <index>   - Get name of node <index> and store in <var>
fdt get addr <var> <path> <prop>    - Get start address of <property> and store in <var>
fdt get size <var> <path> [<prop>]  - Get size of [<property>] or num nodes and store in <var>
fdt set    <path> <prop> [<val>]    - Set <property> [to <val>]
fdt mknode <path> <node>            - Create a new node after <path>
fdt rm     <path> [<prop>]          - Delete the node or <property>
fdt header                          - Display header info
fdt bootcpu <id>                    - Set boot cpuid
fdt memory <addr> <size>            - Add/Update memory node
fdt rsvmem print                    - Show current mem reserves
fdt rsvmem add <addr> <size>        - Add a mem reserve
fdt rsvmem delete <index>           - Delete a mem reserves
fdt chosen [<start> <end>]          - Add/update the /chosen branch in the tree
                                        <start>/<end> - initrd start/end addr
fdt save                           - write fdt to flash
NOTE: Dereference aliases by omiting the leading '/', e.g. fdt print ethernet0.

Fdt list 用来查询节点配置 Fdt set 用来修改节点配置

3. 查询配置

先确定要查询的字段在device tree的路径,如果不知道路径,则需要用fdt命令查询

(1)根目录查找
sunxi#fdt list  /    
/ {
        model = "sun50iw1p1";
        compatible = "arm,sun50iw1p1", "arm,sun50iw1p1";
        interrupt-parent = <0x00000001>;
        #address-cells = <0x00000002>;
        #size-cells = <0x00000002>;
        ......................
        cpuscfg {
        };
        ion {
        };
        dram {
...

如果找到需要的配置,比如wlan的配置,可查找关键字

sunxi#fdt list /wlan                //注意路径中的 /
wlan {
        compatible = "allwinner,sunxi-wlan";
        clocks = <0x00000096>;
        wlan_power = "vcc-wifi";
        wlan_io_regulator = "vcc-wifi-io";
        wlan_busnum = <0x00000001>;
        status = "okay";
        device_type = "wlan";
        wlan_regon = <0x00000077 0x0000000b 0x00000002 0x00000001 0xffffffff 0xffffffff 0x00000000>;
        wlan_hostwake = <0x00000077 0x0000000b 0x00000003 0x00000006 0xffffffff 0xffffffff 0x00000000>;
};
(2)SOC目录查找

比如nand0的配置,则该配置可能在soc目录下

sunxi#fdt list /soc
soc@01c00000 {
        compatible = "simple-bus";
        #address-cells = <0x00000002>;
        #size-cells = <0x00000002>;
        ranges;
        device_type = "soc";
       ......................
        hdmi@01ee0000 {
        };
.....

(3)使用路径别名查找 别名是device tree中完整路径的一个简写,有一个专门的节点( /aliases )来表示别名的相关信息,用如下命令可以查看系统中别名的配置情况:

sunxi#fdt list /aliases
aliases {
        serial0 = "/soc@01c00000/uart@01c28000";
       ..............
        mmc0 = "/soc@01c00000/sdmmc@01c0f000";
        mmc2 = "/soc@01c00000/sdmmc@01C11000";
        nand0 = "/soc@01c00000/nand0@01c03000";
        disp = "/soc@01c00000/disp@01000000";
        lcd0 = "/soc@01c00000/lcd0@01c0c000";
        hdmi = "/soc@01c00000/hdmi@01ee0000";
        pwm = "/soc@01c00000/pwm@01c21400";
        boot_disp = "/soc@01c00000/boot_disp";
};

注:在fdt的所有命令中,别名可用path 字段 fdt list [] - Print one level starting at fdt set [] - Set [to ]

4. 修改配置

(1)修改整数配置

命令格式:fdt set path prop 示例: fdt set /wlan wlan_busnum <0x2>

sunxi#fdt list /wlan                
wlan {
        compatible = "allwinner,sunxi-wlan";
        clocks = <0x00000096>;
        wlan_power = "vcc-wifi";
        wlan_io_regulator = "vcc-wifi-io";
        wlan_busnum = <0x00000001>;
        status = "disable";
        device_type = "wlan";
};
sunxi#fdt set /wlan wlan_busnum <0x2>    
sunxi#fdt list /wlan                 
wlan {
        compatible = "allwinner,sunxi-wlan";
        clocks = <0x00000096>;
        wlan_power = "vcc-wifi";
        wlan_io_regulator = "vcc-wifi-io";
        wlan_busnum = <0x00000002>;    //修改后
        status = "disable";
        device_type = "wlan";
};
(2)修改字符串

命令格式:fdt set path prop "xxxxx" 示例: fdt set /wlan status "disable"

sunxi#fdt list /wlan
wlan {
        compatible = "allwinner,sunxi-wlan";
        clocks = <0x00000096>;
        wlan_power = "vcc-wifi";
        wlan_io_regulator = "vcc-wifi-io";
        wlan_busnum = <0x00000001>;
        status = "okay";
        device_type = "wlan";
};
sunxi#fdt set /wlan status "disable"                                               
sunxi#fdt list /wlan                
wlan {
        compatible = "allwinner,sunxi-wlan";
        clocks = <0x00000096>;
        wlan_power = "vcc-wifi";
        wlan_io_regulator = "vcc-wifi-io";
        wlan_busnum = <0x00000001>;
        status = "disable";              //修改后
        device_type = "wlan";
};
sunxi#

5. 保存配置

命令格式:fdt save 作用:保存配置到存储介质上,掉电不会丢失。 运行该命令后,可以接着运行 reset命令重启系统,然后用fdt查询命令看所修改的内容是否已永久生效。

*本文仅代表作者观点,不代表易百纳技术社区立场。系作者授权易百纳技术社区发表,未经许可不得转载。

打赏
打赏作者
free-jdx
您的支持将鼓励我继续创作!
金额:
¥1 ¥5 ¥10 ¥50 ¥100
支付方式:
微信支付
支付宝支付
微信支付
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

易百纳技术社区
确定要删除此文章、专栏、评论吗?
确定
取消
易百纳技术社区