// SPDX-License-Identifier: GPL-2.0
/*
* SAMSUNG SMDK2440 board device tree source
*
* Copyright (c) 2018 weidongshan@qq.com
* dtc -I dtb -O dts -o jz2440.dts jz2440.dtb
*/
#define S3C2410_GPA(_nr) ((0<<16) + (_nr))
#define S3C2410_GPB(_nr) ((1<<16) + (_nr))
#define S3C2410_GPC(_nr) ((2<<16) + (_nr))
#define S3C2410_GPD(_nr) ((3<<16) + (_nr))
#define S3C2410_GPE(_nr) ((4<<16) + (_nr))
#define S3C2410_GPF(_nr) ((5<<16) + (_nr))
#define S3C2410_GPG(_nr) ((6<<16) + (_nr))
#define S3C2410_GPH(_nr) ((7<<16) + (_nr))
#define S3C2410_GPJ(_nr) ((8<<16) + (_nr))
#define S3C2410_GPK(_nr) ((9<<16) + (_nr))
#define S3C2410_GPL(_nr) ((10<<16) + (_nr))
#define S3C2410_GPM(_nr) ((11<<16) + (_nr))
/dts-v1/;
/ {
model = "SMDK24440";
compatible = "samsung,smdk2440";
#address-cells = <1>;
#size-cells = <1>;
memory@30000000 {
device_type = "memory";
reg = <0x30000000 0x4000000>;
};
/*去掉不使用的源代码;每个设备使用';'隔开;
cpus {
cpu {
compatible = "arm,arm926ej-s";
};
};
*/
chosen {
bootargs = "noinitrd root=/dev/mtdblock4 rw init=/linuxrc console=ttySAC0,115200";
};
/* led里面有两个属性:
* compatible兼容的,内核将根据这个属性在内核里面找到支持这个节点的驱动/平台drv,
* reg即寄存器,arm架构里寄存器与内存是被同样对待的,访问空间/方式几无差别,S3C2410_GPF(5)计算结果即高/低16bit都是5;
* reg本意是寄存器的地址,在此指定了 S3C2410_GPF(5) 的值是引脚,是我们定义的某个宏,1是size,在我们的场景里未用,但必须提供。
*/
led {
compatible = "jz2440_led";
reg = <S3C2410_GPF(5) 1>;
};
};
等会我们的设备树需要把 reg = <S3C2410_GPF(5) 1>; 资源做寄存器,把它的值取出来,作为引脚。
下面把它上传到内核代码里面去重新编译(设备树文件),然后使用它来启动内核,再看看内核中的这个结点构造出了什么样的设备节点。