为何Yocto构建出现‘Feature 'cfg/efi.scc' not found’错误?
问题:Yocto Scarthgap构建linux-yocto时EFI相关报错“Feature 'cfg/efi.scc' not found”
我正在为Scarthgap编写自定义元层,仅为一款定制板构建内核。已完成所有配置,但尽管遵循文档操作,EFI仍导致构建报错:
- 定制板配置文件
conf/machine/custom.conf中已添加efi到MACHINE_FEATURES,并配置了EFI_PROVIDER - 执行
MACHINE=custom bitbake linux-yocto构建时,出现错误:Feature 'cfg/efi.scc' not found - 在Poky中找不到
efi.scc文件,但文档和linux-yocto.inc中存在对该文件的引用,疑惑该功能是否本身存在问题?
解决方案
1. 核对内核架构与EFI配置路径
Scarthgap版本的linux-yocto中,不存在通用的cfg/efi.scc文件,EFI配置是分架构存放的:
- ARM64架构对应
cfg/arm64/efi.scc - ARM架构对应
cfg/arm/efi.scc - x86架构对应
cfg/x86/efi.scc
如果你的配置中错误引用了通用路径,就会触发找不到文件的报错。
2. 手动指定架构专属的内核特性
不要仅依赖MACHINE_FEATURES += "efi"自动引入配置,在自定义内核配方的.bbappend文件中明确添加对应架构的EFI特性:
KERNEL_FEATURES += "cfg/${ARCH}/efi.scc"
3. 检查Poky内核文件完整性
Scarthgap的Poky中,EFI相关SCC文件位于poky/meta/recipes-kernel/linux/linux-yocto/${KERNEL_VERSION}/features/cfg/目录下的架构子文件夹中。如果找不到这些文件,大概率是克隆Poky时未同步完整的内核子模块,执行以下命令修复:
cd poky git submodule update --init --recursive meta/recipes-kernel/linux/linux-yocto
4. 验证EFI_PROVIDER配置有效性
EFI_PROVIDER需设置为系统支持的引导加载器,比如systemd-boot或grub-efi,同时确保对应引导加载器的配方已被包含在构建环境中,否则即使EFI内核配置正确,后续也会出现其他报错。
内容的提问来源于stack exchange,提问作者preetam
相关产品推荐
相关产品推荐

