yocto-第12篇-如何修改开源项目的代码呢?

By: fu linux
E-mail: fulinux@sina.com
Blog: https://blog.csdn.net/fulinus
喜欢的盆友欢迎订阅!
你的喜欢就是我写作的动力!

返回总目录 Yocto开发讲解系列 - 总目录

问题描述

前面我们创建的几个项目 helloyocto learnyocto 项目都是我们自己创建的项目可以很容易修改。 yocto 中使用的项目都是开源的,有的是从压缩包或者 git 等方式下载下来的,如果发现这些开源软件有问题,要修改,总不能获取源码然后修改,在像添加自己的项目那样添加吧?那多麻烦。
比如你要修改的开源项目是 abc ,编译过程中创建的代码路径和中间文件可能是下面这样的:

build]$ ls tmp/work/core2-64-poky-linux/abc/git-r0/
abc/  debugsources.list         license-destdir  pkgdata-pdata-input  recipe-sysroot-native
abc.spec   deploy-rpms               package          pkgdata-sysroot      source-date-epoch
build             deploy-source-date-epoch  packages-split   pseudo               sysroot-destdir
configure.sstate  image                     pkgdata          recipe-sysroot       temp
  • 1
  • 2
  • 3
  • 4
  • 5

假设此时你在 tmp/work/core2-64-poky-linux/abc/git-r0/abc/ 源码目录里面去修改,然后 bitbake abc 时,要么没有编译你的修改,要么代码会重新恢复到原始的状态,即便成功,以后都要去源码里面修改吗?你修改的代码状态又该如何保存呢?自己生成补丁,然后在 bb 文件中添加吗?当然也可以,但是很麻烦。今天就为大家介绍简单的方法。

修改某个开源项目

这里我们的 qemux86-64 系统内部有一个 alsamixer 程序,可以运行看下帮助信息:

root@qemux86-64:~# alsamixer --help
Usage: alsamixer [options]
...
  • 1
  • 2
  • 3

现在我们假设要修改这个第三方开源的项目,该如何做呢?
不用管它是做什么的,为了简单我们准备在这个help命令里面做一点修改。
该程序编译后的目录在如下位置:

build]$ ls tmp/work/core2-64-poky-linux/alsa-utils/1.2.1-r0/image/usr/bin/
alsamixer ... #省略其他程序
  • 1
  • 2

alsa-utils源码位置

先简单看下源代码的情况:

build]$ ls tmp/work/core2-64-poky-linux/alsa-utils/1.2.1-r0/alsa-utils-1.2.1/
... alsamixer/ ...
build]$ cd tmp/work/core2-64-poky-linux/alsa-utils/1.2.1-r0/alsa-utils-1.2.1/
alsa-utils-1.2.1]$ git branch
  master
* my-yocto-3.1.2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

devtool modify命令

我们准备在alsamixer程序的help命令里面加一点字符串,但并不是在tmp/work/core2-64-poky-linux/alsa-utils/1.2.1-r0/alsa-utils-1.2.1/目录里面修改。我们可以通过devtool modify命令修改已有的recipe,比如像这里的alsa-utils。该命令与devtool add命令非常相似,不同之处在于它不会在workspace layer中创建recipe,因为该recipe已经存在于另一个layer中。比如alsa-utils recipe就存在于:

poky]$ ls meta/recipes-multimedia/alsa/alsa-utils_1.2.1.bb 
meta/recipes-multimedia/alsa/alsa-utils_1.2.1.bb
  • 1
  • 2

devtool modify命令获取recipe的源代码,并将其放到默认的workspace/sources目录中,会为其创建git存储库,并初始化,在目标分支上再切换出一个devtool分支, 并且会在此基础上打上recipe需要的patches文件。结合实际,这里我们使用如下命令获取alsa-utils源码:

