ohos_prebuilt_etc模版指向out下文件时报错分析
·
环境
系统:Ubuntu20.04
工程:OpenHarmony 5.x release
问题描述
项目中遇到要将kernel编译生成的某个ko文件放到设备vendor/etc/modules目录下。
使用:
ohos_prebuilt_etc("xxxx.ko") {
source = "$root_out_dir/../kernel/src_tmp/$linux_kernel_version/boot_linux/xxxx.ko" //out产品目录下生成的ko文件路径
install_images = [ "vendor" ]
relative_install_dir = "modules"
part_name = xxxxx
}
编译时出现报错,提示:file not found
分析过程
1、提示文件找不到,说明在执行编译ohos_prebuilt_etc("xxxx.ko") 组件的时候,kernel编译的ko文件还没有生成。
ko文件是编译kernel时生成的,则该组件需要在kenel编译完成后执行。
//kernel编译组件
action("kernel") {
script = "build_kernel.sh"
sources = [ kernel_source_dir ]
product_path = "vendor/$product_company/$product_name"
outputs = [
"$root_build_dir/../kernel/src_tmp/${linux_kernel_version}/boot_linux",
"$root_build_dir/../kernel/checkpoint/compile_check",
]
args = [
rebase_path(kernel_build_script_dir, root_build_dir),
rebase_path("$root_build_dir/packages/phone/images"),
rebase_path("//device/board/hihope/$device_name"),
product_path,
......
]
}
这里通过添加deps依赖可实现编译的先后顺序,依赖的组件会在该组件前编译:
ohos_prebuilt_etc("xxxx.ko") {
source = "$root_out_dir/../kernel/src_tmp/$linux_kernel_version/boot_linux/xxxx.ko" //out产品目录下生成的ko文件路径
install_images = [ "vendor" ]
deps = [ "kernel" ] // kernel和该组件在同一部件下,则直接使用deps即可
relative_install_dir = "modules"
part_name = xxxxx
}
2、修改后编译,出现新的错误:
[OHOS INFO] ERROR Input to target not generated by a dependency. [OHOS INFO] The file: //out/xxxx/xxxx.ko [OHOS INFO] is listed as an input or source for the target: //xxxx/组件名 [OHOS INFO] but not targets in the build generate that file.
该错误表示目标文件(也就是ohos_prebuilt_etc("xxxx.ko")中指向的ko文件)没有被依赖项生成。
说明在使用ohos_prebuilt_etc模版时,如果有deps选项,则source指向的文件必须由deps项显式标明。
即在kernel组件的outputs配置项中添加:
action("kernel") {
......
outputs = [
......
//添加上要生成的ko文件路径
"$root_out_dir/../kernel/src_tmp/$linux_kernel_version/boot_linux/xxxx.ko"
]
再次编译,问题解决。
更多推荐


所有评论(0)