解读MT7620A上的DTS文件

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"; /*此字符串会显示在 单板status->system->model 页面中*/

[email protected] {  /*寄存器映射位置,即0x1000,0000,见《MT7620_ProgrammingGuide》的1.3(P13)的 SYSCTL*/

[email protected] {/*相对于palmbus的偏移,即0x1000,0000,见《MT7620_ProgrammingGuide》的1.3(P13)的 SYSCTL*/

ralink,gpiomux = "i2c", "jtag"; /*表示i2c和jtag,也可以用于gpio控制;具体到这里,是由于按键要用到i2c*/

ralink,uartmux = "gpio"; /*表示gpio,也可以用于UART输出*/

ralink,wdtmux = <1>;

};

/*MT7620A将GPIO分为4组,如下是针对各组的定义*/

gpio0: [email protected] {/*相对于palmbus的偏移,即0x1000,0600,见《MT7620_ProgrammingGuide》的1.3(P13)的 PIO*/

status = "okay"; /*状态为okay,表示此GPIO组可用*/

};

gpio1: [email protected] {

status = "okay";

};

gpio2: [email protected] {

status = "okay";

};

gpio3: [email protected] {

status = "okay";

};

[email protected] {/*相对于palmbus的偏移,即0x1000,0b00,见《MT7620_ProgrammingGuide》的1.3(P13)的 SPI*/

status = "okay";

[email protected] {/*相对于SPI的偏移*/

#address-cells = <1>;

#size-cells = <1>;

compatible = "en25q64";

reg = <0 0>; /*mtd中的偏移量和大小*/

linux,modalias = "m25p80", "en25q64";

spi-max-frequency = <10000000>; /*Maximum SPI clocking speed of device in Hz;原来值是1000000,比驱动要求的值小;会导致Flash加载失败*/

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

[email protected] {

label = "u-boot";  /*此分区的标识,会体现在 /proc/mtd文件中*/

reg = <0x0 0x30000>; /*此分区的偏移量和大小*/

read-only; /*表示此分区只读*/

};

[email protected] {

label = "u-boot-env";

reg = <0x30000 0x10000>;

read-only;

};

factory: [email protected] {

label = "factory";

reg = <0x40000 0x10000>;

read-only;

};

kernel: [email protected] {

label = "kernel";

reg = <0x50000 0x190000>;

};

rootfs: [email protected] {

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";

};

};

};

[email protected] {

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*/

};

[email protected] {

status = "okay";

};

[email protected] {

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"),*/

};

};

[email protected] {

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>;

};

};

};

时间: 2024-11-12 07:51:51

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

WebUploader插件上传大文件单文件和多文件JAVA版使用总结

一.使用webuploader插件的原因说明 被现在做的项目坑了. 先说一下我的项目架构Spring+struts2+mybatis+mysql 然后呢.之前说好的按照2G上传就可以了,于是乎,用了ajaxFileUpload插件,因为之前用图片上传也是用这个,所以上传附件的时候就直接拿来用了 各种码代码,测试也测过了,2G文件上传没问题,坑来了,项目上线后,客户又要求上传4G文件,甚至还有20G以上的..纳尼,你不早说哦... 在IE11下用ajaxFileUpload.js插件上传超过4G的

eclipse中导入jdk源码、SpringMVC注解@RequestParam、SpringMVC文件上传源码解析、ajax上传excel文件

eclipse中导入jdk源码:http://blog.csdn.net/evolly/article/details/18403321, http://www.codingwhy.com/view/799.html. ------------------------------- SpringMVC注解@RequestParam:http://825635381.iteye.com/blog/2196911. --------------------------- SpringMVC文件上传源

SFTP上传下载文件

secureCRT SFTP上传/下载文件 远程登陆IP secureCRT会话中点击SFTP 3.cd  /home/dowload       linux平台切换到/home/dowload目录 4.cd d:\   windows平台切换到d盘 5.put 文件名           上传 /home/dowload目录下 6.get 文件名   下载文件到windows平台 d盘

Linux上传下载文件

2种方式:xftp(工具).lrzsz xftp:协议--SFTP.端口号--22 lrzsz: rz,sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具. 优点就是不用再开一个sftp工具登录上去上传下载文件. sz(下载):将选定的文件发送(send)到本地机器 rz(上传):运行该命令会弹出一个文件选择窗口,从本地选择文件上传到Linux服务器 安装命令:yum install lrzsz 从服务端发送文件到客户端:sz filename 从客户端上传文件到服务

Struts文件上传allowedTypes问题,烦人的“允许上传的文件类型”

Struts的文件上传问题,相信很多人都会使用allowedTypes参数来配置允许上传的文件类型,如下. [html] view plaincopy <param name="allowedTypes"> image/png,image/bmp,image/jpg </param> 但是,用过这个参数的人都知道,allowedTypes是“文件类型”, 而不是“文件后缀名”,文件类型与文件后缀名有什么区别呢? 就如后缀名为bmp的图片的文件类型为image/b

SpringMVC实现单文件上传、多文件上传、文件列表显示、文件下载

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 一.新建一个Web工程,导入相关的包 springmvc的包+commons-fileupload.jar+connom-io.jar+commons-logging,jar+jstl.jar+standard.jar 整个相关的包如下: 整个工程目录如下: 二.配置web.xml和SpringMVC文件

uploadify上传大文件

引言 之前使用Uploadify做了一个上传图片并预览的功能,今天在项目中,要使用该插件上传大文件.之前弄过上传图片的demo,就使用该demo进行测试.可以查看我的这篇文章: [Asp.net]Uploadify所有配置说明,常见bug问题分析 . 大文件上传 第一步:修改uploadify参数 1 'fileSizeLimit': '0',//单个文件大小,0为无限制,可接受KB,MB,GB等单位的字符串值 2 'fileTypeDesc': '文件',//文件描述Image Files 3

如何禁止 Mac OS X 在外接设备上生成 .DS_Store 文件?以及如何批量删除 .DS_Store 文件?

如何禁止 Mac OS X 在外接设备上生成 .DS_Store 文件?以及如何批量删除 .DS_Store 文件?原文链接:http://www.java2class.net/bbs/viewthread.php?tid=254背景信息.DS_Store文件(Desktop Services Store)是一个隐藏的文件,在每一个目录下都有,它存放着这个文件目录的一些特定属性信息 Metadata,比如图标大小.位置.背景图片等属性:有点儿类似于 Windows 操作系统上的 Thumbs.d

微信企业号上传媒体文件之服务器文件上传

微信企业号上传媒体文件之服务器文件上传 企业在使用接口时,对多媒体文件.多媒体消息的获取和调用等操作,是通过media_id来进行的. 通过接口https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE,企业可以上传多媒体文件. 注意,每个多媒体文件(media_id)会在上传到微信服务器3天后自动删除,以节省服务器资源. 通常文件上传是通过html表单进行的,通过HttpURLConn