build]$ devtool modify alsa-utils
NOTE: Starting bitbake server...
NOTE: Reconnecting to bitbake server...
NOTE: Retrying server connection (#1)...
Loading cache: 100% |############################################################################################| Time: 0:00:00
Loaded 1320 entries from dependency cache.
Parsing recipes: 100% |##########################################################################################| Time: 0:00:00
Parsing of 782 .bb files complete (779 cached, 3 parsed). 1323 targets, 46 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies

Build Configuration:
BB_VERSION           = "1.46.0"
BUILD_SYS            = "x86_64-linux"
NATIVELSBSTRING      = "universal"
TARGET_SYS           = "x86_64-poky-linux"
MACHINE              = "qemux86-64"
DISTRO               = "poky"
DISTRO_VERSION       = "3.1.2"
TUNE_FEATURES        = "m64 core2"
TARGET_FPU           = ""
meta                 
meta-poky            
meta-yocto-bsp       = "my-yocto-3.1.2:569b1f5d67c57de957e243997c53ec2f81dc8dfe"
meta-altera          = "master:aa24dfcb39fce3619a87ee6eef6e4296e66d2099"
meta-mylayer         
workspace            = "my-yocto-3.1.2:569b1f5d67c57de957e243997c53ec2f81dc8dfe"

Initialising tasks: 100% |#######################################################################################| Time: 0:00:00
Sstate summary: Wanted 0 Found 0 Missed 0 Current 20 (0% match, 100% complete)
NOTE: Executing Tasks
NOTE: Tasks Summary: Attempted 93 tasks of which 90 didn't need to be rerun and all succeeded.
INFO: Source tree extracted to /home/peeta/poky/build/workspace/sources/alsa-utils
INFO: Recipe alsa-utils now set up to build from /home/peeta/poky/build/workspace/sources/alsa-utils
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

alsa-utils源码就放到了这里:

build]$ ls workspace/sources/alsa-utils/
ABOUT-NLS     alsactl    alsaucm  axfer      config.guess  configure.ac  iecset      m4           po            test-driver
acinclude.m4  alsa-info  amidi    bat        config.rpath  COPYING       include     Makefile.am  README.md     TODO
aclocal.m4    alsaloop   amixer   ChangeLog  config.sub    depcomp       INSTALL     Makefile.in  seq           topology
alsaconf      alsamixer  aplay    compile    configure     gitcompile    install-sh  missing      speaker-test  utils
  • 1
  • 2
  • 3
  • 4
  • 5

并且会添加一个bbappend文件:

build]$ ls workspace/appends/
alsa-utils_1.2.1.bbappend  helloyocto.bbappend  learnyocto_git.bbappend
build]$ cat workspace/appends/alsa-utils_1.2.1.bbappend 
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
FILESPATH_prepend := "/home/peeta/poky/build/workspace/sources/alsa-utils/oe-local-files:"
# srctreebase: /home/peeta/poky/build/workspace/sources/alsa-utils

inherit externalsrc
# NOTE: We use pn- overrides here to avoid affecting multiple variants in the case where the recipe uses BBCLASSEXTEND
EXTERNALSRC_pn-alsa-utils = "/home/peeta/poky/build/workspace/sources/alsa-utils"

# initial_rev: 7721f196e02f770e8363a24a1ca170637052f166
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

会从master分支切换到一个新的devtool分支上

build]$ cd workspace/sources/alsa-utils/
alsa-utils]$ git branch -a
* devtool #当前所在分支
  master
alsa-utils]$ git log
7721f19 Initial commit from upstream at version 1.2.1 (OpenEmbedded, 3 分钟前)
alsa-utils]$ git log master
7721f19 Initial commit from upstream at version 1.2.1 (OpenEmbedded, 3 分钟前)
alsa-utils]$ 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

devtool使用现有recipe的SRC_URI语句获取上游的源码,将源代码提取到工作空间中的默认的source目录。使用的默认开发分支是“ devtool”。

修改alsa-utils源码

开始在下面的路径中修改源码

build]$ cd workspace/sources/alsa-utils/
alsa-utils]$ vim alsamixer/cli.c +40
  • 1
  • 2
