5获取SDK
目录
5.1定位预构建的 SDK 安装程序
您可以通过定位并运行 Yocto 项目附带的 SDK 安装程序脚本来使用现有的预构建工具链。使用此方法,您选择并下载特定于体系结构的 SDK 安装程序,然后运行脚本以手动安装工具链。
按照以下步骤找到并手动安装工具链:
转到安装程序目录:转到 https://downloads.yoctoproject.org/releases/yocto/yocto-3.3.2/toolchain/
打开构建主机的文件夹:打开与构建主机匹配的文件夹(即
i686
对于 32 位机器或x86_64
64 位机器)。找到并下载 SDK 安装程序:您需要找到并下载适合您的构建主机、目标硬件和映像类型的安装程序。
安装程序文件 (
*.sh
) 遵循以下命名约定:poky-glibc-host_system-core-image-type-arch-toolchain[-ext]-release.sh Where: host_system is a string representing your development system: "i686" or "x86_64" type is a string representing the image: "sato" or "minimal" arch is a string representing the target architecture: "aarch64", "armv5e", "core2-64", "cortexa8hf-neon", "i586", "mips32r2", "mips64", or "ppc7400" release is the version of Yocto Project. NOTE: The standard SDK installer does not have the "-ext" string as part of the filename.
Yocto 项目提供的工具链基于
core-image-sato
和core-image-minimal
图像,并包含适合针对这些图像进行开发的库。例如,如果您的构建主机是 64 位 x86 系统并且您需要用于 64 位 core2 目标的扩展 SDK,请进入该
x86_64
文件夹并下载以下安装程序:poky-glibc-x86_64-core-image-sato-core2-64-toolchain-ext-3.3.2.sh
运行安装程序:确保您具有执行权限并运行安装程序。以下是
Downloads
目录中的示例:$ ~/Downloads/poky-glibc-x86_64-core-image-sato-core2-64-toolchain-ext-3.3.2.sh
在脚本执行期间,您选择工具链的根位置。有关详细信息,请参阅“已安装的标准 SDK 目录结构”部分和“已安装的可扩展 SDK 目录结构”部分。
5.2构建 SDK 安装程序
作为查找和下载 SDK 安装程序的替代方法,您可以构建 SDK 安装程序。请按照以下步骤操作:
设置构建环境:确保您已设置为在 shell 中使用 BitBake。有关如何准备好构建主机的信息,请参阅Yocto 项目开发任务手册中的“准备构建主机”部分,该构建主机是本机 Linux 机器或使用 CROPS 的机器。
克隆 ``poky`` 存储库:您需要拥有 Yocto 项目源目录的本地副本 (即本地
poky
存储库)。请参阅Yocto 项目开发任务手册中的“克隆 poky 存储库”以及可能的“通过 Poky 中的分支检出”和“在 Poky 中通过标记检出”部分,了解有关如何克隆poky
存储库并检出适当的信息分支为您的工作。初始化构建环境:在源目录的根目录(即
poky
)中,运行 oe-init-build-env环境设置脚本以在构建主机上定义 OpenEmbedded 构建环境。$ source oe-init-build-env
除其他外,脚本创建了Build Directory,
build
在这种情况下,它位于 Source Directory 中。脚本运行后,您当前的工作目录将设置为该build
目录。确保您正在为正确的机器构建安装程序: 检查以确保 构建目录中文件中的MACHINE变量
local.conf
与您正在构建的体系结构相匹配。确保您的 SDK 机器设置正确:如果您正在构建一个工具链,该工具链旨在在与您当前的开发主机(即构建主机)不同的架构上运行,请确保构建目录中的文件中的SDKMACHINE变量
local.conf
是正确设置。注意
如果您正在为可扩展 SDK 构建 SDK 安装程序,则必须为您用于构建安装程序的机器的体系结构设置 SDKMACHINE 值。如果 SDKMACHINE 设置不正确,构建将失败并提供类似于以下内容的错误消息:
The extensible SDK can currently only be built for the same architecture as the machine being built on - SDK_ARCH is set to i686 (likely via setting SDKMACHINE) which is different from the architecture of the build machine (x86_64). Unable to continue.
构建 SDK 安装程序:要为标准 SDK 构建 SDK 安装程序并填充 SDK 映像,请使用以下命令形式。确保替换
image
为图像(例如“core-image-sato”):$ bitbake image -c populate_sdk
您可以使用以下命令表单对可扩展 SDK 执行相同操作:
$ bitbake image -c populate_sdk_ext
这些命令会生成一个 SDK 安装程序,其中包含与您的目标根文件系统匹配的 sysroot。
当
bitbake
命令完成后,SDK安装程序会在tmp/deploy/sdk
build目录。注意
默认情况下,之前的 BitBake 命令不会构建静态二进制文件。如果您想使用工具链来构建这些类型的库,您需要确保您的 SDK 具有相应的静态开发库。在构建 SDK 安装程序之前使用文件中的 TOOLCHAIN_TARGET_TASK 变量
local.conf
。这样做可确保最终的 SDK 安装过程安装适当的库包作为 SDK 的一部分。以下是使用libc
静态开发库的示例: TOOLCHAIN_TARGET_TASK:append = ” libc-staticdev”
运行安装程序:您现在可以从
tmp/deploy/sdk
构建目录中运行 SDK 安装程序 。下面是一个例子:$ cd poky/build/tmp/deploy/sdk $ ./poky-glibc-x86_64-core-image-sato-core2-64-toolchain-ext-3.3.2.sh
在脚本执行期间,您选择工具链的根位置。有关详细信息,请参阅“已安装的标准 SDK 目录结构”部分和“已安装的可扩展 SDK 目录结构”部分。
5.3提取根文件系统
安装工具链后,对于某些用例,您可能需要单独提取根文件系统:
您想使用 NFS 引导映像。
您想使用根文件系统作为目标 sysroot。
您希望使用根文件系统作为目标 sysroot 来开发目标应用程序。
按照以下步骤提取根文件系统:
找到并下载预构建的根文件系统映像文件的 Tarball:您需要找到并下载适合您的目标系统的根文件系统映像文件。这些文件保存在 “machines”目录下“版本索引”中特定于机器的文件夹中 。
“machines”目录的特定于机器的文件夹包含
*.tar.bz2
受支持机器的tarball ( )。这些目录还包含扁平的根文件系统映像文件 (*.ext4
),您可以直接与 QEMU 一起使用。预构建的根文件系统映像文件遵循以下命名约定:
core-image-profile-arch.tar.bz2 Where: profile is the filesystem image's profile: lsb, lsb-dev, lsb-sdk, minimal, minimal-dev, minimal-initramfs, sato, sato-dev, sato-sdk, sato-sdk-ptest. For information on these types of image profiles, see the "Images" chapter in the Yocto Project Reference Manual. arch is a string representing the target architecture: beaglebone-yocto, beaglebone-yocto-lsb, edgerouter, edgerouter-lsb, genericx86, genericx86-64, genericx86-64-lsb, genericx86-lsb and qemu*.
Yocto 项目提供的根文件系统基于
core-image-sato
和core-image-minimal
图像。例如,如果您计划使用 BeagleBone 设备作为目标硬件并且您的映像是
core-image-sato-sdk
映像,则可以下载以下文件:core-image-sato-sdk-beaglebone-yocto.tar.bz2
初始化交叉开发环境:您必须
source
使用交叉开发环境设置脚本来建立必要的环境变量。该脚本位于您安装工具链的顶级目录中(例如
poky_sdk
)。以下是基于“定位预构建 SDK 安装程序”部分中安装的工具链的示例:
$ source poky_sdk/environment-setup-core2-64-poky-linux
提取根文件系统:使用该
runqemu-extract-sdk
命令并提供根文件系统映像。以下是从先前构建的根文件系统映像中提取根文件系统的示例命令,该映像是从发布索引下载的。此命令将根文件系统提取到
core2-64-sato
目录中:$ runqemu-extract-sdk ~/Downloads/core-image-sato-sdk-beaglebone-yocto.tar.bz2 ~/beaglebone-sato
您现在可以将目标 sysroot 指向
beaglebone-sato
.
5.4安装的标准 SDK 目录结构
下图显示了通过运行*.sh
SDK 安装脚本安装标准 SDK 后生成的目录结构:
已安装的 SDK 由 SDK 的环境设置脚本、目标的配置文件、目标的版本文件以及sysroots
为目标系统开发对象所需的根文件系统 ( ) 组成。
在图中,斜体文本用于指示文件或目录名称的可替换部分。比如install_dir/version就是SDK的安装目录。默认情况下,此目录为/opt/poky/
. 并且,version 表示 SDK 的特定快照(例如 3.3.2)。此外,target 表示目标架构(例如i586
),host 表示开发系统的架构(例如x86_64
)。因此,目标和主机中两个目录的完整名称sysroots
可以分别是i586-poky-linux
和 x86_64-pokysdk-linux
。
5.5已安装的可扩展SDK目录结构
下图显示了通过运行*.sh
SDK 安装脚本安装可扩展 SDK 后生成的目录结构:
可扩展 SDK 的安装目录结构与标准 SDK 的安装结构完全不同。可扩展 SDK 不像标准 SDK 那样分离主机和目标部分。可扩展 SDK 使用 OpenEmbedded 构建系统的嵌入式副本,该系统具有自己的 sysroots。
目录结构中值得注意的是 SDK 的环境设置脚本、目标的配置文件、目标的版本文件以及由安装程序和 BitBake 运行的 OpenEmbedded 构建系统准备脚本的日志文件。
在图中,斜体文本用于指示文件或目录名称的可替换部分。例如 install_dir 是安装 SDK 的目录,poky_sdk
默认是,target 代表目标架构(如i586
)。