do_install
设置系统服务:配置软件包启动和停止时机
SysVinit
- 内核启动以后,派生init进程,然后按照进程优先级按序启动
- 此时
do_install
必须把任务start-stop-script
安装进恰当的目录中,通常是/etc/init.d
; - 然后服务需要通过创建从资源控制目录(
/etc/rc0.d
到/etc/rc6.d
)到脚本的链接来启用 - 这是通过
update-rc.d
类来完成的,update-rc.d
类(update-rc.d.bbclass
)使用菜谱需要继承的update-rc.d
工具 - 需要配置三个变量
INITSCRIPT_PACKAGES
:包含用于这个软件包init脚本的包列表- 这个变量是可选的,并且默认成INITSCRIPT_PACKAGES=“${PN}”
INITSCRIPT_NAME
:init脚本的名字INITSCRIPT_PARAMS
:传递到update-rc.d的参数- 这可以是例如"
defaults 8020
"的字符串,用来在进入运行级别2、3、4、5时启动服务和在进入运行级别0、1、6时停止它
- 这可以是例如"
systemd
- 软件包必须提供给
systemd
服务脚本,并且菜谱必须在恰当的位置安装它,位置通常是/lib/systemd/system
- 然后菜谱通过继承
systemd
类(systemd.bbclass
) - 提供下面的变量
SYSTEMD_PACKAGES
:包含用于软件包的systemd
服务文件的包列表- 这个变量是可选的,并且默认成
SYSTEMD_PACKAGES="${PN}"
- 这个变量是可选的,并且默认成
SYSTEMD_SERVICE
:服务文件的名字
do_package
打包
包拆分(拆包)
- 一次编译会生成多个产物,把这些不同的常务按照需求分到不同的包的过程叫做包拆分
- 两个变量
-
PACKAGES:这个变量是空格分隔的包名字的列表;被定义在meta/conf/bitbake.conf中
- 这个变量的默认值是
PACKAGES="${PN}-dbg${PN}-staticdev${PN}-dev${PN}-doc${PN}-locale${PACKAGE_BEFORE_PN}${PN}"
do_package
任务从左到右处理列表,首先创建最左侧的包,最后创建最右侧的包。顺序是重要的,因为包消耗与它相关联的文件
- 这个变量的默认值是
-
FILES
:FILES
变量定义被放进特定包中的目录和文件的列表 理解为安装包的目标安装路径- 这个变量总是和条件赋值一起使用,例如:
FILES:${PN}-dev = "${includedir}" FILES:${PN} = "${datadir}"
- 其中
files
是空格分隔的、可以包含通配符以匹配用于do_install
任务在其中创建目录和安装文件的目的目录D的目录结构部分的目录和文件列表 - 默认路径定义在
meta/conf/bitbake.conf
- 这个变量总是和条件赋值一起使用,例如:
-
可以新增除默认包之外的包名到
PACKAGE
,比如PACKAGE =+ "graphics" FILES:${PN}-graphics = "${datadir}/graph"
-
包质量检查
- 可以使用变量
WARN_QA
和ERROR_QA
来决定质量保证函数是否应该创建警告消息,其让构建继续,并且成功而不管警告;或者创建错误消息,其让构建失败 INSANE_SKIP:${PN} += "dev-so"
为动态库跳过符号链接检查
包架构
- 修改包架构方法
- 机器依赖包,设置:
PACKAE_ARCH = "{MACHINE_ARCH}"
- 配置
conf/local.conf
文件中的MACHINE
变量
- 配置
- 架构独立包,新增:
inherit allarch
- 机器依赖包,设置: