添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
DTS ( Device tree source)它基本上就是画一棵 电路板 上CPU、总线、设备组成的树,Bootloader会将这棵树传递给内核,然后内核可以识别这棵树,并根据它展开出Linux内核中的platform_device、i2c_client、spi_device等设备,而这些设备用到的内存、IRQ等资源,也被传递给了内核,内核会将这些资源绑定给展开的相应的设备。
OPENWRT 的dts文件一般位于目录:target\linux\ra MIPS \dts
根据不同机型选择不同的dts文件:
MT7620 a.dts为例:
/dts-v1/;
/include/ "mt7620a.dtsi"   /*引用此文件,但同名定义以此文件为主*/
/ { /*根节点*/
compatible = "ralink,mt7620a-eval-board", "ralink,mt7620a-soc"; /*这些字符串列表被操作系统用来选择用哪一个driver来驱动该设备*/
model = "Ralink MT7620A evaluation board"; /*此字符串会显示在 单板status->system->model 页面中*/
palmbus@10000000 {  /*寄存器映射位置,即0 x1000 ,0000,见《MT7620_ProgrammingGuide》的1.3(P13)的 SYSCTL*/
sysc@0 {/*相对于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: gpio@600 {/*相对于palmbus的偏移,即0x1000,0600,见《MT7620_ProgrammingGuide》的1.3(P13)的 PIO*/
status = "okay"; /*状态为okay,表示此GPIO组可用*/
gpio1: gpio@638 {
status = "okay";
gpio2: gpio@660 {
status = "okay";
gpio3: gpio@688 {
status = "okay";
spi@b00 {/*相对于palmbus的偏移,即0x1000,0b00,见《MT7620_ProgrammingGuide》的1.3(P13)的 SPI*/
status = "okay";
m25p80@0 {/*相对于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分区了*/
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>;
游客,如果您要查看本帖隐藏内容请 回复

在注册总线和设备时,会对dts节点的状态作一个判断,如果节点里面的status属性没有被定义,或者status属性被定义了并且值被设为“ok”或者“okay”,其他情况则不被注册到系统中
我知道答案 回答被采纳将会获得 5 RD币 已有 11 人回答
  • mt6515中GPIO 驱动电流问题
  • MT6575_GPIO_Formal_Application_Spec_0.2.pdf
  • MT6517_GPIO 硬件设计和驱动配置最需要的东西
  • 请教下:MT6515 开机花一下屏,如何解决?(已解决)
  • MT6515 SPEAK 无声音
  • 展讯通过GPIO模拟SPI实现两个展讯板或跟单片机互相收发数据的参考码
  • ARM嵌入式系统开发:软件设计与优化
  • MT6250具有硬件PWM功能的gpio口如何使能输出PWM信号
  • MT6589_GPIO_Formal_Application_Spec_0.3
  •