S3C64xx设备树支持
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设备树支持相关推荐
- 海思hi3520dv400 kernel分析(3)——设备树支持
概念: FDT:Flattened Device Tree (扁平设备树)是一种数据结构,用来描述设备的硬件配置信息,它源自开放固件使用的设备树格式. DTS:Device tree source(设 ...
- Exynos4412 内核移植(六)—— 设备树解析
一.描述 ARM Device Tree起源于OpenFirmware (OF),在过去的Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,相 ...
- linux设备树笔记__dts基本概念及语法
设备树手册(Device Tree Usage)原文地址:http://www.devicetree.org/Device_Tree_Usage 有关device tree数据格式的更完整技术说明,读 ...
- 探索Linux设备树:硬件描述与驱动程序的桥梁
目录标题 引言:Linux设备树简介 | Introduction: Linux Device Tree Overview a. 设备树的背景与发展 | Background and Developm ...
- Linux 设备树 DTS 语法
DTS 语法 .dtsi 头文件 设备树支持头文件,设备树的头文件扩展名为.dtsi //linux-5.5.4\linux-5.5.4\arch\arm\boot\dts\s5pv210-smdkv ...
- imx6ull 正点原子设备树适配韦东山的开发板 (一)顺利启动,配置led,button
设备树在公司经常用到 有时候很多驱动编写也就是替换设备树,所以拿韦老师的板子练手设备树 这次尝试直接拿正点的设备书改成韦老师的板子能用 对比 正点原子的设备树结构图 韦东山的设备树结构图 从因为蓝色的 ...
- u-boot-1.1.6 设置新分区支持设备树
在u-boot命令行执行mtaparts命令 mini2440 :> mtdparts device nand0 <smdk2440-0>, # parts = 4 #: name ...
- Ubuntu环境搭建支持设备树,内核和根文件系统启动
Ubuntu环境搭建支持设备树,内核和根文件系统启动 使用tftp获取设备树和内核文件 1.搭建TFTP服务器 sudo apt-get install tftp-hpa tftpd-hpa sudo ...
- tiny4412学习(二)之移植linux-4.x支持设备树
硬件平台:tiny4412 系统:linux-4.4 文件系统:busybox-1.25 编译器: arm-none-linux-gnueabi-gcc (gcc version 4.8.3 2014 ...
- 设备树(二)—— u-boot对设备树的支持
一.配置u-boot u-boot对设备树的支持很简单,uboot从v1.1.3开始支持设备树,为了使用设备树,需要在config文件里配置 a.#define CONFIG_OF_LIBFDT b. ...
最新文章
- 破除SCI至上!评价 AI 科研成果,需要新思路【附报告下载】
- 《代码阅读方法与实践》阅读笔记一
- prometheus + influxdb + grafana + mysql
- 用Python实现归并排序
- java中关于length的真确理解~~~~有补充的请跟帖~~~
- 正版python怎么下载_怎么下载官网python并安装
- 下面不是android四大组件之一的是,Android四大组件之一 Service
- mysql -a_a|MySQL基础命令
- java基于ssm数据库原理及应用题库管理系统
- Scratch 简单的小游戏 --- 碰碰球
- macOS 上都有哪些既免费、又实用的工具?| 新手问号
- python读取整个txt文件-python读取一个目录下所有txt里面的内容方法
- Excel用户如何打破内卷?只需要一个新软件,就能突破excel天花板
- 四十六、Fluent壁面函数的选取依据
- 黑鲨1 救黑砖 9008救砖
- uniapp设置的组件样式在H5和APP中生效,在微信小程序中不生效问题解决
- [BZOJ1616][Usaco2008 Mar]Cow Travelling游荡的奶牛(dfs||dp)
- 淘宝/天猫、拼多多、1688产品详情页API、SKU信息获取展示
- Gitee使用时TimeOut问题解决
- python将文件转成linux格式,怎么用python在Windows系统下,生成UNIX格式文件