赞
踩
通常情况下我们会需要修改OpenBMC原有的程序来适配我们的项目,本节将介绍一般的流程。
为此首先我们需要了解devtool这个工具,注意它不是前端开发用的那个devtool,而是由OE(或者Yocto?)提供的一个用于构建、测试和打包程序的工具,在7 devtool Quick Reference — The Yocto Project ® 4.2.999 documentation有具体的介绍,我们一般用它来编辑和打包源代码。
devtool的帮助说明如下:
jw@HOME:~/openbmc/build$ devtool --help NOTE: Starting bitbake server... usage: devtool [--basepath BASEPATH] [--bbpath BBPATH] [-d] [-q] [--color COLOR] [-h] <subcommand> ... OpenEmbedded development tool options: --basepath BASEPATH Base directory of SDK / build directory --bbpath BBPATH Explicitly specify the BBPATH, rather than getting it from the metadata -d, --debug Enable debug output -q, --quiet Print only errors --color COLOR Colorize output (where COLOR is auto, always, never) -h, --help show this help message and exit subcommands: Beginning work on a recipe: add Add a new recipe modify Modify the source for an existing recipe upgrade Upgrade an existing recipe Getting information: status Show workspace status search Search available recipes latest-version Report the latest version of an existing recipe check-upgrade-status Report upgradability for multiple (or all) recipes Working on a recipe in the workspace: build Build a recipe rename Rename a recipe file in the workspace edit-recipe Edit a recipe file find-recipe Find a recipe file configure-help Get help on configure script options update-recipe Apply changes from external source tree to recipe reset Remove a recipe from your workspace finish Finish working on a recipe in your workspace Testing changes on target: deploy-target Deploy recipe output files to live target machine undeploy-target Undeploy recipe output files in live target machine build-image Build image including workspace recipe packages Advanced: create-workspace Set up workspace in an alternative location extract Extract the source for an existing recipe sync Synchronize the source tree for an existing recipe menuconfig Alter build-time configuration for a recipe export Export workspace into a tar archive import Import exported tar archive into workspace Use devtool <subcommand> --help to get help on a specific command
下面开始介绍如何修改源码并最终将修改之后的结果放到我们自己的项目中使用,这里以webui-vue为例。
jw@HOME:~/openbmc/build$ ls downloads/
Cython-0.29.33.tar.gz git2_source.denx.de.u-boot.u-boot.git.tar.gz nbd-3.24.tar.xz
Cython-0.29.33.tar.gz.done git2_source.denx.de.u-boot.u-boot.git.tar.gz.done nbd-3.24.tar.xz.done
Jinja2-3.1.2.tar.gz git2_sourceware.org.git.glibc.git.tar.gz net-snmp-5.9.3.tar.gz
Jinja2-3.1.2.tar.gz.done git2_sourceware.org.git.glibc.git.tar.gz.done net-snmp-5.9.3.tar.gz.done
# 后面略
这些压缩包不应该直接去修改,为此我们先创建一个目录来存放解压缩之后的源代码,这里通过devtool的create-workspace子命令来创建存放源代码的目录,执行的命令如下:
jw@HOME:~/openbmc/build$ devtool create-workspace
NOTE: Starting bitbake server...
NOTE: Reconnecting to bitbake server...
NOTE: Retrying server connection (#1)... (22:46:33.532066)
NOTE: Reconnecting to bitbake server...
NOTE: Reconnecting to bitbake server...
NOTE: Retrying server connection (#1)... (22:46:33.532066)
NOTE: Retrying server connection (#1)... (22:46:33.532066)
NOTE: Starting bitbake server...
此时build下就会多一个workspace目录:
jw@HOME:~/openbmc/build$ ls
bitbake-cookerdaemon.log cache conf downloads sstate-cache tmp workspace
jw@HOME:~/openbmc/build$ tree workspace/
workspace/
├── README
└── conf
└── layer.conf
1 directory, 2 files
里面也会有一个layer文件,实际上create-workspace就是创建了一个新的分层,并且还会修改build目录下的bblayers.conf文件来包含这个分层,这样这里面的代码才会在后续被编译和使用:
BBLAYERS ?= " \
/home/jw/openbmc/meta \
/home/jw/openbmc/meta-poky \
/home/jw/openbmc/meta-openembedded/meta-oe \
/home/jw/openbmc/meta-openembedded/meta-networking \
/home/jw/openbmc/meta-openembedded/meta-python \
/home/jw/openbmc/meta-phosphor \
/home/jw/openbmc/meta-aspeed \
/home/jw/openbmc/meta-beni \
/home/jw/openbmc/build/workspace \ # 这个就是新增的
"
之后我们找一个配方来修改其代码,这里就以webui-vue为例:
jw@HOME:~/openbmc/build$ bitbake -s | grep webui
phosphor-webui :1.0+gitAUTOINC+e16bb5c358-r1
webui-vue :1.0+gitAUTOINC+0f6147ca25-r1
jw@HOME:~/openbmc/build$ devtool modify webui-vue NOTE: Starting bitbake server... NOTE: Reconnecting to bitbake server... NOTE: Retrying server connection (#1)... (22:50:43.681700) Loading cache: 100% |###############################################################################################################| Time: 0:00:00 Loaded 4383 entries from dependency cache. Parsing recipes: 100% |###############################################################################################################| Time: 0:00:00 Parsing of 2709 .bb files complete (2708 cached, 1 parsed). 4384 targets, 566 skipped, 0 masked, 0 errors. NOTE: Resolving any missing task queue dependencies Build Configuration: BB_VERSION = "2.4.0" BUILD_SYS = "x86_64-linux" NATIVELSBSTRING = "ubuntu-20.04" TARGET_SYS = "arm-openbmc-linux-gnueabi" MACHINE = "beni-ast2500" DISTRO = "openbmc-phosphor" DISTRO_VERSION = "nodistro.0" TUNE_FEATURES = "arm thumb arm1176jzs" TARGET_FPU = "soft" meta meta-poky meta-oe meta-networking meta-python meta-phosphor meta-aspeed = "HEAD:67c9d4e715c705cd05fd04f7c8cd4fad300a4666" meta-beni = "master:37708567fc4efacfcba74f8274edc924e7ba7a1e" workspace = "HEAD:67c9d4e715c705cd05fd04f7c8cd4fad300a4666" Initialising tasks: 100% |###############################################################################################################| Time: 0:00:00 Sstate summary: Wanted 0 Local 0 Mirrors 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/jw/openbmc/build/workspace/sources/webui-vue INFO: Using source tree as build directory since that would be the default for this recipe INFO: Recipe webui-vue now set up to build from /home/jw/openbmc/build/workspace/sources/webui-vue
此时再次查看workspace目录:
jw@HOME:~/openbmc/build$ tree workspace/
workspace/
├── README
├── appends
│ └── webui-vue_git.bbappend
├── conf
│ └── layer.conf
└── sources
└── webui-vue
├── # 中间略
└── vue.config.js
97 directories, 318 files
然后我们修改webui-vue中的某些代码,这里修改登录界面的LOGO,替换成Apple的音乐图标。重新编译webui-vue:
jw@HOME:~/openbmc/build$ devtool build webui-vue NOTE: Starting bitbake server... NOTE: Reconnecting to bitbake server... NOTE: Retrying server connection (#1)... (23:04:57.342934) Loading cache: 100% |###############################################################################################################| Time: 0:00:00 Loaded 4383 entries from dependency cache. Parsing recipes: 100% |###############################################################################################################| Time: 0:00:00 Parsing of 2709 .bb files complete (2707 cached, 2 parsed). 4384 targets, 566 skipped, 0 masked, 0 errors. Removing 1 recipes from the allarch sysroot: 100% |###############################################################################################################| Time: 0:00:03 Removing 1 recipes from the beni_ast2500 sysroot: 100% |###############################################################################################################| Time: 0:00:00 Loading cache: 100% |###############################################################################################################| Time: 0:00:03 Loaded 4383 entries from dependency cache. Parsing recipes: 100% |###############################################################################################################| Time: 0:00:00 Parsing of 2709 .bb files complete (2707 cached, 2 parsed). 4384 targets, 566 skipped, 0 masked, 0 errors. NOTE: Resolving any missing task queue dependencies Build Configuration: BB_VERSION = "2.4.0" BUILD_SYS = "x86_64-linux" NATIVELSBSTRING = "ubuntu-20.04" TARGET_SYS = "arm-openbmc-linux-gnueabi" MACHINE = "beni-ast2500" DISTRO = "openbmc-phosphor" DISTRO_VERSION = "nodistro.0" TUNE_FEATURES = "arm thumb arm1176jzs" TARGET_FPU = "soft" meta meta-poky meta-oe meta-networking meta-python meta-phosphor meta-aspeed = "HEAD:67c9d4e715c705cd05fd04f7c8cd4fad300a4666" meta-beni = "master:37708567fc4efacfcba74f8274edc924e7ba7a1e" workspace = "HEAD:67c9d4e715c705cd05fd04f7c8cd4fad300a4666" Initialising tasks: 100% |###########################################################################################################| Time: 0:00:00 Sstate summary: Wanted 0 Local 0 Mirrors 0 Missed 0 Current 94 (0% match, 100% complete) NOTE: Executing Tasks NOTE: webui-vue: compiling from external source tree /home/jw/openbmc/build/workspace/sources/webui-vue NOTE: Tasks Summary: Attempted 435 tasks of which 427 didn't need to be rerun and all succeeded.
可以看到编译没有问题,说明修改本身也没有问题,下面的步骤就需要合入修改的代码。
jw@HOME:~/openbmc/build/workspace/sources/webui-vue$ git commit -m "[ADD]Modify." src/assets/images/applemusic.svg --no-
verify
[devtool 53f5b88] [ADD]Modify.
1 file changed, 1 insertion(+)
create mode 100644 src/assets/images/applemusic.svg
jw@HOME:~/openbmc/build/workspace/sources/webui-vue$ git commit -m "[ADD]Modify." --no-verify src/layouts/LoginLayout.vue
[devtool 02f4773] [ADD]Modify.
1 file changed, 1 insertion(+), 1 deletion(-)
这里增加了一个SVG图片,修改了Web的一行代码指向新的图片,总共有两个修改,都合入即可。然后通过devtool的update-recipe子命令生成补丁和对应的bbappend文件,并存放在我们的自定义项目目录中:
jw@HOME:~/openbmc/build$ devtool update-recipe webui-vue -a ../meta-beni/
NOTE: Starting bitbake server...
NOTE: Reconnecting to bitbake server...
NOTE: Retrying server connection (#1)... (00:14:14.267139)
Loading cache: 100% |####################################################################################| Time: 0:00:00
Loaded 4382 entries from dependency cache.
Parsing recipes: 100% |##################################################################################| Time: 0:00:00
Parsing of 2709 .bb files complete (2707 cached, 2 parsed). 4384 targets, 566 skipped, 0 masked, 0 errors.
NOTE: Writing append file /home/jw/openbmc/meta-beni/recipes-phosphor/webui/webui-vue_git.bbappend
NOTE: Copying 0001-ADD-Modify.patch to /home/jw/openbmc/meta-beni/recipes-phosphor/webui/webui-vue/0001-ADD-Modify.patch
NOTE: Copying 0002-ADD-Modify.patch to /home/jw/openbmc/meta-beni/recipes-phosphor/webui/webui-vue/0002-ADD-Modify.patch
得到的结果:
└── recipes-phosphor
├── packagegroups
│ └── packagegroup-obmc-apps.bbappend
└── webui # 新增目录
├── webui-vue
│ ├── 0001-ADD-Modify.patch
│ └── 0002-ADD-Modify.patch
└── webui-vue_git.bbappend
jw@HOME:~/openbmc/build$ devtool reset webui-vue
NOTE: Starting bitbake server...
INFO: Cleaning sysroot for recipe webui-vue...
INFO: Preserving source tree in /home/jw/openbmc/build/workspace/attic/sources/webui-vue.20230809002034
If you no longer need it then please delete it manually.
It is also possible to reuse it via devtool source tree argument.
此时源码还在,不过已经变了名字了,如果不需要就手动删除即可。
红框部分就是新的LOGO。
到此,修改OpenBMC原有程序的操作就已经完成了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。