13 功能
本章提供随项目附带、可纳入镜像的机器功能和发行版功能的参考说明, 以及可选镜像功能和 默认功能 的参考资料。
功能提供了一种机制,用于确定生成的镜像应包含哪些软件包。
发行版通过 DISTRO_FEATURES 变量选择要支持的功能,
该变量在 poky.conf、poky-tiny.conf、poky-altcfg.conf
等发行版配置文件中设置或追加。机器功能在 MACHINE_FEATURES
变量中设置,该变量位于机器配置文件中,指定特定机器的硬件功能。
这两个变量共同决定应包含哪些内核模块、工具和其他软件包。 某个发行版可以只支持选定的功能子集,因此,如果发行版本身不支持某项 机器功能,该功能可能不会包含在镜像中。
要查找哪些配方会检查是否包含特定功能,一种方法是在 Metadata
中使用 grep 搜索该功能。以下示例查找其构建可能受到指定功能影响的配方:
$ cd openembedded-core
$ git grep 'contains.*MACHINE_FEATURES.*feature'
13 机器功能
以下条目是可以用于 MACHINE_FEATURES 的功能。 功能与软件包并非一一对应,也不只是控制一个或多个软件包的安装。 有时,功能还会影响某些配方的构建方式。例如,某项功能可能决定 某个配方的 do_configure 任务是否指定某个 configure 选项。
此列表仅列出 Yocto Project 元数据附带的功能:
acpi: 硬件具有 ACPI(仅限 x86/x86_64)。
alsa: 硬件具有 ALSA 音频驱动。
bluetooth: 硬件集成了蓝牙。
coresight: 支持 Arm 处理器上的 Linux 内核 Coresight 功能。 此功能依赖 meta-arm layer 中的
opencsd配方。efi: 支持通过 EFI 启动。
ext2: 硬件具有 HDD 或 Microdrive。
keyboard: 硬件具有键盘。
numa: 硬件具有非一致性内存访问能力。
pcbios: 支持通过 BIOS 启动。
pci: 硬件具有 PCI 总线。
pcmcia: 硬件具有 PCMCIA 或 CompactFlash 插槽。
phone: 支持移动电话语音功能。
qemu-usermode: QEMU 能够为此机器提供用户模式模拟。
qvga: 机器具有 QVGA(320x240)显示屏。
rtc: 机器具有实时时钟。
screen: 硬件具有屏幕。
serial: 硬件支持串口(通常为 RS232)。
touchscreen: 硬件具有触摸屏。
usbgadget: 硬件能够用作 USB gadget 设备。
usbhost: 硬件能够用作 USB 主机。
vfat: 支持 FAT 文件系统。
wifi: 硬件集成了 WiFi。
13 发行版功能
以下条目是可以通过 DISTRO_FEATURES 在整个发行版中启用的功能。 功能与软件包并非一一对应,也不只是控制一个或多个软件包的安装。 在多数情况下,对于可选支持某项功能的配方,该功能是否存在会转换为 do_configure 任务期间传给 configure 脚本的相应选项。 必须提供适当的选项;启用或禁用相关软件包的 PACKAGECONFIG 是提供这些选项的一种方式。
一些发行版功能同时也是机器功能。这些功能适合在机器配置和发行版配置 两个层面共同控制。更多信息请参阅 COMBINED_FEATURES 变量。
备注
DISTRO_FEATURES 通常独立于内核配置。 因此,如果 DISTRO_FEATURES 中指定的功能还依赖内核支持, 也必须确保内核配置中启用了相应支持。
此列表仅列出 Yocto Project 元数据附带的功能,额外的层可以自行定义功能:
3g: 包含蜂窝数据支持。
acl: 包含 访问控制列表 支持。
alsa: 包含 高级 Linux 声音体系结构 支持(如果可用,则安装 OSS 兼容内核模块)。
api-documentation: 在配方构建期间生成 API 文档。 使用
bitbake -c populate_sdk命令时,生成的文档会加入 SDK 压缩包。 请参阅《Yocto Project 应用开发与可扩展软件开发工具包(eSDK)手册》的 “向标准 SDK 添加 API 文档” 一节。audit: 启用 linux-audit 支持。
备注
audit配方由meta-openembedded中的 meta-oe 提供。bluetooth: 包含蓝牙支持(仅限集成蓝牙)。
cramfs: 包含 CramFS 支持。
debuginfod: 支持通过 debuginfod 服务器获取 ELF 调试信息。
directfb: 包含 DirectFB 支持。
ext2: 包含支持使用内置 HDD/Microdrive 存储文件的设备所需的工具, 适用于不只使用闪存的设备。
gobject-introspection-data: 包含支持 GObject Introspection 的数据。
ipsec: 包含 IPSec 支持。
ipv4: 包含 IPv4 支持。
ipv6: 包含 IPv6 支持。
keyboard: 包含键盘支持,例如在启动期间加载键盘映射。
minidebuginfo: 向二进制文件添加最小调试符号 (minidebuginfo), 使
coredumpctl和gdb能显示带符号名称的栈回溯。multiarch: 启用具有多架构支持的应用构建。
ldconfig: 在目标上包含 ldconfig 和
ld.so.conf支持。lto: 启用 链接时优化。
nfc: 包含 近场通信 支持。
nfs: 包含 NFS 客户端支持,用于在设备上挂载 NFS 导出。
nls: 包含本国语言支持(NLS)。
opencl: 包含 OpenCL(开放计算语言) 框架支持。
opengl: 包含开放图形库,它是跨语言、多平台的应用程序编程接口, 用于渲染二维和三维图形。
overlayfs: 包含 OverlayFS 支持。
pam: 包含 可插拔认证模块(PAM) 支持。
pci: 包含 PCI 总线支持。
pni-names: 启用持久化网络接口名称生成。 系统尽量为网络接口维持相同且唯一的名称,即使重新安装系统也保持不变。
polkit: 包含 Polkit 支持。
ppp: 包含 PPP 拨号支持。
ptest: 对支持此功能的配方启用软件包测试构建。 有关软件包测试的更多信息,请参阅《Yocto Project 测试环境手册》的 “使用 ptest 测试软件包”一节。
pulseaudio: 包含 PulseAudio 支持。
selinux: 包含 安全增强 Linux(SELinux) 支持, 需要 meta-selinux。
seccomp: 启用具有 seccomp 支持的应用构建, 使应用能够严格限制自身可调用的系统调用。
smbfs: 包含 SMB 网络客户端支持, 用于在设备上挂载 Samba/Microsoft Windows 共享。
systemd: 包含此
init管理器的支持。 它完整替代init,提供并行启动服务、减少 shell 开销等功能, 被许多发行版采用。systemd-resolved: 包含并使用
systemd-resolved, 作为glibc名称服务切换机制的主要 DNS 名称解析器。 它是systemd提供的 DNS 解析守护进程。usrmerge: 将
/bin、/sbin、/lib和/lib64目录合并到/usr下对应的目录中,以提高软件包和应用兼容性。vfat: 包含 FAT 文件系统 支持。
vulkan: 包含 Vulkan API 支持。
wayland: 包含 Wayland 显示服务器协议及其支持库。
wifi: 包含 WiFi 支持(仅限集成 WiFi)。
x11: 包含 X 服务器和库。
xattr: 包含 扩展文件属性 支持。
zeroconf: 包含 零配置网络 支持。
13 镜像功能
OpenEmbedded 构建系统生成的镜像内容可以通过 IMAGE_FEATURES 和 EXTRA_IMAGE_FEATURES 变量控制,通常在镜像配方中配置它们。 通过这些变量,可以添加多种预定义软件包,例如开发工具, 或包含调试信息的软件包,用于排查应用问题或进行性能分析。
以下镜像功能适用于所有镜像:
allow-empty-password: 允许 Dropbear 和 OpenSSH 接受密码字符串为空的账户登录。
allow-root-login: 允许 Dropbear 和 OpenSSH 接受 root 登录。
dbg-pkgs: 为镜像中安装的所有软件包安装对应的调试符号包。
dev-pkgs: 为镜像中安装的所有软件包安装对应的开发包, 包括头文件和额外的库链接。
doc-pkgs: 为镜像中安装的所有软件包安装对应的文档包。
empty-root-password: 如果希望允许 root 使用空密码登录,可以使用此功能。 如果 IMAGE_FEATURES 中没有此功能,系统会在
/etc/passwd和/etc/shadow(如果存在)中强制为 root 设置非空密码。备注
empty-root-password本身不会设置空的 root 密码。 初始空 root 密码由 base-passwd 和 shadow 配方提供。empty-root-password只是禁用强制为 root 用户 设置非空密码的机制。lic-pkgs: 为镜像中安装的所有软件包安装对应的许可证包。
overlayfs-etc: 将
/etc目录配置为位于overlayfs中。 这样可以将设备特有的信息存储在其他位置,尤其适合根文件系统只读的情况。package-management: 安装软件包管理工具,并保留软件包管理器数据库。
post-install-logging: 在目标系统首次启动镜像时, 将安装后脚本的运行日志写入
/var/log/postinstall.log文件。备注
要使目标上的
/var/log目录持久化,请从 FILESYSTEM_PERMS_TABLES 中删除files/fs-perms-volatile-log.txt值。ptest-pkgs: 为所有启用 ptest 的配方安装 ptest 软件包。
read-only-rootfs: 创建根文件系统只读的镜像。更多信息请参阅 《Yocto Project 安全手册》的 “创建只读根文件系统”一节。
read-only-rootfs-delayed-postinsts: 与
read-only-rootfs一起指定时, 表示仍允许安装后脚本。这假定首次启动时会将根文件系统设为可写; 此功能不会确保这一点,只会禁用对安装后脚本的检查。serial-autologin-root: 与
empty-root-password一起指定时, 会在串口控制台上自动以 root 登录。如果攻击者可能访问串口控制台, 这显然会留下安全漏洞,因此应谨慎使用。splash: 在启动期间显示启动画面。默认由
psplash提供,支持自定义。 如果希望使用其他启动画面软件包,可以在镜像配方或发行版配置层面 将 SPLASH 变量设为其他软件包名称,可以指定一个或多个。stateless-rootfs: 指定将镜像创建为无状态镜像。 使用
systemd时,不会对镜像运行systemctl-native, 而是留待 systemd 在运行时填充。staticdev-pkgs: 为镜像中安装的所有软件包安装静态开发包, 即静态库(
*.a文件)。
某些镜像功能只有继承 core-image 类后才可用。 当前有效的这类功能如下:
hwcodecs: 安装硬件加速编解码器。
nfs-server: 安装 NFS 服务器。
perf: 安装
perf、systemtap和LTTng等性能分析工具。 有关用户空间工具的一般信息,请参阅 Yocto 项目应用开发与软件开发套件(SDK/eSDK)手册。ssh-server-dropbear: 安装精简的 Dropbear SSH 服务器。
备注
从 4.1 版本开始,
ssh-server-dropbear功能还推荐安装openssh-sftp-server软件包,默认会将其纳入镜像。 原因是新版 OpenSSHscp客户端改为使用 SFTP 协议, 因此需要连接到 SFTP 服务器。如果希望使用 Dropbear SSH 服务器 但 不安装 SFTP 服务器,可以从IMAGE_FEATURES中删除ssh-server-dropbear,改为向 IMAGE_INSTALL 添加dropbear;也可以继续使用此功能,但按如下方式设置 BAD_RECOMMENDATIONS:BAD_RECOMMENDATIONS += "openssh-sftp-server"
ssh-server-openssh: 安装比 Dropbear 功能更完整的 OpenSSH SSH 服务器。 如果 IMAGE_FEATURES 同时包含 OpenSSH SSH 服务器和 Dropbear 精简 SSH 服务器,则优先使用 OpenSSH,不安装 Dropbear。
tools-debug: 安装
strace和gdb等调试工具。 有关 GDB 的信息,请参阅《Yocto Project 开发任务手册》的 “使用 GNU 调试器(GDB)远程调试”一节。 有关跟踪和性能分析的信息,请参阅 Yocto 项目性能分析与跟踪手册。tools-profile: 安装
perf等性能分析工具。更多信息请参阅 Yocto 项目性能分析与跟踪手册。tools-sdk: 安装在设备上运行的完整 SDK。
tools-testapps: 安装设备测试工具,例如触摸屏调试工具。
weston: 安装 Weston(Wayland 参考环境)。
x11: 安装 X 服务器。
x11-base: 安装带有最小环境的 X 服务器。
x11-sato: 安装 OpenedHand Sato 环境。
13 SDK 功能
OpenEmbedded Build System 生成的 标准 或 可扩展 SDK 的内容, 可以通过 SDK_FEATURES 变量控制。 通常在运行 do_populate_sdk 或 do_populate_sdk_ext 任务的镜像配方中配置此变量。
可用的 SDK 功能如下:
go:添加用于构建基于 Go 的应用的 Go 工具。kernel-src:将 Linux 内核源码树添加到 SDK。rust:添加用于构建基于 Rust 的应用的 Rust 工具。
13 默认功能
有时,OpenEmbedded Build System 需要向 MACHINE_FEATURES 或 DISTRO_FEATURES 添加新功能, 同时又允许现有发行版或机器定义选择退出这些新功能, 以保持原有的整体功能水平。
为此,OpenEmbedded 构建系统通过 DISTRO_FEATURES_DEFAULTS 和 MACHINE_FEATURES_DEFAULTS 变量提供默认功能列表。 可以在 meta/conf/distro/include/default-distrovars.inc 和 meta/conf/bitbake.conf 文件中查看这些变量的默认定义。
备注
此机制不适用于镜像功能,没有 IMAGE_FEATURES_DEFAULTS 定义。
DISTRO_FEATURES_OPTED_OUT 和 MACHINE_FEATURES_OPTED_OUT 变量可用于移除 DISTRO_FEATURES_DEFAULTS 或 MACHINE_FEATURES_DEFAULTS 变量所提供的功能。
例如,以下两条赋值:
DISTRO_FEATURES_DEFAULTS = "a b c"
DISTRO_FEATURES_OPTED_OUT = "b"
会使功能 a 和 c 进入 DISTRO_FEATURES 的最终值,
但不包含功能 b。此规则同样适用于 MACHINE_FEATURES_DEFAULTS
和 MACHINE_FEATURES_OPTED_OUT。
还可以将 DISTRO_FEATURES_OPTED_OUT 或
MACHINE_FEATURES_OPTED_OUT 设为 *,退出所有默认功能:
DISTRO_FEATURES_OPTED_OUT = "*"
小技巧
可以使用以下命令验证 DISTRO_FEATURES 或 MACHINE_FEATURES 的值:
$ bitbake-getvar DISTRO_FEATURES
NOTE: Starting bitbake server...
[...]
DISTRO_FEATURES=" sysvinit acl alsa bluetooth debuginfod ext2 ipv4 ipv6 wifi xattr nfs zero
conf pci 3g nfc x11 vfat seccomp pulseaudio gobject-introspection-data ldconfig opengl ptest mul
tiarch wayland vulkan "
$ bitbake-getvar MACHINE_FEATURES
NOTE: Starting bitbake server...
[...]
MACHINE_FEATURES="alsa bluetooth usbgadget screen vfat rtc qemu-usermode"