【Yocto】将编写软件已闭源的方式发布

需求

软件开发有两个工程:

  1. 用于开发的工程:Yocto_dev
  2. 用于发布给客户的工程:Yocto_rel

将Yocto_dev中的模块Foo,已闭源的方式发布到Yocto_rel中。

思路

  1. 在Yocto_dev上构建Foo,生成Foo的rpm包
  2. 在Yocto_dev上建立名为Foo_rel的layer,在Foo_rel中将Foo的rpm包安装到镜像中。

实现

Yocto_dev上的操作

在Yocto_dev上构建Foo。构建后便可以得到${WORKDIR}/deploy-rpms/${TRANSLATED_TARGET_ARCH}/${PN}-${PV}-${PR}.${TRANSLATED_TARGET_ARCH}.rpm包.
也可以在Yocto_dev的Foo.bb中添加以下代码,用于将rpm文档拷贝到build/rpm目录下。

inherit deploy

do_deploy[nostamp] = "1"
do_deploy() {
	install -d "${TOPDIR}/rpm"
	install -m 0644 "${WORKDIR}/deploy-rpms/${TRANSLATED_TARGET_ARCH}/${PN}-${PV}-${PR}.${TRANSLATED_TARGET_ARCH}.rpm" "${TOPDIR}/rpm"
}
addtask deploy after do_package_write_rpm before do_build

Yocto_rel上的操作

创建一个名为Foo_rel的layer,结构如下

Foo_rel
- files
-- rpm
--- Foo.rpm
- Foo_rel.bb

Foo_rel.bb的作用是将files/rpm/Foo.rpm的安装到镜像。而Foo.rpm是从Yocto_dev的构建中拷贝出来的rpm包。

DESCRIPTION = "Install files"
LICENSE = "CLOSED"

SRC_URI = "file://rpm"
SRCREV_${PN} = "${AUTOREV}"

DEPENDS = "rpm-native"

S = "${WORKDIR}/rpm"

INHIBIT_PACKAGE_STRIP = "1"
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
INSANE_SKIP:${PN} += "already-stripped dev-deps file-rdeps"
INSANE_SKIP:${PN}-dev += "dev-elf dev-deps file-rdeps"

do__compile () {
    :
}

do_install() {
    rpm2cpio ${S}/Foo.rpm | cpio -idmv --no-absolute-filenames -D ${D}
}

FILES:${PN} = "/"
FILES_${PN}-dev = "/"

如果有多个rpm需要安装可以将rpm都放到一起然后将do_install()变更为

do_install() {
	for rpm_file in ${S}/*.rpm; do	  
    rpm2cpio ${rpm_file} | cpio -idmv --no-absolute-filenames -D ${D}
  done
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值