DTS文件,即Device Tree Source,是某些芯片(在Openwrt的target/linux/中,至少ramips,lantiq和BRCM有此文件)用于描述硬件设备资源的文件。此文件是驱动研发人员用来配置这些芯片驱动的必要文件。 要想弄清楚DTS文件中的含义,笔者认为至少需要如下资料:芯片Datasheet,芯片开发手册,单板硬件连接图,单板GPIO配置清单,单板实物(有上盖) 。这里,笔者以配置一款采用MT7620A(主芯片)+MT7610E(5G wifi芯片)架构的路由器为例,描述一下对于DTS文件的解读。

手上资源: “MT7620_Datasheet”,“MT7620_ProgrammingGuide”,“MT7620_EEPROM Content v1_7.pdf”,单板硬件连接图,以及单板的GPIO配置清单,其中主要的几条内容如下:

GPIO#39 WPS_LED/DRAM_TYPE
GPIO#36 POWER ON RESET
GPIO#13 Software Reset/ Factory/Default/WPS PBC
GPIO#72 DRAM_FROM_EE/For
non scan mode/2.4G-Wlan_LED
GPIO#43 LINK3_LED;对应面板上的LAN1口灯
GPIO#42 LINK2_LED;对应面板上的LAN2口灯
GPIO#41 LINK1_LED;对应面板上的LAN3口灯
GPIO#40 LINK0_LED;对应面板上的LAN4口灯

通过分析硬件设计图,可以知道:port4是作为WAN口, 7610E和主CPU是通过PCIE接口连接

此外,linux/Documentation/devicetree目录中有一些说明文件,可以用于参考

OK,一切就绪;

下面解读一下DTS文件:MT7620a_MT7610e.dts (红色是我更改的部分;蓝色部分是注释)

/dts-v1/;
/include/ "mt7620a.dtsi"   /*引用此文件,但同名定义以此文件为主*/
/ { /*根节点*/
compatible = "ralink,mt7620a-eval-board", "ralink,mt7620a-soc"; /*这些字符串列表被操作系统用来选择用哪一个driver来驱动该设备*/
model = "Ralink MT7620A evaluation board"; >; /*Maximum SPI clocking speed of device in Hz;原来值是1000000,比驱动要求的值小;会导致Flash加载失败*/

/*如下分区只针对 8M 大小;当bootloader中没有设定分区定义时,内核就据此来划分Flash分区了*/

partition@0 {
label = "u-boot";  /*此分区的标识,会体现在 /proc/mtd文件中*/
reg = <0x0 0x30000>; /*此分区的偏移量和大小*/
read-only; /*表示此分区只读*/
};
partition@30000 {
label = "u-boot-env";
reg = <0x30000 0x10000>;
read-only;
};
factory: partition@40000 {
label = "factory";
reg = <0x40000 0x10000>;
read-only;
};
kernel: partition@50000 {
label = "kernel";
reg = <0x50000 0x190000>;
};
rootfs: partition@1E0000 {
label = "rootfs";
reg = <0x1E0000 0x620000>;
};
partition{
label = "firmware";
reg = <0x50000 0x7b0000>; /*这是kernel+rootfs的合计*/
};
};
};
};
pinctrl { /*描述pin控制逻辑*/
state_default: pinctrl0 {
/*ralink,group和ralink,function,用于mt7620.c中的识别处理;定义PIN节点:"ephy", "i2c", "uartf", "wled","spi refclk",也可以用于GPIO控制*/
gpio {
ralink,group = "ephy", "i2c", "uartf", "wled", "spi refclk"; 
ralink,function = "gpio";
};
};
};
ethernet@10100000 {
status = "okay";
pinctrl-names = "default";
mtd-mac-address = <&factory 0x28>; /*在分区"factory"的偏移位置0x28,对应LAN侧的MAC地址*/
ralink,port-map = "llllw"; /*ralink,port-map,对应 mt7530.c中的mt7530_find_mapping 识别处理;这里表示port0到port3是lan;port4是wan*/
};
sdhci@10130000 {
status = "okay";
};
pcie@10140000 {
status = "okay";
};
gpio-keys-polled {
compatible = "gpio-keys-polled"; /*用于在gpio-button-hotplug中的识别*/
#address-cells = <1>;
#size-cells = <0>;
poll-interval = <20>; /*用于在gpio-button-hotplug中的轮训间隔设置;单位是ms*/
reset {/*特别定义reset按键*/
label = "reset";
gpios = <&gpio0 13 1>;  /*reset按键的GPIO编号*/
linux,code = <0x198>;  /*当按下reset按键后,向内核发出的code;这些code,用于input_event上报的code代码,具体含义见input.h:比如这里的0x198就对应KEY_RESTART;而在gpio-button-hotplug.c中,有BH_MAP(KEY_RESTART, "reset"),*/
};
};
wmac@10180000 {
ralink,mtd-eeprom = <&factory 0>; /*wifi的K值的读取起始位置*/
mtd-mac-address = <&factory 0x4>; /*wifi的MAC地址,读取起始位置*/
};

/*如下定义led灯控*/

gpio-leds {
compatible = "gpio-leds";
wan {
label = "w856n:blue:wan"; /*led灯的标识,会体现在/sys/class/leds目录中*/
gpios = <&gpio2 4 1>; /*led灯对应的gpio编号;表示是gpio2组中的第4个GPIO;这里的wan对应路由器面板外壳上的丝印*/
};
lan4 {
label = "w856n:blue:lan4";
gpios = <&gpio2 0 1>;
};
lan3 {
label = "w856n:blue:lan3";
gpios = <&gpio2 1 1>;
};
lan2 {
label = "w856n:blue:lan2";
gpios = <&gpio2 2 1>;
};
lan1 {
label = "w856n:blue:lan1";
gpios = <&gpio2 3 1>;
};
wlan {
label = "w856n:blue:wlan";
gpios = <&gpio3 0 1>;
};
wps {
label = "w856n:blue:wps";
gpios = <&gpio1 15 1>;
};
};
};

解读MT7620A上的DTS文件的更多相关文章

  1. Github上传大文件(超过100M)

    上传大文件(超过100M)到Github 笔者上传操作100M的文件到Github,结果在push的时候会自动终止.然后提示无法上传大文件,就算删除再提交也是报错. 于是,本人写这篇博客就是为了解决这 ...

  2. 设备树DTS 学习:Linux DTS文件加载过程

    背景 了解机制有利于对内核有更深的认识. wget https://mirrors.aliyun.com/linux-kernel/v3.x/linux-3.2.61.tar.xz 内核 在drive ...

  3. 使用批处理文件在FTP服务器 上传下载文件

    1.从ftp服务器根目录文件夹下的文件到指定的文件夹下 格式:ftp -s:[配置文件] [ftp地址] 如:ftp -s:c:\vc\ftpconfig.txt   192.168.1.1 建立一个 ...

  4. struts2实现文件上传(多文件上传)及下载

    一.要实现文件上传,需在项目中添加两个jar文件 二.上传准备的页面 注:必须植入enctype="multipart/form-data"属性,以及提交方式要设置成post &l ...

  5. spring mvc文件上传(单个文件上传|多个文件上传)

    单个文件上传spring mvc 实现文件上传需要引入两个必须的jar包    1.所需jar包:                commons-fileupload-1.3.1.jar       ...

  6. 用百度webuploader分片上传大文件

    一般在做文件上传的时候,都是通过客户端把要上传的文件上传到服务器,此时上传的文件都在服务器内存,如果上传的是视频等大文件,那么服务器内存就很紧张,而且一般我们都是用flash或者html5做异步上传, ...

  7. Linux上传下载文件快捷命令

    远程链接Linux(如SecrueCRT),要上传文件很下载文件到Linux服务器,只需要使用sz或者rz命令即可快速下载和上传文件了. 使用方法: 1.首先确保Linux服务器系统中安装了lrzsz ...

  8. 利用SkyDrive Pro 迅速批量下载SharePoint Server 上已上传的文件

    在上一篇<SharePoint Server 2013 让上传文件更精彩>,我们一起了解了如何快速的方便的上传批量文件到SharePoint Server 2013 ,而在这一篇日志中您将 ...

  9. iis6上使用.htaccess文件,ISAPI_Rewrite的安装及使用

    在Apache上很有用的.htaccess文件在IIS上就没有,要想实现类似的跳转功能可以使用ISAPI_Rewrite来代替,这是一个专门为IIS设置的工具,目的就是代替.htaccess实现很多功 ...

随机推荐

  1. My97DatePicker日历控件配置

    一. 简介 1. 简介 目前的版本是:4.72 2. 注意事项 My97DatePicker目录是一个整体,不可破坏里面的目录结构,也不可对里面的文件改名,可以改目录名 My97DatePicker. ...

  2. 安装PIL的坑

    今天在centos中使用pip安装PIL死活不成功,报错: Could not find a version that satisfies the requirement PIL (from vers ...

  3. Sense编辑器(Sense Editor)

    Sense编辑器(Sense Editor) 学习了:https://blog.csdn.net/AbnerGong/article/details/50776605 Sense是一个方便的控制台,用 ...

  4. [Functional Programming Monad] Combine Stateful Computations Using A State Monad

    The true power of the State ADT really shows when we start combining our discrete, stateful transact ...

  5. javascript闭包传参就这么简单

    var query = (function (a) { return a; })('fx'); alert(query);

  6. Java的IO操作,个人理解。

    先看一段代码: import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import ...

  7. lsb_release: command not found 解决

    问题:lsb_release 是查看系统版本信息的工具 [root@localhost ~]# lsb_release -a-bash: lsb_release: command not found ...

  8. zabbix触发的多条件判断表达式

    2 Trigger expression   Overview The expressions used in triggers are very flexible. You can use them ...

  9. ASP.NET前后台交互之JSON数据

    最近由于项目需要做一个Ajax的搜集单表单的多重数据的需求,所以就采用了前端JQuery保存Object对象之后转换成JSON的数据源传递给后台处理的这样的形式,相信有不少人大多时候是接收后台给出的J ...

  10. oracle 数据导入和导出(原创)

    oracle的数据导入导出必须是在两个地方建立相同的用户才能完整导入(本地导入新的数据库需重建权限).所以导入就得按以下步骤进行: 假定服务器端用户为puser 服务器端导出可以这样做: 导出数据:e ...