Linux kernel 嵌入式板的写入设备驱动程序

Linux kernel 嵌入式板的写入设备驱动程序,linux-kernel,embedded,linux-device-driver,embedded-linux,yocto,Linux Kernel,Embedded,Linux Device Driver,Embedded Linux,Yocto,我是嵌入式世界的新手。我正在尝试在使用Yocto项目构建的嵌入式Linux系统上编写设备驱动程序。我不知道linux驱动程序是如何工作的,也不知道如何编写新的驱动程序来测试外设 在我的产品中,第569-1199页有一个叫做“Linux内核驱动程序”的部分。它描述了感兴趣的硬件(PCIE、SPI…)的设备树源和驱动程序变量。我现在理解的是,产品负责人已经编写了一些函数来访问外围硬件,我所要做的就是使用它的.c文件调用一些特殊函数来访问它们 我来这里是想问,我的想法是对的还是走在正确的道路上?还有关

我是嵌入式世界的新手。我正在尝试在使用Yocto项目构建的嵌入式Linux系统上编写设备驱动程序。我不知道linux驱动程序是如何工作的,也不知道如何编写新的驱动程序来测试外设

在我的产品中,第569-1199页有一个叫做“Linux内核驱动程序”的部分。它描述了感兴趣的硬件(PCIE、SPI…)的设备树源和驱动程序变量。我现在理解的是,产品负责人已经编写了一些函数来访问外围硬件,我所要做的就是使用它的.c文件调用一些特殊函数来访问它们


我来这里是想问,我的想法是对的还是走在正确的道路上?还有关于为特殊产品编写设备驱动程序的建议吗?

恐怕对于嵌入式Linux新手来说,这是一项相当复杂的任务。我认为您应该从学习Linux内核API开始。你还需要一些电子知识。看看一些Linux内核模块编程指南,并尝试为Linux内核编写一些简单的模块。然后,您可以了解内存映射以及Linux内核中内存的工作原理。您需要这些知识,因为在嵌入式世界中,您需要知道如何访问给定的设备。您还需要知道何时使用“volatile”C语言关键字以及更多信息。有很多东西需要学习……

对于嵌入式Linux新手来说,恐怕这是一项相当复杂的任务。我认为您应该从学习Linux内核API开始。你还需要一些电子知识。看看一些Linux内核模块编程指南,并尝试为Linux内核编写一些简单的模块。然后,您可以了解内存映射以及Linux内核中内存的工作原理。您需要这些知识,因为在嵌入式世界中,您需要知道如何访问给定的设备。您还需要知道何时使用“volatile”C语言关键字以及更多信息。有很多东西要学

我现在理解的是,产品负责人已经编写了一些函数来访问外围硬件,我所要做的就是使用它的.c文件调用一些特殊函数来访问它们。 大宗报价

您的理解部分正确-电路板供应商已经编写了驱动程序(用于读取/写入硬件寄存器的函数)。然而,它并不像仅仅链接驱动程序的c文件那样简单

在Linux中,使用这些驱动程序(驱动程序API)的机制因用例而异。可以从用户和内核空间访问驱动程序。这两个空间都有不同的API与驱动程序交互。Linux内核驱动程序中有很多分层(抽象),大部分工作是熟悉所有涉及的抽象级别

当从用户空间使用驱动程序时,最常见的API是使用表示设备的设备文件并在其上执行文件操作。例如,usb到串行UART通常由设备文件/dev/ttyUSB0表示,与驱动程序的所有交互都通过该设备文件进行。您可以搜索在Linux上编写字符驱动程序,以便对此有更多的了解。本质上,Linux内核驱动程序需要创建一个设备文件,并且需要将在该设备文件上执行的操作(打开、读取、写入、关闭、ioctl)映射到驱动程序中特定于设备硬件的函数

Linux在此基础上创建特定的驱动程序子系统。例如,Linux帧缓冲子系统,通常用于在显示器上绘制图形。它也是一个设备文件,但具有对所有帧缓冲区设备通用的操作。特定于设备的功能将进入另一个包含特定于硬件位的单独驱动程序。目标很简单,将通用可重用代码和特定于硬件的位分开

如果您希望绕过用户空间API并直接与其他内核代码或驱动程序接口,则需要编写一个在内核空间中运行的内核模块,在这里,您可以链接到通用内核驱动程序从供应商导出的函数。这只是给你一个基本的想法,一旦你真正开始编写一些与驱动程序接口的代码,就会有很多潜在的细节。我建议从简单的角色驱动开始。你可以照这个做

我现在理解的是,产品负责人已经编写了一些函数来访问外围硬件,我所要做的就是使用它的.c文件调用一些特殊函数来访问它们。 大宗报价

您的理解部分正确-电路板供应商已经编写了驱动程序(用于读取/写入硬件寄存器的函数)。然而,它并不像仅仅链接驱动程序的c文件那样简单

在Linux中,使用这些驱动程序(驱动程序API)的机制因用例而异。可以从用户和内核空间访问驱动程序。这两个空间都有不同的API与驱动程序交互。Linux内核驱动程序中有很多分层(抽象),大部分工作是熟悉所有涉及的抽象级别

当从用户空间使用驱动程序时,最常见的API是使用表示设备的设备文件并在其上执行文件操作。例如,usb到串行UART通常由设备文件/dev/ttyUSB0表示,与驱动程序的所有交互都通过该设备文件进行。您可以搜索在Linux上编写字符驱动程序,以便对此有更多的了解。本质上,Linux内核驱动程序需要创建一个设备文件,并且需要将在该设备文件上执行的操作(打开、读取、写入、关闭、ioctl)映射到驱动程序中特定于设备硬件的函数

Linux在此基础上创建特定的驱动程序子系统。例如