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