在我自己的meta层上将自己的设备驱动程序加载为Yocto内置

时间:2018-09-20 03:35:46

标签: c linux linux-device-driver embedded-linux yocto

我为硬件编写了自己的USB驱动程序,并且希望将此驱动程序添加为内置驱动程序。我看过这篇文章,他们在其中创建了一个设置为模块而非内置的配方。

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

请大家帮我创建一个将模块设置为内置模块的秘诀。

感谢您的时间。

2 个答案:

答案 0 :(得分:3)

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

然后,您需要在KconfigMakefile的{​​{1}}中添加相应的配置。最后,您需要在defconfig / .config中将其作为内置驱动程序启用以进行构建。

简而言之,

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

编辑: 当您直接使用meta-intel时,您可以创建补丁并对其进行bbappend。为此,

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

通过这种方式,您不需要具有相同Linux内核的单独存储库。

答案 1 :(得分:0)

我希望您的初始模块将具有module_init()和module_exit调用。

要使此usb模块成为内置内核的一部分,第一件事就是修改您的源代码以删除module_init或module_exit调用,再添加平台调用探针,init等。/

将您的源文件复制到适当的源目录,例如“ driver / usb / *”

在KCONFIG文件中添加具有该驱动程序描述的条目,并为其依赖关系添加规则

在Makefile中添加条目以进行条件编译。

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