Out-of-tree 模块和 yocto 中的 dt-bindings
Out-of-tree module and dt-bindings in yocto
我在单独的内核配方中构建了一个新内核模块 out-of-tree - 请参阅下面的文件夹结构。作为此 driver 的一部分,有一个 header 将在生成最终设备树(即它具有常量)时由设备树编译器使用,以及我的 driver.
安装这些文件的正常位置是dt-bindings/clock/clk-driver.h
我创建了一个新的header文件,用于编译设备树;但是,如果在模块的配置阶段将其复制到内核源代码,对于设备树编译器来说就太晚了。
我通过向设备树配方 (device-tree.bbappend) 添加一个新的 configure_prepend 来解决这个问题,以将其复制到 work-shared 内核源代码。但是,这感觉不对,因为我的 header 现在与它所指的内核模块处于不同的配方中。我尝试添加一个依赖项,以便设备树编译器在内核构建之后运行,但这会产生循环依赖性错误。
在正确的阶段将设备树编译器使用的 out-of-tree 模块 header 添加到内核源代码中的正确方法是什么?
文件夹结构:
meta-mylayer/
├── conf
│ └── layer.conf
│ └── status-report.bb
├── recipes-bsp
│ ├── device-tree
│ │ ├── device-tree.bbappend
│ │ └── files
│ │ └── dt-clock.h
└── recipes-modules
└── clock
├── files
│ ├── clock.c
│ ├── COPYING
│ ├── Makefile
│ └── clock.h
├── README
└── clock.bb
我找到了自己的解决方案。
以下三个步骤是我为使其正常工作所做的。请注意,这基本上会延迟设备树配方,直到编译内核模块之后(根据我的理解)。
- 在内核模块配方中添加了一个依赖创建了
共享工作目录(即提取内核源代码
- 在内核模块配方中添加了一个配置步骤,以将文件复制到内核源代码中的正确位置。
- 在设备树配方中添加了一个步骤,添加了对内核模块编译的依赖。
设备树(.bbappend 文件)
do_configure[depends] += "virtual/kernel:do_compile_kernelmodules"
内核模块配方(.bb 文件)
do_configure[depends] += "virtual/kernel:do_shared_workdir"
do_configure_append() {
cp ${S}/clk.h ${TMPDIR}/work-shared/${MACHINE}/kernel-source/include/linux/platform_data/clk.h
cp ${S}/clk-dts.h ${TMPDIR}/work-shared/${MACHINE}/kernel-source/include/dt-bindings/clock/clk-dts.h
}
我在单独的内核配方中构建了一个新内核模块 out-of-tree - 请参阅下面的文件夹结构。作为此 driver 的一部分,有一个 header 将在生成最终设备树(即它具有常量)时由设备树编译器使用,以及我的 driver.
安装这些文件的正常位置是dt-bindings/clock/clk-driver.h
我创建了一个新的header文件,用于编译设备树;但是,如果在模块的配置阶段将其复制到内核源代码,对于设备树编译器来说就太晚了。
我通过向设备树配方 (device-tree.bbappend) 添加一个新的 configure_prepend 来解决这个问题,以将其复制到 work-shared 内核源代码。但是,这感觉不对,因为我的 header 现在与它所指的内核模块处于不同的配方中。我尝试添加一个依赖项,以便设备树编译器在内核构建之后运行,但这会产生循环依赖性错误。
在正确的阶段将设备树编译器使用的 out-of-tree 模块 header 添加到内核源代码中的正确方法是什么?
文件夹结构:
meta-mylayer/
├── conf
│ └── layer.conf
│ └── status-report.bb
├── recipes-bsp
│ ├── device-tree
│ │ ├── device-tree.bbappend
│ │ └── files
│ │ └── dt-clock.h
└── recipes-modules
└── clock
├── files
│ ├── clock.c
│ ├── COPYING
│ ├── Makefile
│ └── clock.h
├── README
└── clock.bb
我找到了自己的解决方案。
以下三个步骤是我为使其正常工作所做的。请注意,这基本上会延迟设备树配方,直到编译内核模块之后(根据我的理解)。
- 在内核模块配方中添加了一个依赖创建了 共享工作目录(即提取内核源代码
- 在内核模块配方中添加了一个配置步骤,以将文件复制到内核源代码中的正确位置。
- 在设备树配方中添加了一个步骤,添加了对内核模块编译的依赖。
设备树(.bbappend 文件)
do_configure[depends] += "virtual/kernel:do_compile_kernelmodules"
内核模块配方(.bb 文件)
do_configure[depends] += "virtual/kernel:do_shared_workdir"
do_configure_append() {
cp ${S}/clk.h ${TMPDIR}/work-shared/${MACHINE}/kernel-source/include/linux/platform_data/clk.h
cp ${S}/clk-dts.h ${TMPDIR}/work-shared/${MACHINE}/kernel-source/include/dt-bindings/clock/clk-dts.h
}