static void show_help(void)
{
    puts(_("Usage: alsamixer [options], hello fulinux!")); //这里添加"hello fulinux !"
    puts(_("Useful options:\n"
           "  -h, --help              this help\n"
           "  -c, --card=NUMBER       sound card number or id\n"
           "  -D, --device=NAME       mixer device name\n"
           "  -V, --view=MODE         starting view mode: playback/capture/all"));
    puts(_("Debugging options:\n"
           "  -g, --no-color          toggle using of colors\n"
           "  -a, --abstraction=NAME  mixer abstraction level: none/basic"));
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

保存退出。查看修改点:

[peeta@tommy-OptiPlex-7060 alsa-utils]$ git status
位于分支 devtool
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

        修改:     alsamixer/cli.c

修改尚未加入提交(使用 "git add" 和/或 "git commit -a"[peeta@tommy-OptiPlex-7060 alsa-utils]$ git diff
diff --git a/alsamixer/cli.c b/alsamixer/cli.c
index 3f8f52f..fe00d31 100644
--- a/alsamixer/cli.c
+++ b/alsamixer/cli.c
@@ -37,7 +37,7 @@ static struct snd_mixer_selem_regopt selem_regopt = {
 
 static void show_help(void)
 {
-       puts(_("Usage: alsamixer [options]"));
+       puts(_("Usage: alsamixer [options], hello fulinux!"));
        puts(_("Useful options:\n"
               "  -h, --help              this help\n"
               "  -c, --card=NUMBER       sound card number or id\n"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

修改后开始编译

使用devtool build命令编译:

build]$ devtool build alsa-utils
NOTE: Tasks Summary: Attempted 1130 tasks of which 1122 didn't need to be rerun and all succeeded.
#没有编译错误,编译成功
  • 1
  • 2
  • 3

在线部署验证

使用上一篇的方法将其部署到 qemux86-64 系统中,我们不覆盖 /usr/bin/ 目录下的内容,将其部署到用户根目录下。参考如下:

build]$ devtool deploy-target alsa-utils root@192.168.7.2:~/
  • 1

#机器终端:

root@qemux86-64:~# ls
lib  usr  var
root@qemux86-64:~# cd usr/bin/
root@qemux86-64:~/usr/bin# ./alsamixer --help
Usage: alsamixer [options], hello fulinux! #这里显示的就是我们添加的内容。
  • 1
  • 2
  • 3
  • 4
  • 5

可见我们修改是成功的。不过到这里我们的工作还没有结束。

提交我们的修改

我们姑且认为我们的改动达到了预期目标,于是我们将改动做git提交如下:

alsa-utils]$ git add -u
alsa-utils]$ git commit -m 'alsamixer:test devtool modify'
  • 1
  • 2

devtool finish命令

下面的命令可能需要用到 meta-mylayer ,从本专栏开始学习过来盆友,应该记得创建自己的 layer 一篇中有提交到这个,不清楚的回去看下。
我们上面已经将自己的改动做了git提交。 devtool finish 命令会在本地git存储库中生成提交对应的所有补丁,更新 recipe (这里我们对应的就是 alsa-utils )以指向它们(或创建一个 .bbappend 文件来这样做,具体取决于指定的目标 layer ),然后重置 recipe ,以便可以正常构建 recipe (这里就是 alsa-utils ),而不是从工作空间中构建 recipe 。比如说我们的 alsa-utils ,使用了该命令后会生成一个 patch bbappend , 并在我们指定的 meta-mylayer 层,重置recipe,使得原来在 workspace 中构建 alsa-utils 失效,因为今后正常构建这个 alsa-utils recipe 时,会使用到生成的 patch bbappend 。参考如下:

build]$ devtool finish alsa-utils meta-mylayer
NOTE: Starting bitbake server...
ERROR: Source tree is not clean:

 M Makefile.in
 M aclocal.m4
 M alsa-info/Makefile.in
 M alsaconf/Makefile.in
 M alsactl/Makefile.in
 M alsactl/init/Makefile.in
 M alsaloop/Makefile.in
 M alsamixer/Makefile.in
 M alsaucm/Makefile.in
 M amidi/Makefile.in
 M amixer/Makefile.in
 M aplay/Makefile.in
 M axfer/Makefile.in
 M axfer/test/Makefile.in
 M bat/Makefile.in
 M bat/tests/Makefile.in
 M bat/tests/asound_state/Makefile.in
 M config.guess
 M config.rpath
 M config.sub
 M configure
 M iecset/Makefile.in
 M include/Makefile.in
 M include/aconfig.h.in
 M m4/Makefile.in
 D m4/gettext.m4
 D m4/iconv.m4
 D m4/lib-ld.m4
 D m4/lib-link.m4
 D m4/lib-prefix.m4
 D m4/nls.m4
 D m4/po.m4
 D m4/progtest.m4
 M po/Makefile.in.in
 M seq/Makefile.in
 M seq/aconnect/Makefile.in
 M seq/aplaymidi/Makefile.in
 M seq/aseqdump/Makefile.in
 M seq/aseqnet/Makefile.in
 M speaker-test/Makefile.in
 M speaker-test/samples/Makefile.in
 M topology/Makefile.in
 M utils/Makefile.in
?? autom4te.cache/
?? include/aconfig.h.in~
?? version

Ensure you have committed your changes or use -f/--force if you are sure there's nothing that needs to be committed
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

这里提示我们的源码目录里面不干净,可能是因为我做git提交后又编译了一次。我们到源码里面看下:

build]$ cd workspace/sources/alsa-utils/
[peeta@tommy-OptiPlex-7060 alsa-utils]$ git status
位于分支 devtool
尚未暂存以备提交的变更:
  (使用 "git add/rm <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

        修改:     Makefile.in
        修改:     aclocal.m4
        修改:     alsa-info/Makefile.in
        修改:     alsaconf/Makefile.in
        修改:     alsactl/Makefile.in
        修改:     alsactl/init/Makefile.in
        修改:     alsaloop/Makefile.in
        修改:     alsamixer/Makefile.in
        修改:     alsaucm/Makefile.in
        修改:     amidi/Makefile.in
        修改:     amixer/Makefile.in
        修改:     aplay/Makefile.in
        修改:     axfer/Makefile.in
        修改:     axfer/test/Makefile.in
        修改:     bat/Makefile.in
        修改:     bat/tests/Makefile.in
        修改:     bat/tests/asound_state/Makefile.in
        修改:     config.guess
        修改:     config.rpath
        修改:     config.sub
        修改:     configure
        修改:     iecset/Makefile.in
        修改:     include/Makefile.in
        修改:     include/aconfig.h.in
        修改:     m4/Makefile.in
        删除:     m4/gettext.m4
        删除:     m4/iconv.m4
        删除:     m4/lib-ld.m4
        删除:     m4/lib-link.m4
        删除:     m4/lib-prefix.m4
        删除:     m4/nls.m4
        删除:     m4/po.m4
        删除:     m4/progtest.m4
        修改:     po/Makefile.in.in
        修改:     seq/Makefile.in
        修改:     seq/aconnect/Makefile.in
        修改:     seq/aplaymidi/Makefile.in
        修改:     seq/aseqdump/Makefile.in
        修改:     seq/aseqnet/Makefile.in
        修改:     speaker-test/Makefile.in
        修改:     speaker-test/samples/Makefile.in
        修改:     topology/Makefile.in
        修改:     utils/Makefile.in

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)

        autom4te.cache/
        include/aconfig.h.in~
        version
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57

