是否需要为驱动程序包含 DTS 文件?
Is it necessary to include DTS files for the driver?
我的目标是在当前 Linux 内核上移植 this 驱动程序。
我到目前为止所做的事情....
1) 下载了当前内核版本的源码
2) 下载了 dev_parallel.c、Makefile、Kconfig 以修改代码。
3) 使用 "make" 命令我能够正确编译驱动程序。
4) 使用 "make modules" 命令我能够生成一个 .o 文件。
5) 使用 "make modules_install" 命令我能够获取 .ko 文件。
6) 使用 "modprobe" 命令我能够成功加载模块而没有任何内核崩溃。
但我看到此驱动程序的 DTS 文件位于 here。我知道 dts 文件被编译为 dtb 文件,内核在启动时读取这些文件并自动加载模块。
但是是否需要这个 DTS 文件或仅 modprobe 命令就可以为我完成这项工作?
我说的驱动是电子纸显示器(EPD)。
所以如果我连接 EPD,然后执行 modprobe 加载驱动程序,它会工作还是我需要有 DTS 文件才能使其正常工作?
在驱动程序中没有必要使用DTS文件,但出于某些原因,如定义管脚、设置配置等,应该从DTS文件中获取参数,以防止用户修改驱动程序并重新编译它。
您的示例似乎没有从 DTS 文件中获取任何参数,但另一方面,它对一些引脚定义进行了硬编码,因此您需要处理它们。
如果你想强制它从 DTS 文件中读取参数,你应该重写驱动程序。您可以对 GPIO 使用 this for driver and this。那么您必须在您当前的 DTS 文件中包含新的驱动程序并重新编译它。
对于驱动程序编译,您可以创建一个内核模块。您可以使用 this tutorial 作为基础知识。
设备树是Linux内核源代码树中描述特定平台硬件的一组文本文件。他们可以有两个扩展名:
- *.dtsi 文件是设备树源包含文件。他们描述了几个平台通用的硬件,这些平台在他们的 *.dts 文件中包含这些文件。
- *.dts文件是设备树源文件。他们描述了一个特定的平台。
通常内核映像和设备树二进制文件(低级设备描述,特定于您的设备)是 loaded.The 3.8+ 内核已经支持除 [=22 以外的所有 Armadeus 平台的设备树=] 嵌入式平台不提供发现它们拥有的硬件的方法。您要么必须求助于猜测(这是不可行的),要么向 Linux 内核提供有关电路板的信息,并且 peripherals.Device 树文件存在于 arch/your_device_arch/boot/dts.[=10= 中]
我的目标是在当前 Linux 内核上移植 this 驱动程序。 我到目前为止所做的事情....
1) 下载了当前内核版本的源码
2) 下载了 dev_parallel.c、Makefile、Kconfig 以修改代码。
3) 使用 "make" 命令我能够正确编译驱动程序。
4) 使用 "make modules" 命令我能够生成一个 .o 文件。
5) 使用 "make modules_install" 命令我能够获取 .ko 文件。
6) 使用 "modprobe" 命令我能够成功加载模块而没有任何内核崩溃。
但我看到此驱动程序的 DTS 文件位于 here。我知道 dts 文件被编译为 dtb 文件,内核在启动时读取这些文件并自动加载模块。
但是是否需要这个 DTS 文件或仅 modprobe 命令就可以为我完成这项工作?
我说的驱动是电子纸显示器(EPD)。
所以如果我连接 EPD,然后执行 modprobe 加载驱动程序,它会工作还是我需要有 DTS 文件才能使其正常工作?
在驱动程序中没有必要使用DTS文件,但出于某些原因,如定义管脚、设置配置等,应该从DTS文件中获取参数,以防止用户修改驱动程序并重新编译它。
您的示例似乎没有从 DTS 文件中获取任何参数,但另一方面,它对一些引脚定义进行了硬编码,因此您需要处理它们。 如果你想强制它从 DTS 文件中读取参数,你应该重写驱动程序。您可以对 GPIO 使用 this for driver and this。那么您必须在您当前的 DTS 文件中包含新的驱动程序并重新编译它。
对于驱动程序编译,您可以创建一个内核模块。您可以使用 this tutorial 作为基础知识。
设备树是Linux内核源代码树中描述特定平台硬件的一组文本文件。他们可以有两个扩展名:
- *.dtsi 文件是设备树源包含文件。他们描述了几个平台通用的硬件,这些平台在他们的 *.dts 文件中包含这些文件。
- *.dts文件是设备树源文件。他们描述了一个特定的平台。
通常内核映像和设备树二进制文件(低级设备描述,特定于您的设备)是 loaded.The 3.8+ 内核已经支持除 [=22 以外的所有 Armadeus 平台的设备树=] 嵌入式平台不提供发现它们拥有的硬件的方法。您要么必须求助于猜测(这是不可行的),要么向 Linux 内核提供有关电路板的信息,并且 peripherals.Device 树文件存在于 arch/your_device_arch/boot/dts.[=10= 中]