0 前言

无论是《MINI2440看门狗驱动》、《SMDK6410 LCD驱动(FB)》还是《Tiny4412 LCD驱动(DRM)》,LCD平台驱动设备的添加方法都基本一致,是传统的方法。然而,本将基于linux-3.18.2介绍一种新的方法(新版内核推荐使用的方法),就是如何通过设备树来展开平台设备。

1 平台设备

与《MINI2440看门狗驱动》、《SMDK6410 LCD驱动(FB)》和《Tiny4412 LCD驱动(DRM)》不同的是,这里并不需要显式的定义struct platform_device,在系统初始化的时候会自动根据设备树创建相应的平台设备。

Tips:关于设备树是如果被加载并解析成设备节点的,详见参考资料[1],本文重点分析如何利用设备节点创建相应的平台设备。

1.1 创建&注册

(1)设备匹配表

const struct of_device_id of_default_bus_match_table[] = {{ .compatible = "simple-bus", },
#ifdef CONFIG_ARM_AMBA{ .compatible = "arm,amba-bus", },
#endif /* CONFIG_ARM_AMBA */{} /* Empty terminated list */
};
// @file: drivers/of/platform.c

(2)入口定义

DT_MACHINE_START(S3C6400_DT, "Samsung S3C64xx (Flattened Device Tree)")/* Maintainer: Tomasz Figa <tomasz.figa@gmail.com> */.dt_compat  = s3c64xx_dt_compat,.map_io     = s3c64xx_dt_map_io,.init_machine   = s3c64xx_dt_init_machine,.restart        = s3c64xx_dt_restart,
MACHINE_END
// @file: arch/arm/mach-s3c64xx/mach-s3c64xx-dt.c

对比分析:与《Linux设备驱动--LCD平台设备与驱动(smdk6410)》不同的是,这里不再使用MACHINE_START,而是使用DT_MACHINE_START取代之[5]。

(3)s3c64xx入口函数

static void __init s3c64xx_dt_init_machine(void)
{samsung_wdt_reset_of_init();of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); /* 创建平台设备. */
}
// @file: arch/arm/mach-s3c64xx/mach-s3c64xx-dt.c

s3c64xx入口函数中,调用of_platform_populate()函数根据设备节点创建相应的平台设备,流程如下:

of_platform_populate()
|-->for_each_child_of_node(root, child)|-->of_platform_bus_create()|-->of_platform_device_create_pdata()|-->of_device_add()|-->device_add()

比较分析:与《Linux设备驱动--LCD平台设备与驱动(smdk2440)》、《Linux设备驱动--LCD平台设备与驱动(smdk6410)》和《Linux设备驱动--LCD平台设备与驱动(tiny4412)》所不同的是,这里并没有使用platform_add_devices() / platform_device_register()注册平台设备,而是使用device_add()来注册平台设备里面的普通设备(ofdev->dev)。

2 平台驱动

和传统使用非设备树方案的一样,可参考《MINI2440看门狗驱动》、《SMDK6410 LCD驱动(FB)》以及《Tiny4412 LCD驱动(DRM)》等,本文不再赘述。

参考资料

[1]Linux 3.10 ARM Device Tree 的初始化

[2]Linux加载DTS设备节点的过程(以高通8974平台为例)

[3]论dts中的of_platform_populate如何选择性加载device node为platform device

[4]3.x版本内核中platform_device的生成

[5]ARM Linux 3.x的设备树(Device Tree)

[6]linux2.6中的platform和of_platform机制B

[7]基于tiny4412的Linux内核移植 -- 设备树的展开

[8]编写设备驱动程序

[9]Linux 设备树详解

S3C64xx设备树支持相关推荐

  1. 海思hi3520dv400 kernel分析(3)——设备树支持

    概念: FDT:Flattened Device Tree (扁平设备树)是一种数据结构,用来描述设备的硬件配置信息,它源自开放固件使用的设备树格式. DTS:Device tree source(设 ...

  2. Exynos4412 内核移植(六)—— 设备树解析

    一.描述 ARM Device Tree起源于OpenFirmware (OF),在过去的Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,相 ...

  3. linux设备树笔记__dts基本概念及语法

    设备树手册(Device Tree Usage)原文地址:http://www.devicetree.org/Device_Tree_Usage 有关device tree数据格式的更完整技术说明,读 ...

  4. 探索Linux设备树:硬件描述与驱动程序的桥梁

    目录标题 引言:Linux设备树简介 | Introduction: Linux Device Tree Overview a. 设备树的背景与发展 | Background and Developm ...

  5. Linux 设备树 DTS 语法

    DTS 语法 .dtsi 头文件 设备树支持头文件,设备树的头文件扩展名为.dtsi //linux-5.5.4\linux-5.5.4\arch\arm\boot\dts\s5pv210-smdkv ...

  6. imx6ull 正点原子设备树适配韦东山的开发板 (一)顺利启动,配置led,button

    设备树在公司经常用到 有时候很多驱动编写也就是替换设备树,所以拿韦老师的板子练手设备树 这次尝试直接拿正点的设备书改成韦老师的板子能用 对比 正点原子的设备树结构图 韦东山的设备树结构图 从因为蓝色的 ...

  7. u-boot-1.1.6 设置新分区支持设备树

    在u-boot命令行执行mtaparts命令 mini2440 :> mtdparts device nand0 <smdk2440-0>, # parts = 4 #: name  ...

  8. Ubuntu环境搭建支持设备树,内核和根文件系统启动

    Ubuntu环境搭建支持设备树,内核和根文件系统启动 使用tftp获取设备树和内核文件 1.搭建TFTP服务器 sudo apt-get install tftp-hpa tftpd-hpa sudo ...

  9. tiny4412学习(二)之移植linux-4.x支持设备树

    硬件平台:tiny4412 系统:linux-4.4 文件系统:busybox-1.25 编译器: arm-none-linux-gnueabi-gcc (gcc version 4.8.3 2014 ...

  10. 设备树(二)—— u-boot对设备树的支持

    一.配置u-boot u-boot对设备树的支持很简单,uboot从v1.1.3开始支持设备树,为了使用设备树,需要在config文件里配置 a.#define CONFIG_OF_LIBFDT b. ...

最新文章

  1. 破除SCI至上!评价 AI 科研成果,需要新思路【附报告下载】
  2. 《代码阅读方法与实践》阅读笔记一
  3. prometheus + influxdb + grafana + mysql
  4. 用Python实现归并排序
  5. java中关于length的真确理解~~~~有补充的请跟帖~~~
  6. 正版python怎么下载_怎么下载官网python并安装
  7. 下面不是android四大组件之一的是,Android四大组件之一 Service
  8. mysql -a_a|MySQL基础命令
  9. java基于ssm数据库原理及应用题库管理系统
  10. Scratch 简单的小游戏 --- 碰碰球
  11. macOS 上都有哪些既免费、又实用的工具?| 新手问号
  12. python读取整个txt文件-python读取一个目录下所有txt里面的内容方法
  13. Excel用户如何打破内卷?只需要一个新软件,就能突破excel天花板
  14. 四十六、Fluent壁面函数的选取依据
  15. 黑鲨1 救黑砖 9008救砖
  16. uniapp设置的组件样式在H5和APP中生效,在微信小程序中不生效问题解决
  17. [BZOJ1616][Usaco2008 Mar]Cow Travelling游荡的奶牛(dfs||dp)
  18. 淘宝/天猫、拼多多、1688产品详情页API、SKU信息获取展示
  19. Gitee使用时TimeOut问题解决
  20. python将文件转成linux格式,怎么用python在Windows系统下,生成UNIX格式文件

热门文章

  1. windows动态库和静态库
  2. 从负载均衡到软件负载,lvs是神马东西
  3. 基于STM32F103的ACS712电流传感器使用教程
  4. 直接ISO启动工具ventoy
  5. PDF文件页面大小不一致的解决办法
  6. BAT批处理文件 一键开启卓越性能电源计划方案
  7. Modelica学习笔记
  8. 钟平逻辑英语语法_逻辑英语-钟平笔记.pdf
  9. 学会-精湛-应用,一个数据分析师的养成手册
  10. 中兴服务器isac配置,中兴AC 配置手册V1.0.docx