这里面主要是生成了一些 do_configure 的中间文件等。我可以通过 git checkout . 或者手动删除等操作来清理源码目录,但是我们仔细看上面的提示“ use -f/--force if you are sure there's nothing that needs to be committed ”,即在使用 devtool finish 命令时,加个“-f”选项也可以,如下:

build]$ devtool finish alsa-utils meta-mylayer -f
NOTE: Writing append file /home/peeta/poky/meta-mylayer/recipes-multimedia/alsa/alsa-utils_%.bbappend
NOTE: Copying 0001-alsamixer-test-devtool-modify.patch to /home/peeta/poky/meta-mylayer/recipes-multimedia/alsa/alsa-utils/0001-alsamixer-test-devtool-modify.patch
INFO: Cleaning sysroot for recipe alsa-utils...
INFO: Leaving source tree /home/peeta/poky/build/workspace/sources/alsa-utils as-is; if you no longer need it then please delete it manually
  • 1
  • 2
  • 3
  • 4
  • 5

上面命令 NOTE 提示我们在 poky/meta-mylayer/recipes-multimedia/alsa/ 目录下加了一个 alsa-utils_%.bbappend 文件,生成一个我们 git commit 提交的补丁文件,然后将其拷贝到了 poky/meta-mylayer/recipes-multimedia/alsa/alsa-utils/ 目录下面。
而且最后提示你说如果 poky/build/workspace/sources/alsa-util 目录没有用了你可以删除它。

