您的位置:首页 > 运维架构 > Linux

嵌入式Linux驱动笔记(九)------dts设备树在2440使用

2017-08-24 21:42 441 查看

你好!这里是风筝的博客,

欢迎和我一起多多交流。

ARM社区一贯充斥的大量垃圾代码导致Linus盛怒,因此社区在2011年到2012年进行了大量的工作。ARM Linux开始围绕Device Tree展开,Device Tree有自己的独立的语法,它的源文件为.dts,编译后得到.dtb,Bootloader在引导Linux内核的时候会将.dtb地址告知内核。之后内核会展开Device Tree并创建和注册相关的设备。因此arch/arm/mach-xxx和arch/arm/plat-xxx中大量的用于注册platform、I2C、SPI板级信息的代码被删除,而驱动也以新的方式和.dts中定义的设备结点进行匹配。

Device Tree是一种描述硬件的数据结构,它起源于 OpenFirmware (OF)。所以看到带有OF 字样的API函数就要小心了。

这里 ,我们先看kernel部分

在arch/arm/boot/dts里面,发现并没有关于2440的设备树文件,但是发现2416采用了设备树。其中,有dts文件和dtsi文件,先说下这两者关系:

.dts文件是一种ASCII文本格式的DeviceTree描述。基本上,在ARMLinux内,一个.dts文件对应一个ARM的machine,一般放置在内核的arch/arm/boot/dts/目录。由于一个SoC可能对应多个machine(一个SoC可以对应多个产品和电路板),势必这些.dts文件需包含许多共同的部分。Linux内核为了简化,把SoC公用的部分或者多个machine共同的部分一般提炼为.dtsi,类似于C语言的头文件。其他的machine对应的.dts就include这个.dtsi。

所以,我们编写2440的dts文件时可以参考s3c2416-smdk2416.dts这个文件:

cp s3c2416-smdk2416.dts s3c2440.dts

vi Makefile

找到如下:

dtb-$(CONFIG_ARCH_S3C24XX) += \

s3c2416-smdk2416.dtb

修改为:

dtb-$(CONFIG_ARCH_S3C24XX) += \

s3c2440.dtb

接着在内核顶层目录里:

make menuconfig

选上 Boot options —> Flattened Device Tree support

最后 make dtbs即可编译设备树(因为arch/arm/configs/s3c2410_defconfig文件里CONFIG_ARCH_S3C24XX=y,所以会编译出s3c2440.dtb文件)。

接着,是uboot部分

在uboot里,如果使用设备树进行传递参数,为了使能Device Tree,则需要在相应的头文件中宏定义,

即u-boot-2016.11/include/configs/smdk2440.h文件添加:

#define CONFIG_OF_LIBFDT

为什么定义这个呢?

因为在fdt_support
4000
.h里,有一句:

#ifdef CONFIG_OF_LIBFDT
/*各种外部函数声明*/
#endif


说的是只有定义了CONFIG_OF_LIBFDT,才能使用关于设备树这些的函数。

现在遇到了点问题:http://www.100ask.org/bbs/forum.php?mod=viewthread&tid=18925&extra=

先码住,还没成功,,,,,,

待续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: