我为硬件编写了自己的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中将其作为构建驱动程序启用以进行构建。
总之
- 将您的驱动程序放在
drivers/usb
- 添加
Kconfig
和Makefile
。例如,CONFIG_USB_HW_HCD
- 添加到 defconfig 作为
CONFIG_USB_HW_HCD=y
.在 Yocto 中,您可以将 defconfig 文件指定为SRC_URI
中的file://defconfig
。
编辑:当您直接使用元英特尔时,您可以创建补丁并为其添加 bbappend。要做到这一点,
- Git 克隆"英特尔内核存储库">
- 如上所述添加驱动程序。复制到
drivers/usb
,添加Kconfig, Makefile
条目。 - 使用
git add
+git commit
将此驱动程序添加到 git 存储库 - 使用
git format-patch
创建修补程序 - 创建一个
.bbappend
文件并添加此修补程序。您可以将此.bbappend
文件放置在任何自定义层或元英特尔本身中。 - 将 defconfig 片段也添加到 Linux 内核的
.bbappend
文件中。
这样你就不需要拥有同一个 Linux 内核的单独存储库。
我希望你的初始模块有module_init((和module_exit调用。
要使这个 USB 模块成为内置内核的一部分,第一件事就是修改你的源代码以删除module_init或module_exit调用添加平台调用探针、初始化等/
将源文件复制到适当的源目录,如"驱动程序/usb/*"
在 KCONFIG 文件中添加一个条目,其中包含该驱动程序的一些描述,并为其依赖项添加规则
在生成文件中添加条目以进行条件编译。
使用 make menuconfig 配置内核以启用配置标记并构建内核