Yoctodevtool修改源代码
Posted jiangwei0512
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Yoctodevtool修改源代码相关的知识,希望对你有一定的参考价值。
说明
本文接在【Yocto】BitBake入门之镜像中的HelloWorld之后完成。
修改源代码
如果想要修改Poky项目中的源代码,可以依赖于devtool
工具,这里以修改busybox为例。
首先创建workspace:
jw@X1C:~/code/poky/build$ devtool create-workspace
NOTE: Starting bitbake server...
jw@X1C:~/code/poky/build$ tree workspace/
workspace/
├── conf
│ └── layer.conf
└── README
1 directory, 2 files
使用devtool create-workspace
除了创建上述的workspace,还会修改conf/bblayers.conf
,它的作用是将workspace作为一个Layer添加到项目中:
jw@X1C:~/code/poky/build$ cat conf/bblayers.conf
# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"
BBPATH = "${TOPDIR}"
BBFILES ?= ""
BBLAYERS ?= " \\
/home/jw/code/poky/meta \\
/home/jw/code/poky/meta-poky \\
/home/jw/code/poky/meta-yocto-bsp \\
/home/jw/code/poky/meta-mylayer \\
/home/jw/code/poky/build/workspace \\
"
还可以通过bitbake-layers
查看:
jw@X1C:~/code/poky/build$ bitbake-layers show-layers
NOTE: Starting bitbake server...
layer path priority
==========================================================================
meta /home/jw/code/poky/meta 5
meta-poky /home/jw/code/poky/meta-poky 5
meta-yocto-bsp /home/jw/code/poky/meta-yocto-bsp 5
meta-mylayer /home/jw/code/poky/meta-mylayer 6
workspace /home/jw/code/poky/build/workspace 99
其次就是添加配方到workspace目录:
jw@X1C:~/code/poky/build$ devtool modify busybox
NOTE: Starting bitbake server...
NOTE: Reconnecting to bitbake server...
NOTE: Retrying server connection (#1)...
Loading cache: 100% |########################################################################################################################################################################| Time: 0:00:00
Loaded 1424 entries from dependency cache.
INFO: SRC_URI contains some conditional appends/prepends - will create branches to represent these
NOTE: Resolving any missing task queue dependencies
Build Configuration:
BB_VERSION = "1.49.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "universal"
TARGET_SYS = "x86_64-poky-linux"
MACHINE = "qemux86-64"
DISTRO = "poky"
DISTRO_VERSION = "3.2+snapshot-f13e17656248021debea6fe01564c40af27271d1"
TUNE_FEATURES = "m64 core2"
TARGET_FPU = ""
meta
meta-poky
meta-yocto-bsp
meta-mylayer
workspace = "master:f13e17656248021debea6fe01564c40af27271d1"
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: Adding local source files to srctree...
INFO: Source tree extracted to /home/jw/code/poky/build/workspace/sources/busybox
WARNING: SRC_URI is conditionally overridden in this recipe, thus several devtool-override-* branches have been created, one for each override that makes changes to SRC_URI. It is recommended that you make changes to the devtool branch first, then checkout and rebase each devtool-override-* branch and update any unique patches there (duplicates on those branches will be ignored by devtool finish/update-recipe)
INFO: Using source tree as build directory since that would be the default for this recipe
INFO: Recipe busybox now set up to build from /home/jw/code/poky/build/workspace/sources/busybox
这样busybox的代码就被下载到build/workspace/sources/busybox
目录下了,这个时候在构建项目,则使用的是workspace目录下的源码,如下所示:
jw@X1C:~/code/poky/build$ bitbake core-image-minimal
Loading cache: 100% |########################################################################################################################################################################| Time: 0:00:00
Loaded 1424 entries from dependency cache.
Parsing recipes: 100% |######################################################################################################################################################################| Time: 0:00:00
Parsing of 810 .bb files complete (809 cached, 1 parsed). 1424 targets, 42 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
Build Configuration:
BB_VERSION = "1.49.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "universal"
TARGET_SYS = "x86_64-poky-linux"
MACHINE = "qemux86-64"
DISTRO = "poky"
DISTRO_VERSION = "3.2+snapshot-f13e17656248021debea6fe01564c40af27271d1"
TUNE_FEATURES = "m64 core2"
TARGET_FPU = ""
meta
meta-poky
meta-yocto-bsp
meta-mylayer
workspace = "master:f13e17656248021debea6fe01564c40af27271d1"
Initialising tasks: 100% |###################################################################################################################################################################| Time: 0:00:01
Sstate summary: Wanted 5 Found 1 Missed 4 Current 1088 (20% match, 99% complete)
NOTE: Executing Tasks
NOTE: busybox: compiling from external source tree /home/jw/code/poky/build/workspace/sources/busybox
NOTE: Tasks Summary: Attempted 3113 tasks of which 3083 didn't need to be rerun and all succeeded.
下一个就是修改源码,比如修改coreutils/date.c
,增加helloworld打印:
puts("helloworld\\n");
然后再构建项目,发现会报错:
jw@X1C:~/code/poky/build$ bitbake core-image-minimal
Loading cache: 100% |########################################################################################################################################################################| Time: 0:00:00
Loaded 1424 entries from dependency cache.
Parsing recipes: 100% |######################################################################################################################################################################| Time: 0:00:01
Parsing of 810 .bb files complete (809 cached, 1 parsed). 1424 targets, 42 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
Build Configuration:
BB_VERSION = "1.49.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "universal"
TARGET_SYS = "x86_64-poky-linux"
MACHINE = "qemux86-64"
DISTRO = "poky"
DISTRO_VERSION = "3.2+snapshot-f13e17656248021debea6fe01564c40af27271d1"
TUNE_FEATURES = "m64 core2"
TARGET_FPU = ""
meta
meta-poky
meta-yocto-bsp
meta-mylayer
workspace = "master:f13e17656248021debea6fe01564c40af27271d1"
Initialising tasks: 100% |###################################################################################################################################################################| Time: 0:00:01
Sstate summary: Wanted 5 Found 1 Missed 4 Current 1088 (20% match, 99% complete)
NOTE: Executing Tasks
NOTE: busybox: compiling from external source tree /home/jw/code/poky/build/workspace/sources/busybox
ERROR: busybox-1.32.0-r0 do_package: Error executing a python function in exec_python_func() autogenerated:
The stack trace of python calls that resulted in this exception/failure was:
File: 'exec_python_func() autogenerated', lineno: 2, function: <module>
0001:
*** 0002:ptest_update_alternatives(d)
0003:
File: '/home/jw/code/poky/meta/classes/ptest.bbclass', lineno: 98, function: ptest_update_alternatives
0094: for alt_name, alt_link, alt_target, _ in alternatives:
0095: # Some alternatives are for man pages,
0096: # check if the alternative is in PATH
0097: if os.path.dirname(alt_link) in bin_paths:
*** 0098: os.symlink(alt_target, os.path.join(ptest_bindir, alt_name))
0099:}
0100:
0101:do_configure_ptest_base[dirs] = "${B}"
0102:do_compile_ptest_base[dirs] = "${B}"
Exception: FileExistsError: [Errno 17] File exists: '/bin/busybox.suid' -> '/home/jw/code/poky/build/tmp/work/core2-64-poky-linux/busybox/1.32.0-r0/package/usr/lib/busybox/ptest/bin/login'
ERROR: Logfile of failure stored in: /home/jw/code/poky/build/tmp/work/core2-64-poky-linux/busybox/1.32.0-r0/temp/log.do_package.12918
ERROR: Task (/home/jw/code/poky/meta/recipes-core/busybox/busybox_1.32.0.bb:do_package) failed with exit code '1'
NOTE: Tasks Summary: Attempted 3096 tasks of which 3090 didn't need to be rerun and 1 failed.
Summary: 1 task failed:
/home/jw/code/poky/meta/recipes-core/busybox/busybox_1.32.0.bb:do_package
Summary: There was 1 ERROR message shown, returning a non-zero exit code.
但是如果再次编译,又能够编译成功了:
jw@X1C:~/code/poky/build$ bitbake core-image-minimal
Loading cache: 100% |########################################################################################################################################################################| Time: 0:00:00
Loaded 1424 entries from dependency cache.
Parsing recipes: 100% |######################################################################################################################################################################| Time: 0:00:00
Parsing of 810 .bb files complete (809 cached, 1 parsed). 1424 targets, 42 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
Build Configuration:
BB_VERSION = "1.49.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "universal"
TARGET_SYS = "x86_64-poky-linux"
MACHINE = "qemux86-64"
DISTRO = "poky"
DISTRO_VERSION = "3.2+snapshot-f13e17656248021debea6fe01564c40af27271d1"
TUNE_FEATURES = "m64 core2"
TARGET_FPU = ""
meta
meta-poky
meta-yocto-bsp
meta-mylayer
workspace = "master:f13e17656248021debea6fe01564c40af27271d1"
Initialising tasks: 100% |###################################################################################################################################################################| Time: 0:00:01
Sstate summary: Wanted 5 Found 1 Missed 4 Current 1088 (20% match, 99% complete)
NOTE: Executing Tasks
NOTE: busybox: compiling from external source tree /home/jw/code/poky/build/workspace/sources/busybox
NOTE: Tasks Summary: Attempted 3113 tasks of which 3090 didn't need to be rerun and all succeeded.
运行镜像之后执行date
命令,结果如下:
可以看到代码修改成功了。
以上是关于Yoctodevtool修改源代码的主要内容,如果未能解决你的问题,请参考以下文章
修改MySQL密码报错“ERROR 1819 (HY000): Your password does not satisfy the current policy requirements“(代码片段
使用 NodeJS 和 JSDOM/jQuery 从代码片段构建 PHP 页面
创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)减速(车速自减)修改车牌号,查询车的载重量。 编写两个构造方法:一个没有(代码片段