build]$ cat /home/peeta/poky/meta-mylayer/recipes-multimedia/alsa/alsa-utils_%.bbappend
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"

SRC_URI += "file://0001-alsamixer-test-devtool-modify.patch"
  • 1
  • 2
  • 3
  • 4
build]$ cat /home/peeta/poky/meta-mylayer/recipes-multimedia/alsa/alsa-utils/0001-alsamixer-test-devtool-modify.patch
From 79b08b5cc319156df72dd808e93b7f624d0f7058 Mon Sep 17 00:00:00 2001
From: Peeta Chen <peeta.chen@quectel.com>
Date: Sat, 24 Oct 2020 16:07:20 +0800
Subject: [PATCH] alsamixer:test devtool modify

---
 alsamixer/cli.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/alsamixer/cli.c b/alsamixer/cli.c
index 3f8f52f..fe00d31 100644
--- a/alsamixer/cli.c
+++ b/alsamixer/cli.c
@@ -37,7 +37,7 @@ static struct snd_mixer_selem_regopt selem_regopt = {
 
 static void show_help(void)
 {
-       puts(_("Usage: alsamixer [options]"));
+       puts(_("Usage: alsamixer [options], hello fulinux!"));
        puts(_("Useful options:\n"
               "  -h, --help              this help\n"
               "  -c, --card=NUMBER       sound card number or id\n"
build]$ rm -rf workspace/sources/alsa-utils/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

这里我们的工作基本上完成了,编译我们的镜像文件,做个镜像验证,确保我们的工作最后有效。

devtool build-image命令

build]$ cd ..
poky]$ source oe-init-build-env 

### Shell environment set up for builds. ###

You can now run 'bitbake <target>'

Common targets are:
    core-image-minimal
    core-image-sato
    meta-toolchain
    meta-ide-support

You can also run generated qemu images with a command like 'runqemu qemux86'

Other commonly useful commands are:
 - 'devtool' and 'recipetool' handle common recipe tasks
 - 'bitbake-layers' handles common layer tasks
 - 'oe-pkgdata-util' handles common target package tasks

build]$ devtool build-image core-image-sato
NOTE: Starting bitbake server...
NOTE: Reconnecting to bitbake server...
NOTE: Retrying server connection (#1)...
Parsing recipes: 100% |###################################################################################| Time: 0:00:18
Parsing of 782 .bb files complete (0 cached, 782 parsed). 1323 targets, 46 skipped, 0 masked, 0 errors.
INFO: Building image core-image-sato with the following additional packages: helloyocto learnyocto example
Loading cache: 100% |#####################################################################################| Time: 0:00:00
Loaded 1320 entries from dependency cache.
Parsing recipes: 100% |###################################################################################| Time: 0:00:00
Parsing of 782 .bb files complete (778 cached, 4 parsed). 1323 targets, 46 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies

Build Configuration:
BB_VERSION           = "1.46.0"
BUILD_SYS            = "x86_64-linux"
NATIVELSBSTRING      = "universal"
TARGET_SYS           = "x86_64-poky-linux"
MACHINE              = "qemux86-64"
DISTRO               = "poky"
DISTRO_VERSION       = "3.1.2"
TUNE_FEATURES        = "m64 core2"
TARGET_FPU           = ""
meta                 
meta-poky            
meta-yocto-bsp       = "my-yocto-3.1.2:569b1f5d67c57de957e243997c53ec2f81dc8dfe"
meta-altera          = "master:aa24dfcb39fce3619a87ee6eef6e4296e66d2099"
meta-mylayer         
workspace            = "my-yocto-3.1.2:569b1f5d67c57de957e243997c53ec2f81dc8dfe"

Initialising tasks: 100% |################################################################################| Time: 0:00:08
Sstate summary: Wanted 4 Found 1 Missed 3 Current 2768 (25% match, 99% complete)
NOTE: Executing Tasks
ERROR: core-image-sato-1.0-r0 do_rootfs: Could not invoke dnf. Command '/home/peeta/poky/build/tmp/work/qemux86_64-poky-linux/core-image-sato/1.0-r0/recipe-sysroot-native/usr/bin/dnf -v --rpmverbosity=info -y -c /home/peeta/poky/build/tmp/work/qemux86_64-poky-linux/core-image-sato/1.0-r0/rootfs/etc/dnf/dnf.conf --setopt=reposdir=/home/peeta/poky/build/tmp/work/qemux86_64-poky-linux/core-image-sato/1.0-r0/rootfs/etc/yum.repos.d --installroot=/home/peeta/poky/build/tmp/work/qemux86_64-poky-linux/core-image-sato/1.0-r0/rootfs --setopt=logdir=/home/peeta/poky/build/tmp/work/qemux86_64-poky-linux/core-image-sato/1.0-r0/temp --repofrompath=oe-repo,/home/peeta/poky/build/tmp/work/qemux86_64-poky-linux/core-image-sato/1.0-r0/oe-rootfs-repo --nogpgcheck install locale-base-en-us locale-base-en-gb rpm learnyocto helloyocto dnf packagegroup-core-x11-base packagegroup-core-ssh-dropbear packagegroup-base-extended packagegroup-core-x11-sato example packagegroup-core-boot psplash run-postinsts' returned 1:
DNF version: 4.2.2
cachedir: /home/peeta/poky/build/tmp/work/qemux86_64-poky-linux/core-image-sato/1.0-r0/rootfs/var/cache/dnf
Added oe-repo repo from /home/peeta/poky/build/tmp/work/qemux86_64-poky-linux/core-image-sato/1.0-r0/oe-rootfs-repo
repo: using cache for: oe-repo
not found other for: 
not found modules for: 
not found deltainfo for: 
not found updateinfo for: 
oe-repo: using metadata from Thu 22 Oct 2020 12:25:50 PM UTC.
No module defaults found
No match for argument: example
Error: Unable to find a match

ERROR: Logfile of failure stored in: /home/peeta/poky/build/tmp/work/qemux86_64-poky-linux/core-image-sato/1.0-r0/temp/log.do_rootfs.15636
ERROR: Task (/home/peeta/poky/meta/recipes-sato/images/core-image-sato.bb:do_rootfs) failed with exit code '1'
NOTE: Tasks Summary: Attempted 6854 tasks of which 6852 didn't need to be rerun and 1 failed.

Summary: 1 task failed:
  /home/peeta/poky/meta/recipes-sato/images/core-image-sato.bb:do_rootfs
Summary: There was 1 ERROR message shown, returning a non-zero exit code.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74

编译出错,这个和之前的一篇讲到的时候出现了相同的错误,仔细看上面的log,初步推断是我们自己加的空的example项目导致。该recipe里面没有任何实质的内容,可能就导致编译镜像的时候出现问题,因此我们做如下操作。

devtool reset 命令

使用 devtool reset 命令从工作空间层中删除 recipe 及其配置(例如,删除相应的 .bbappend 文件)。因此该命令使用需要谨慎些。因此,在运行 devtool reset 命令之前,如有必要将相关的文件保存到 workspace 目录之外的地方。不过该命令不会删除 workspace/source 目录下的内容。最后会提示你自己手动删除,参考如下:

build]$ devtool reset example
NOTE: Starting bitbake server...
INFO: Cleaning sysroot for recipe example...
INFO: Leaving source tree /home/peeta/poky/build/workspace/sources/example as-is; if you no longer need it then please delete it manually
  • 1
  • 2
  • 3
  • 4

