在yocto中怎样为系统安装/删除软件 / yocto how to add/remove packages

octo可以方便的安装很多软件包,且可以容易的添加进文件系统中。可以在

https://layers.openembedded.org/layerindex/branch/krogoth/recipes/

查找是否有包含。(请注意yocto版本,上面的链接为krogoth 2.1版本,其他版本请切换到对应版本查询 BSP版本、设备树、config文件对照表 / BSP version, device tree, config file cross reference table

如果没有搜到这个软件,也可以通过自己写一个layer的方式将软件添加进yocto。

在yocto中增加软件分为几种情况,请看下面的目录:

 

 

首先用第一个方法确定需要的软件是否包括在已包含的layer内。

然后通过在openembedded网站搜索看layer的名称用第二中方式增加layer。

另外yocto还支持类似ubuntu apt的安装软件方式 在yocto使用包管理系统 / yocto how to use package management system

 

软件位于已包含的layer中

在BSP环境中搜索软件是否已被编译进BSP

bitbake -s | grep [software]

如:

% bitbake -s | grep nfs-utils

nfs-utils                                           :1.3.4-r0

在build/conf/local.conf添加软件包

# file build/conf/local.conf

IMAGE_INSTALL_append = " nfs-utils"                        (nfs-utils前面有个空格)

然后编译即可。

软件位于其他未包含的layer

在openembedded网站搜索recipe openjdk8,可以搜到这个页面 https://layers.openembedded.org/layerindex/recipe/66213/

其中说明了这个recipe是包括在 meta-java中的,则需要用这个方法来先增加layer,再添加软件。

以下操作为添加meta-java这一层为例,增加其他layers可参考以下操作。

1、进入bsp包的sources目录下,添加meta-java这一层。

git clone git://git.yoctoproject.org/meta-java

2、下载好meta-jave层后,进入meta-java的目录下,切换分支,请按照yocto的版本来切换对应的分支,yocto的版本可以在BSP的releasenote中看到,如 ftp://ftp.phytec.cn/AM335x/BSP-Yocto-AM335x-PD16.2.0/ReleaseNotes

以下以krogoth版本的yocoto为例。

cd meta-java

git checkout origin/krogoth <- 注意版本

3、打开README文件,查看要修改的配置

vi README

注意下面的内容是krogoth版本readme,其他版本可能不同。

Usage instructions

------------------

 

You should define at least the following variables in a distro include file or local.conf

 

# Possible provider: cacao-initial-native and jamvm-initial-native

PREFERRED_PROVIDER_virtual/java-initial-native "cacao-initial-native"

 

# Possible provider: cacao-native and jamvm-native

PREFERRED_PROVIDER_virtual/java-native "jamvm-native"

 

# Optional since there is only one provider for now

PREFERRED_PROVIDER_virtual/javac-native "ecj-bootstrap-native"

 

Simply rely on openjdk-7-jre, openjdk-7, openjdk-8 or openjre-8.

 

For conf/bblayers.conf you have to add

 

BBLAYERS ?= " \

   ...

  path_to_source/meta-openembedded/meta-oe \

  path_to_source/sources/meta-java \

  "

4、根据README的指导修改build/conf/local.conf文件,在local.conf增加以下几行,注意下面的内容是krogoth版本操作,其他版本可能不同,请参考readme文件。

# Possible provider: cacao-initial-native and jamvm-initial-native

PREFERRED_PROVIDER_virtual/java-initial-native "cacao-initial-native"

 

# Possible provider: cacao-native and jamvm-native

PREFERRED_PROVIDER_virtual/java-native "cacao-native"

 

# Optional since there is only one provider for now

PREFERRED_PROVIDER_virtual/javac-native "ecj-bootstrap-native"

5、根据README,修改bbplayers.conf文件的BBLAYERS,增加meta-java这一层,注意下面的内容是krogoth版本操作,其他版本可能不同,请参考readme文件。

BBLAYERS  ?= " \

  ${OEROOT}/meta \

  ${OEROOT}/meta-poky \

  ${OEROOT}/../meta-phytec \

  ${OEROOT}/../meta-yogurt \

  ${OEROOT}/../meta-openembedded/meta-oe \

  ${OEROOT}/../meta-openembedded/meta-networking \

  ${OEROOT}/../meta-openembedded/meta-python \

  ${OEROOT}/../meta-openembedded/meta-multimedia \

  ${OEROOT}/../meta-qt5 \

  ${OEROOT}/../meta-java \

  ${OEROOT}/../meta-openembedded/meta-ruby \

  "

6、修改build/conf/local.conf文件,增加openjdk-8软件,注意下面的内容是krogoth版本操作,其他版本可能不同,请参考readme文件。

IMAGE_INSTALL_append = " openjdk-8"

7、重新编译镜像即可。

为已包含的软件增加额外的库,如python, perl等。

修改build/conf/local.conf文件中的下面这个选项,然后增加额外的包。

IMAGE_INSTALL_append = " \
perl \
perl-module-base \
perl-module-findbin"

具体有哪些包可以增加,可以在 build/tmp/work/cortex..../perl/5.2..../packages-split/ 中查找。

怎样删除在镜像中的软件包

在build/conf/local.conf中增加

PACKAGE_EXCLUDE = "package_name package_name package_name ..."

来删除软件。

<think>好的,用户想知道如何在Yocto项目中自动生成或添加/etc/machine-id文件。首先,我需要回忆一下Yocto项目中处理系统配置文件的常用方法。通常,这类文件可以通过定制层(custom layer)中的配方(recipe)或使用bbappend文件来修改。 首先,machine-id文件是systemd的一部分,用于唯一标识系统实例。在Yocto中,systemd的配置通常由systemd-machine-units配方处理。用户可能需要创建一个bbappend文件来添加或修改这个文件。 接下来,我需要考虑如何生成这个文件。根据systemd的文档,machine-id应该在首次启动时生成,但用户可能希望在构建镜像时就生成它。可以使用systemd的systemd-machine-id-setup工具,但需要注意在构建时生成可能会导致所有镜像的machine-id相同,这通常不是期望的结果。因此,可能需要在首次启动时运行生成命令。 然后,考虑到Yocto的机制,可以通过在初始化脚本中添加步骤来生成machine-id。例如,创建一个自定义的systemd服务或在现有的初始化流程中添加一个脚本。这可以通过在配方中安装脚本文件,并确保它在首次启动时执行。 另外,用户可能需要检查现有的层或社区提供的解决方案,比如meta-openembedded中的相关配方是否已经处理了machine-id的生成。如果有现成的解决方案,可以推荐使用。 还需要注意文件系统的持久化。如果根文件系统是只读的,需要确保/etc/machine-id在可写的分区中,或者使用overlayfs来处理。否则,每次启动都会重新生成,导致machine-id变化,这可能影响某些服务。 可能还需要处理构建时的警告或错误,比如如果文件不存在,某些服务会报错。因此,在首次启动前生成一个临时的machine-id,然后在启动时重新生成可能是一个更好的方法。 最后,验证方法也很重要。用户需要知道如何检查生成的machine-id是否正确,是否持久化,以及是否在每次启动时保持不变。可能需要指导用户如何通过运行镜像并检查文件内容来确认配置是否生效。 总结一下,步骤可能包括:创建bbappend文件,添加生成脚本或服务,处理持久化存储,以及验证配置。需要确保所有步骤符合Yocto的构建流程,并遵循最佳实践,比如使用自定义层而不是直接修改原配方。</think>在Yocto项目中自动生成$\\text{/etc/machine-id}$文件可通过以下步骤实现: ### 方法1:通过systemd-machine-units扩展 1. **创建自定义层**: ```bash bitbake-layers create-layer meta-custom ``` 2. **添加bbappend文件**: 在$\\text{meta-custom/recipes-core/systemd}$目录下创建$\\text{systemd_%.bbappend}$文件,添加: ```python do_install:append() { install -d ${D}${sysconfdir} systemd-machine-id-setup --root=${D} } ``` 这会强制在构建阶段生成机器ID[^1] ### 方法2:使用首次启动脚本 1. **创建systemd服务文件**: 在$\\text{meta-custom/recipes-core/systemd}$中添加服务文件$\\text{machine-id-generator.service}$: ```ini [Unit] Description=Generate machine-id Before=systemd-machine-id-commit.service [Service] Type=oneshot ExecStart=/usr/bin/systemd-machine-id-setup [Install] WantedBy=sysinit.target ``` 2. **修改配方**: 在$\\text{systemd_%.bbappend}$中添加: ```python SYSTEMD_SERVICE:${PN} += "machine-id-generator.service" ``` ### 验证方法 烧录镜像后执行: ```bash cat /etc/machine-id # 应显示32字符的十六进制字符串 ``` ### 关键注意事项 1. 若使用只读根文件系统,需在$\\text{/var/lib/misc/}$创建符号链接: ```bash ln -sf /var/lib/misc/machine-id /etc/machine-id ``` 2. 避免在构建阶段生成真实ID(可能导致重复),建议使用空文件占位: ```python do_install:append() { touch ${D}${sysconfdir}/machine-id } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值