申报里要确认两件事:底层代码是不是完全开源,实际可修改的空间有多大。
这两问得分开答。开源看许可证,能改看你能不能真把代码编进去。
license.manifest 里 80 个包
Yocto 构建完会在 tmp/deploy/licenses/ 下生成 license.manifest。格式是每个包五行:
PACKAGE NAME: base-files PACKAGE VERSION: 3.0.14 RECIPE NAME: base-files LICENSE: GPL-2.0-only
core-image-minimal 一共 80 个包。统计许可证:
grep "^LICENSE:" license.manifest | sed "s/^LICENSE: //" \ | sort | uniq -c | sort -rn
结果:GPL-2.0-or-later | BSD-3-Clause 16 个,GPL-2.0-only & LGPL-2.1-or-later 9 个,MIT 和 GPL-2.0-only 各 8 个,剩下是 LGPL、BSD、Apache、Zlib、PD 各种组合。
【04_01_开源构成】
检索 CLOSED、Proprietary、binary-only,零命中。
那 4 个闭源组件
但 BSP 层里确实有受限件,得连配方一起查,只看 manifest 会漏——最小镜像根本没把它们装进来。
搜 LICENSE = "CLOSED" 和 LICENSE_FLAGS 里的 commercial:
【04_02_闭源组件】
egt-media 是 EGT 图形演示的媒体素材,python3-cryptoauthlib 是安全芯片配套库,wireless-kit-webpages 是无线套件的网页资源,mchp-wireless-firmware 是二进制固件(LICENSE = "MICROCHIP_FW")。
而且不是理论存在。microchip-graphics-image 的 IMAGE_INSTALL 里就带着 egt-media,还拖了 linux-firmware-ralink 和 linux-firmware-ath6k。
分层看这个问题
启动链、内核 6.6.64、全部驱动、设备树——100% 开源且可改。 这是二次开发真正要动的地方。
闭源只出现在无线、图形媒体、安全芯片这些可选周边。 最小镜像不用它们,一样能跑。
选型时值得多问一句:这些闭源件是不在核心路径上,还是恰好就在你要用的功能上。你要是正好做无线,那 mchp-wireless-firmware 就成了必须接受的前提。
改得动吗,编个模块
开源是必要条件,不是充分条件。能改才算数。
我写了个最小的 hello 模块,用内核构建树编:
make -C <kernel-build> M=$(PWD) ARCH=arm \ CROSS_COMPILE=arm-poky-linux-gnueabi- modules
【04_03_模块验证】
552 毫秒出来,hello.ko 3768 字节。
hello.ko: ELF 32-bit LSB relocatable, ARM, EABI5 vermagic=6.6.64-linux4microchip+sama7d65-2025.02 mod_unload ARMv7 p2v8
vermagic 和 kernel-abiversion 里的完全一致,加载不需要 --force。
设备树改动更快,dtc 直接跑,毫秒级。
工具链上踩的坑
第一次编模块没成功,报 as: unrecognized option "-EL"。
原因是我图省事,直接拿 sysroots-components 里的 gcc-cross-arm 加 PATH。那个目录只有 gcc,没有 binutils,-EL 传下去找不到交叉汇编器,退回到主机的 as。
换成完整工具链就好了:tmp/work/.../meta-toolchain/1.0/recipe-sysroot-native/usr/bin/arm-poky-linux-gnueabi/,里面有 as、ld、objdump 全套。
这个坑值得记:交叉编译报出奇怪的汇编器参数错误,多半是工具链不完整,不是代码问题。
结论
对"是否完全开源":是,核心链路全部开源可改。
对"可修改空间":够用,模块半秒、DTB 毫秒级,试错循环很顺。
前提是你别踩在那 4 个闭源组件上。
我要赚赏金