如果没有保留 poky/build/workspace/sources/example 的必要可以使用下面的命令删除

rm -rf poky/build/workspace/sources/example
  • 1

再次使用 devtool build-image 命令编译:

build]$ devtool reset example
NOTE: Starting bitbake server...
INFO: Cleaning sysroot for recipe example...
INFO: Leaving source tree /home/peeta/poky/build/workspace/sources/example as-is; if you no longer need it then please delete it manually
[peeta@tommy-OptiPlex-7060 build]$ devtool build-image core-image-sato
NOTE: Starting bitbake server...
NOTE: Reconnecting to bitbake server...
NOTE: Retrying server connection (#1)...
NOTE: Reconnecting to bitbake server...
NOTE: Previous bitbake instance shutting down?, waiting to retry...
NOTE: Retrying server connection (#2)...
Loading cache: 100% |############################################################################################| Time: 0:00:00
Loaded 1320 entries from dependency cache.
Parsing recipes: 100% |##########################################################################################| Time: 0:00:00
Parsing of 782 .bb files complete (779 cached, 3 parsed). 1323 targets, 46 skipped, 0 masked, 0 errors.
Removing 1 recipes from the core2-64 sysroot: 100% |#############################################################| Time: 0:00:00
Removing 1 recipes from the qemux86_64 sysroot: 100% |###########################################################| Time: 0:00:00
INFO: Building image core-image-sato with the following additional packages: learnyocto helloyocto
Loading cache: 100% |############################################################################################| Time: 0:00:01
Loaded 1321 entries from dependency cache.
Parsing recipes: 100% |##########################################################################################| Time: 0:00:02
Parsing of 782 .bb files complete (779 cached, 3 parsed). 1323 targets, 46 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies

Build Configuration:
BB_VERSION           = "1.46.0"
BUILD_SYS            = "x86_64-linux"
NATIVELSBSTRING      = "universal"
TARGET_SYS           = "x86_64-poky-linux"
MACHINE              = "qemux86-64"
DISTRO               = "poky"
DISTRO_VERSION       = "3.1.2"
TUNE_FEATURES        = "m64 core2"
TARGET_FPU           = ""
meta                 
meta-poky            
meta-yocto-bsp       = "my-yocto-3.1.2:569b1f5d67c57de957e243997c53ec2f81dc8dfe"
meta-altera          = "master:aa24dfcb39fce3619a87ee6eef6e4296e66d2099"
meta-mylayer         
workspace            = "my-yocto-3.1.2:569b1f5d67c57de957e243997c53ec2f81dc8dfe"

Initialising tasks: 100% |#######################################################################################| Time: 0:00:26
Sstate summary: Wanted 19 Found 1 Missed 18 Current 2753 (5% match, 99% complete)
NOTE: Executing Tasks
NOTE: Tasks Summary: Attempted 6850 tasks of which 6808 didn't need to be rerun and all succeeded.
INFO: Successfully built core-image-sato. You can find output files in /home/peeta/poky/build/tmp/deploy/images/qemux86-64
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

运行验证

启动 qemu 虚拟机:

poky]$ source oe-init-build-env
build]$ runqemu qemux86-64
  • 1
  • 2

