嵌入式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=
先码住,还没成功,,,,,,
待续
相关文章推荐
- 嵌入式Linux驱动笔记(十六)------设备驱动模型(kobject、kset、ktype)
- 嵌入式Linux设备驱动开发笔记(五)
- 嵌入式linux驱动-块设备笔记
- 嵌入式Linux设备驱动开发笔记(四)
- 嵌入式Linux驱动笔记(十三)------spi设备之RFID-rc522驱动
- 嵌入式linux学习笔记4之字符设备驱动
- 嵌入式Linux设备驱动开发笔记(一)
- 嵌入式Linux设备驱动开发笔记(三)
- 嵌入式linux驱动-网络设备驱动笔记
- 嵌入式Linux之我行——Linux-2.6.30.4在2440上的移植之触摸屏驱动
- 嵌入式linux系统开发概述之四----设备驱动(Drivers)
- ARM的嵌入式Linux移植体验之设备驱动
- linux学习笔记-读《Linux设备驱动开发详解》~第一章 设备驱动概述
- 嵌入式Linux之我行——设备文件系统剖析与使用
- 【转】嵌入式Linux之我行——LCD背光驱动在2440上的实例开发
- linux 2.6.x spi驱动,spidev,使用从设备
- 嵌入式Linux之我行——RamDisk块设备驱动实例开发讲解
- Linux设备驱动开发详解--笔记4--Linux内核模块
- 基于ARM的嵌入式Linux移植真实体验(4)――设备驱动
- 嵌入式Linux字符设备入门之--LED驱动详解