C语言 在我自己的元层上加载我自己的设备驱动程序,作为内置的 Yocto



我为硬件编写了自己的USB驱动程序,我想将此驱动程序添加为内置驱动程序。我看过这篇文章,他们创建了一个配方以设置为模块而不是内置。

http://wiki.kaeilos.com/index.php/Howto_build_a_kernel_module_out_of_the_kernel_tree

你能不能帮我创建一个配方来将模块设置为内置。

谢谢你的时间。

你不能在 Linux 内核中内置外部模块。因此,您需要将驱动程序放入 Linux 内核树的drivers/usb/(基于硬件类型,如果它是主机控制器驱动程序或drivers/usb/dwc*drivers/usb/gadget/udc如果是小工具驱动程序(,则需要放置在drivers/usb/host/中。

然后你需要在Kconfig中添加根据配置,在drivers/usb中添加Makefile。最后,您需要在defconfig/.config中将其作为构建驱动程序启用以进行构建。

总之

  1. 将您的驱动程序放在drivers/usb
  2. 添加KconfigMakefile。例如,CONFIG_USB_HW_HCD
  3. 添加到 defconfig 作为CONFIG_USB_HW_HCD=y.在 Yocto 中,您可以将 defconfig 文件指定为SRC_URI中的file://defconfig

编辑:当您直接使用元英特尔时,您可以创建补丁并为其添加 bbappend。要做到这一点,

  1. Git 克隆"英特尔内核存储库">
  2. 如上所述添加驱动程序。复制到drivers/usb,添加Kconfig, Makefile条目。
  3. 使用git add+git commit将此驱动程序添加到 git 存储库
  4. 使用git format-patch创建修补程序
  5. 创建一个.bbappend文件并添加此修补程序。您可以将此.bbappend文件放置在任何自定义层或元英特尔本身中。
  6. 将 defconfig 片段也添加到 Linux 内核的.bbappend文件中。

这样你就不需要拥有同一个 Linux 内核的单独存储库。

我希望你的初始模块有module_init((和module_exit调用。

要使这个 USB 模块成为内置内核的一部分,第一件事就是修改你的源代码以删除module_init或module_exit调用添加平台调用探针、初始化等/

将源文件复制到适当的源目录,如"驱动程序/usb/*"

在 KCONFIG 文件中添加一个条目,其中包含该驱动程序的一些描述,并为其依赖项添加规则

在生成文件中添加条目以进行条件编译。

使用 make menuconfig 配置内核以启用配置标记并构建内核

相关内容

最新更新