通过ssh登录:

$ ssh root@192.168.7.2
ssh: connect to host 192.168.7.2 port 22: Connection refused
$ ssh root@192.168.7.2
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:/hpbzg8DwVBkocBe87SoGsSatvCkQF/g26z7XS/5mIc.
Please contact your system administrator.
Add correct host key in /home/peeta/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/peeta/.ssh/known_hosts:13
  remove with:
  ssh-keygen -f "/home/peeta/.ssh/known_hosts" -R 192.168.7.2
RSA host key for 192.168.7.2 has changed and you have requested strict checking.
Host key verification failed.
$ ssh-keygen -f "/home/peeta/.ssh/known_hosts" -R 192.168.7.2
# Host 192.168.7.2 found: line 13
/home/peeta/.ssh/known_hosts updated.
Original contents retained as /home/peeta/.ssh/known_hosts.old
$ ssh root@192.168.7.2
The authenticity of host '192.168.7.2 (192.168.7.2)' can't be established.
RSA key fingerprint is SHA256:/hpbzg8DwVBkocBe87SoGsSatvCkQF/g26z7XS/5mIc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.7.2' (RSA) to the list of known hosts.
root@qemux86-64:~# learnyocto  #这个程序也是在文件系统中
[develop branch]Hello Yocto!
[develop branch]learn devtool deploy-target
root@qemux86-64:~# alsamixer --help
Usage: alsamixer [options], hello fulinux!  #依旧有我们之前加的内容
Useful options:
  -h, --help              this help
  -c, --card=NUMBER       sound card number or id
  -D, --device=NAME       mixer device name
  -V, --view=MODE         starting view mode: playback/capture/all
Debugging options:
  -g, --no-color          toggle using of colors
  -a, --abstraction=NAME  mixer abstraction level: none/basic
root@qemux86-64:~# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

谢谢阅读!期待您的点个赞,你的喜欢就是我持续更新的动力!