命令pstree将相关进程以树状图显示,方便查看进程间的关系。由于调试需要,需要在Linux里使用命令pstree。但是PetaLinux产生的Linux映像,默认不带命令pstree。
在rootfs里查找pstree
首先使用命令“petalinux-config -c rootfs ”尝试在rootfs里查找pstree。没有找到pstree。
在psmisc里查找pstree
在Debian里,软件包psmisc包含pstree。
This package contains miscellaneous utilities that use the proc FS:
- fuser: identifies processes that are using files or sockets.
- killall: kills processes by name (e.g. "killall -HUP named").
- peekfd: shows the data traveling over a file descriptor.
- pstree: shows currently running processes as a tree.
- prtstat: print the contents of /proc//stat
在PetaLinux工程里能找到对应的bb文件。
代码语言:javascript复制hankf@XSZGS4:k26-cms-peta-0118$ find -name "*psmisc*.bb*"
./components/yocto/layers/core/meta/recipes-extended/psmisc/psmisc_23.4.bb
hankf@XSZGS4:k26-cms-peta-0118$ ls -l ./components/yocto/layers/core/meta/recipes-extended/psmisc/psmisc_23.4.bb
-rw-r--r-- 1 hankf hankf 343 May 22 18:19 ./components/yocto/layers/core/meta/recipes-extended/psmisc/psmisc_23.4.bb
hankf@XSZGS4:k26-cms-peta-0118$ cat ./components/yocto/layers/core/meta/recipes-extended/psmisc/psmisc_23.4.bb
require psmisc.inc
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
SRC_URI = "git://gitlab.com/psmisc/psmisc.git;protocol=https;branch=master
file://0001-Use-UINTPTR_MAX-instead-of-__WORDSIZE.patch
"
SRCREV = "5fab6b7ab385080f1db725d6803136ec1841a15f"
S = "${WORKDIR}/git"
配置对应的模块, 却失败。
代码语言:javascript复制hankf@XSZGS4:k26-cms-peta-0118$ petalinux-config -c psmisc
[INFO] Sourcing buildtools
[INFO] Silentconfig project
......
Warning: Root password set to 'root', It is highly recommended to change Root password.
[INFO] Generating workspace directory
[INFO] Configuring: psmisc
[INFO] bitbake psmisc -c menuconfig
NOTE: Started PRServer with DBfile: proj/hankf/kv260/v221/k26-cms-peta-0118/build/cache/prserv.sqlite3, Address: 127.0.0.1:35651, PID: 9607
Loading cache: 100% |##########################################################################################################################################################| Time: 0:00:02
Loaded 5398 entries from dependency cache.
Parsing recipes: 100% |########################################################################################################################################################| Time: 0:00:03
Parsing of 3601 .bb files complete (3596 cached, 5 parsed). 5403 targets, 507 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
ERROR: Task do_menuconfig does not exist for target psmisc (proj/hankf/kv260/v221/k26-cms-peta-0118/components/yocto/layers/core/meta/recipes-extended/psmisc/psmisc_23.4.bb:do_menuconfig). Close matches:
do_configure
ERROR: Command execution failed: 1
Summary: There were 2 ERROR messages shown, returning a non-zero exit code.
ERROR: bitbake failed to configure psmisc
ERROR: Failed to config psmisc. Check the proj/hankf/kv260/v221/k26-cms-peta-0118/build/config.log file for more details...```
在busybox里查找pstree
单板上已经有psmisc里的killall。检查killall,它来自于busybox。
代码语言:javascript复制root@k26-cms-xsa-temp-peta:~# which killall
/usr/bin/killall
root@k26-cms-xsa-temp-peta:~# ls -l /usr/bin/killall
lrwxrwxrwx 1 root root 12 Mar 9 2018 /usr/bin/killall -> /bin/busybox
root@k26-cms-xsa-temp-peta:~# ls -l /bin/busybox
-rwsr-xr-x 1 root root 1736016 Mar 9 2018 /bin/busybox
root@k26-cms-xsa-temp-peta:~# ls -l -h /bin/busybox
-rwsr-xr-x 1 root root 1.7M Mar 9 2018 /bin/busybox
于是使用命令“petalinux-config -c busybox”,尝试在busybox里配置pstree。有对应的命令和界面,选择使能pstree和其它模块。
代码语言:javascript复制hankf@XSZGS4:k26-cms-peta-0118$ petalinux-config -c busybox
[INFO] Sourcing buildtools
[INFO] Silentconfig project
[INFO] Sourcing build environment
..............
Loaded 0 entries from dependency cache.
Parsing recipes: 100% |########################################################################################################################################################| Time: 0:00:23
Parsing of 3601 .bb files complete (0 cached, 3601 parsed). 5403 targets, 507 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
Initialising tasks: 100% |#####################################################################################################################################################| Time: 0:00:12
Sstate summary: Wanted 50 Local 0 Network 50 Missed 0 Current 47 (100% match, 100% complete)
NOTE: Executing Tasks
NOTE: Tasks Summary: Attempted 432 tasks of which 426 didn't need to be rerun and all succeeded.
[INFO] bitbake busybox -c diffconfig
......
generate_bbappend /proj/hankf/kv260/v221/k26-cms-peta-0118/build/tmp/work/cortexa72-cortexa53-xilinx-linux/busybox/1.34.1-r0/user_2023-08-07-04-25-00.cfg proj/hankf/kv260/v221/k26-cms-peta-0118/project-spec/meta-user/
[INFO] recipetool appendsrcfile -wW proj/hankf/kv260/v221/k26-cms-peta-0118/project-spec/meta-user/ busybox /proj/hankf/kv260/v221/k26-cms-peta-0118/build/tmp/work/cortexa72-cortexa53-xilinx-linux/busybox/1.34.1-r0/user_2023-08-07-04-25-00.cfg
NOTE: Starting bitbake server...
NOTE: Started PRServer with DBfile: /proj/hankf/kv260/v221/k26-cms-peta-0118/build/cache/prserv.sqlite3, Address: 127.0.0.1:46587, PID: 7626
Loading cache...done.
在生成的文件里,看到“CONFIG_PSTREE”被使能。
代码语言:javascript复制hankf@XSZGS4:k26-cms-peta-0118$ cd project-spec/
hankf@XSZGS4:project-spec$ find -name "*busybox*bb*"
./meta-user/recipes-core/busybox/busybox_%.bbappend
hankf@XSZGS4:k26-cms-peta-0118$ cat project-spec/meta-user/recipes-core/busybox/busybox/user_2023-08-07-04-25-00.cfg
# Thu Sep 30 20:27:40 2021
CONFIG_IOSTAT=y
CONFIG_KILLALL5=y
CONFIG_LSOF=y
CONFIG_MPSTAT=y
CONFIG_NMETER=y
CONFIG_PSTREE=y
CONFIG_SMEMCAP=y
CONFIG_FEATURE_SHOW_THREADS=y
验证
编译PetaLinux工程后,再启动单板,单板上有pstree命令。
代码语言:javascript复制root@k26-cms-xsa-temp-peta:~# which pstree
/usr/bin/pstree
root@k26-cms-xsa-temp-peta:~# ls -l /usr/bin/pstree
lrwxrwxrwx 1 root root 12 Mar 9 2018 /usr/bin/pstree -> /bin/busybox
root@k26-cms-xsa-temp-peta:~# ls -l -h /usr/bin/pstree
lrwxrwxrwx 1 root root 12 Mar 9 2018 /usr/bin/pstree -> /bin/busybox