RK平台查看板子上的dts信息

简介

dts文件描述了硬件每个模块的信息,我们嵌入式软件的调试很多时候都是在改dts文件,有时候我们不确定板子上的固件是否已经更新了我们的修改,这时候我们可以直接读取板子上的dts信息,下面来演示一下。

进入uboot命令行模式

RK的默认SDK中,如果想进入uboot命令行模式,开机的时候在调试串口界面按住键盘的CTRL+C,上电,这时候如果看到如下信息,就说明已经进入uboot命令行模式:

Hit key to stop autoboot('CTRL+C'):  0 
=> <INTERRUPT>
=> <INTERRUPT>
=> <INTERRUPT>

fdt基本操作

FDT,flatted device tree,直接翻译过来是:扁平设备树,大概意思就是把设备信息结构存放到device tree文件中。这里我们可以通过帮助选项看其应用:

=> fdt
fdt - flattened device tree utility commands

Usage:
fdt addr [-c]  <addr> [<length>]   - Set the [control] fdt location to <addr>
fdt apply <addr>                    - Apply overlay to the DT
fdt move   <fdt> <newaddr> <length> - Copy the fdt to <addr> and make it active
fdt resize [<extrasize>]            - Resize fdt to size + padding to 4k addr + some optional <extrasize> if needed
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
NOTE: Dereference aliases by omitting the leading '/', e.g. fdt print ethernet0.

读dts信息

从上面的帮助选项我们可以看到,通过fdt list <path> [<prop>]就可以读到某个模块的信息,那么,我们怎么知道对应模块的path呢?以RK3568的otg口usbdrd_dwc3控制器节点为例,这里有两种方法:

  • 从源代码的dts配置获取
        usbdrd30: usbdrd {
                compatible = "rockchip,rk3568-dwc3", "rockchip,rk3399-dwc3";
                clocks = <&cru CLK_USB3OTG0_REF>, <&cru CLK_USB3OTG0_SUSPEND>,<&cru ACLK_USB3OTG0>, <&cru PCLK_PIPE>;
                clock-names = "ref_clk", "suspend_clk","bus_clk", "pipe_clk";
                #address-cells = <2>; 
                #size-cells = <2>; 
                ranges;
                status = "disabled";

                usbdrd_dwc3: dwc3@fcc00000 {
                        compatible = "snps,dwc3";
                        reg = <0x0 0xfcc00000 0x0 0x400000>;
                        interrupts = <GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>;
                        dr_mode = "otg";
                        phys = <&u2phy0_otg>, <&combphy0_us PHY_TYPE_USB3>;
                        phy-names = "usb2-phy", "usb3-phy";
                        phy_type = "utmi_wide";
                        power-domains = <&power RK3568_PD_PIPE>;
                        resets = <&cru SRST_USB3OTG0>;
                        reset-names = "usb3-otg";
                        snps,dis_enblslpm_quirk;
                        snps,dis-u1u2-quirk;
                        snps,dis-u2-freeclk-exists-quirk;
                        snps,dis-del-phy-power-chg-quirk;
                        snps,dis-tx-ipgap-linecheck-quirk;
                        snps,dis_rxdet_inp3_quirk;
                        snps,xhci-trb-ent-quirk;
                        quirk-skip-phy-init;
                        status = "disabled";
                };   
        };   

从rk3568.dtsi可以看到,usbdrd_dwc3是在usbdrd30节点下面,usbdrd30是根节点,因此path应该是:/usbdrd/dwc3@fcc00000

  • 打印所有节点信息
    在uboot命令行模式下,执行fdt print可以把dts所有的节点信息打印出来,然后查找到你想要的节点名字,如:
usbdrd_dwc3 = "/usbdrd/dwc3@fcc00000";

因此path应该是:/usbdrd/dwc3@fcc00000
确认path之后,执行指令,结果为:

=> fdt list /usbdrd/dwc3@fcc00000
dwc3@fcc00000 {
        compatible = "snps,dwc3";
        reg = <0x00000000 0xfcc00000 0x00000000 0x00400000>;
        interrupts = <0x00000000 0x000000a9 0x00000004>;
        dr_mode = "otg";
        phys = <0x00000024 0x00000020 0x00000004>;
        phy-names = "usb2-phy", "usb3-phy";
        phy_type = "utmi_wide";
        power-domains = <0x00000021 0x0000000f>;
        resets = <0x0000001f 0x00000094>;
        reset-names = "usb3-otg";
        snps,dis_enblslpm_quirk;
        snps,dis-u1u2-quirk;
        snps,dis-u2-freeclk-exists-quirk;
        snps,dis-del-phy-power-chg-quirk;
        snps,dis-tx-ipgap-linecheck-quirk;
        snps,dis_rxdet_inp3_quirk;
        snps,xhci-trb-ent-quirk;
        quirk-skip-phy-init;
        status = "okay";
        extcon = <0x00000025>;
        phandle = <0x0000016f>;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值