devtool是Yocto项目中的一个通用命令行工具,旨在简化软件开发、测试和打包的流程。它为开发者提供了多个功能,包括操作菜谱、修改源代码、构建软件包,以及将生成的软件集成到镜像中。虽然它可以在Yocto项目的构建环境中与BitBake结合使用,但devtool更侧重于简化本地开发和快速迭代,尤其在可扩展SDK环境中,其优势更加突出。
在可扩展SDK中,devtool是核心组件,开发者可以通过它轻松管理本地的开发任务,包括构建、测试、打包和部署软件。与Yocto项目的构建环境不同,开发者在可扩展SDK中不需要直接操作BitBake,而是通过devtool来执行大多数的构建任务。devtool提供了一个简化的高层接口,专注于本地开发和测试,而BitBake则处理底层的依赖管理和构建执行。这种方式极大地简化了开发者的工作流程,使得开发过程更加高效和直观。
devtool子命令
在开发主机上运行devtool命令之前,必须通过source命令执行环境设置脚本设置必要的环境变量:
***@ubuntu:~/poky_sdk$ source environment-setup-cortexa72-poky-linux
SDK environment now set up; additionally you may now run devtool to perform development tasks.
Run devtool --help for further details.
devtool的命令行结构与Git类似,它包含了多个子命令,每个子命令对应不同的功能。可以运行devtool --help查看所有可用命令:
jerry@ubuntu:~/poky_sdk$ 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
ide-sdk Setup the SDK and configure the IDE
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
package Build packages for a recipe
build-image Build image including workspace recipe packages
runqemu Run QEMU on the specified image
Advanced:
export Export workspace into a tar archive
extract Extract the source for an existing recipe
sync Synchronize the source tree for an existing recipe
build-sdk Build a derivative SDK of this one
menuconfig Alter build-time configuration for a recipe
import Import exported tar archive into workspace
SDK maintenance:
sdk-update Update SDK components
sdk-install Install additional SDK components
Use devtool <subcommand> --help to get help on a specific command
其主要子命令分为几大类:
- 菜谱初始化操作:这些命令用于开始开发新菜谱或修改现有构建系统中的菜谱,帮助快速搭建项目。典型命令包括add(添加新菜谱)、modify(修改已有菜谱)以及upgrade(升级现有菜谱)。
- 信息查询:这类命令提供工作区和菜谱的状态信息,帮助开发者实时了解构建情况。常用命令有status(查看工作区状态)、search(搜索菜谱)和latest-version(查询菜谱最新版本)。
- 工作区菜谱管理:用于管理工作区中的菜谱和源代码,确保开发流程顺利。典型命令包括build(构建菜谱)、edit-recipe(编辑菜谱)和reset(移除工作区菜谱)。
- 部署与测试:这些命令将构建结果部署到目标设备上并进行测试。常见命令包括deploy-target(部署到目标设备)、undeploy-target(从设备撤回)和build-image(构建包含工作区内容的镜像)。
- 高级功能与SDK维护:这些命令用于导出、更新和维护SDK,适用于更复杂的开发场景。典型命令有export(导出工作区)、build-sdk(构建派生SDK)和sdk-update(更新SDK组件)。
后续的小节将详细介绍常用子命令的具体功能和用法,帮助开发者在本地进行灵活的开发和调试。
在安装并配置好完成可扩展SDK后,workspace层中通常为空。开发者通过devtool工具的菜谱初始化操作类型的子命令来创建和管理菜谱。此类操作包括创建、修改、和升级菜谱,以便将源代码集成到项目的构建流程中。本节将介绍如何使用devtool add 等命令快速完成菜谱的初始化,确保源代码能够进入workspace层或其他指定位置。
devtool add添加菜谱
devtool add命令用于在workspace层中创建一个新的菜谱。该命令灵活性很高,允许通过不同方式获取源代码。可以选择将上游源代码提取到工作区中,也可以将其提取到本地Git仓库,或者直接引用已有的源代码,无需进行提取操作。
提取上游源代码至工作区并创建菜谱
当源代码位于远程仓库时,可以使用devtool add将其提取到workspace层的sources目录下。通用命令格式如下:
devtool add <newrecipe> <fetch_uri>
该命令将fetch_uri远程仓库中的源代码提取到workspace层中,创建的newrecipe新菜谱及追加菜谱默认会被放入workspace层中recipes和appends目录下。
提取上游源代码放入本地目录并创建菜谱
从远程获取源代码,并放入workspace层中的sources目录下,使用以下命令
devtool add <newrecipe> <source_diretory> <fetch_uri>
该命令会将源代码提取到source_directory指定的本地路径,并在 workspace中创建菜谱和相应的追加菜谱文件。
使用本地源代码创建菜谱
如果源代码已经存在于本地,且不需要进行提取,devtool add 允许引用现有代码树:
devtool add <newrecipe> <source_directory>
该命令直接使用source_directory目录中已有的源代码,并在workspace中创建一个名为newrecipe新菜谱及相应追加菜谱文件,无需再次拉取或存储代码。
devtool modify修改源代码
使用可扩展SDK进行本地开发和迭代的主要优势在于,它让开发者能够灵活地修改和测试源代码。devtool modify命令正是为此目的设计的,提供了简便的方法来修改现有组件的源代码。通过该命令,开发者可以轻松提取源代码并进行修改,同时高效管理修改过程中产生的补丁文件,从而支持本地开发和快速迭代,提升开发效率。
上游提取源代码至工作区
源代码未在本地,需要从上游提取。devtool modify根据内部构建系统中菜谱的SRC_URI定位源代码,将其提取到工作区workspacesc层中默认的sources目录下,以此为构建源代码。构建系统中菜谱保持不变,工作区包含源代码和相应的.bbappend追加菜谱文件。
devtool modify <recipename>
上游提取源代码至本地目录
源代码未在本地,但需要提取到层地自定义路径。使用devtool modify命令并指定本地目录存放源代码。
devtool modify <recipename> < source_diretory>
source_diretory是指定的本地目录,源代码提取到这个目录。构建系统中菜谱保持不变,工作区添加.bbappend追加菜谱文件。
使用已有本地源代码树
源代码已经存在本地,无需再次提取。使用devtool modify -n命令,直接使用已有源代码。
devtool modify -n < recipename> < source_diretory>
-n选项跳过提取过程,source_diretory参数指向现有本地源代码树。工作区中只会创建.bbappend文件,源代码和菜谱保持原位。
devtool upgrade升级菜谱
devtool upgrade命令用于将工作区外的菜谱升级到指定的上游版本或修订版本。升级后的菜谱及其相关文件会被放入工作区,源代码树也会被提取到指定的位置,方便进行补丁调整或后续开发。
通过以下命令,可以灵活地升级菜谱到指定的版本或修订哈希,并在工作区中继续开发和测试。
升级到指定版本
要升级菜谱到指定的上游版本,使用以下命令:
devtool upgrade -V <version_number> <recipename>
其中,versio_nnumber是要升级的版本号,recipename是菜谱的名称。
升级并提取源代码到指定目录
如果希望将源代码提取到特定的本地目录,可以使用以下命令:
devtool upgrade -V <version_number> <recipename> <source_diretory>
source_diretory是源代码提取的本地路径。
升级到指定修订版
要将菜谱升级到上游代码库中的指定修订版本,使用以下命令:
devtool upgrade -S <source_revision> <recipename>
source_revision是Git仓库中的具体提交哈希值。
在可扩展SDK的开发过程中,devtool工具提供了信息查询子命令,帮助开发者快速获取工作区状态、搜索菜谱和查看最新版本等信息。以下是几个常用的子命令简要说明:
devtool status查询工作区状态
显示当前工作区workspace层的状态,包括所有菜谱及其相应源代码的路径。
devtool status
devtool search查询可用菜谱
搜索当前环境下可用的菜谱,帮助开发者快速找到已有的菜谱,以便进行修改、升级或重新构建。
devtool search <keyword>
keyword是搜索的关键词,它可以是菜谱名称、包名称、描述中的词,或者已安装文件的相关信息。
devtool latest-version查询上游最新版本
查询指定菜谱的最新上游版本,确保开发者使用的版本是最新的,并提供升级的参考。
devtool latest-version <recipename>
recipename是菜谱名称,包括工作区和内部构建系统中的菜谱。
工作区菜谱管理类型的子命令用于在workspace层中高效处理菜谱的相关操作。通过这些命令,开发者可以进行菜谱的构建、编辑、重命名或移除等管理操作,确保工作区内的菜谱能够顺利进入构建流程
devtool build构建菜谱
在菜谱初始化操作,或者修改了菜谱或源代码之后,通常都需要重新构建,重新构建命令如下:
devtool build <recipename>
recipename为菜谱的名字。
devtool edit-recipe编辑菜谱
devtool edit-recipe命令允许用户在本地使用文本编辑器直接打开和编辑菜谱文件,便于进行必要的调整:
devtool edit-recipe <recipename>
在编辑器中修改recipename菜谱,修改后,这些更改将在下一次构建时生效。
devtool rename重命名菜谱
通过devtool rename命令,开发者可以重命名工作区中的菜谱文件。
devtool rename <old_recipename> <new_recipename>
old_recipename是当前菜谱的名称,new_recipename是要修改成的新的菜谱名称。
devtool reset移除菜谱
移除工作区workspace中的菜谱和追加菜谱文件,及其关联的源代码,使工作区恢复到修改前的状态。
devtool reset <recipename>
此命令将移除workspace中recipename菜谱和追加菜谱文件,及其关联的源代码。
devtool finish完成并提交菜谱
此命令用于将移动工作区的菜谱移动到内部构建系统的永久元数据层中,并从工作区中移除:
devtool finish <recipename> <destination_layer>
recipename是要工作区的菜谱名称,destination_layer是目标层名称。
部署与测试
devtool build-image构建镜像菜谱
该命令会自动将workspace层中的菜谱和追加菜谱都集成到构建系统中去构建新的镜像,可以使用以下命令构建镜像:
devtool build-image <image_recipenames>
image_recipename是指镜像菜谱的名字。
devtool runqemu启动QEMU虚拟机
该命令用于通过QEMU启动适配的已构建镜像,帮助开发者在虚拟化环境中进行镜像的快速测试,无需物理硬件支持。命令格式如下:
devtool runqemu <imagename> [args]
imagename是已经构建好的镜像名称,args是传递给runqemu脚本的附加参数,用于进一步配置虚拟机的运行环境。
devtool deploy-target部署构建输出
该命令将构建指定菜谱生成的构建输出软件包部署到目标设备上。目标设备安装了SSH服务器的真实硬件或者QEMU模拟器。命令格式为:
devtool deploy-target <recipename> <target>
其中,recipename是菜谱名称,target是运行SSH服务的实时目标机器,通用格式为<user>@<target_ip>
devtool undeploy-target撤销部署
devtool undeploy-target命令用于从目标设备上撤回之前通过deploy-target部署的软件包,适用于安装了SSH服务器的真实硬件或QEMU模拟器。命令格式为:
devtool undeploy-target <recipename> <target>
高级功能与SDK维护
高级功能与SDK维护命令为开发者提供灵活的工作区管理和SDK定制、维护工具,涵盖从导出工作区、同步代码、配置菜谱到更新和安装SDK组件的操作,简化了复杂开发环境的管理。以下讲解export和build-sdk两个常用子命令。
devtool export导出工作区
将当前工作区导出为tar归档文件,便于备份或共享工作区的内容。导出的文件可用于在其他环境中恢复工作区。
devtool export -f <export_filename>
export_filename导出到的路径和文件名字,默认导出的tar类型文件包含工作区中的菜谱、追加菜谱文件和源代码。
devtool build-sdk 构建派生SDK
用于基于当前SDK和工作区中的内容构建一个派生可扩展SDK,包含特定项目的工具链和依赖,供其他开发者或团队使用。
devtool build-sdk
生成的可扩张SDK通常位于tmp/deploy/sdk目录中,开发者可以将其安装到其他开发机器上使用。
devtool sdk-update更新SDK
当在开发主机上已经安装好可扩展 SDK,并需要更新时,可以使用以下命令:
devtool sdk-update <path_to_update_directly>
path_to_update_directory 是一个可选参数,用于指定包含更新文件目录的路径。如果未位置该参数,系统会默认使用SDK_UPDATE_URL变量中定义的路径。
296

被折叠的 条评论
为什么被折叠?



