Yocto自定义SDK(二)
1.5更改默认的SDK安装目录
在为可扩展SDK构建安装程序时,SDK的默认安装目录基于populate_sdk_base类中的DISTRO和SDKEXTPATH变量,如下所示:
SDKEXTPATH ??= "~/${@d.getVar('DISTRO')}_sdk"
您可以通过专门设置SDKEXTPATH变量来更改此默认安装目录。
您可以通过多种方式设置此变量,但最有意义的方法是在您的发行版的配置文件中设置变量。 这样做会创建一个适用于您的发行版的SDK安装程序默认目录。 例如,假设您的发行版有自己的层,名为“ meta-mydistro”,并且使用的文件层次结构类型与默认的“ poky”发行版相同。 如果是这样,您可以使用以下格式更新〜/ meta-mydistro / conf / distro / mydistro.conf文件中的SDKEXTPATH变量:
SDKEXTPATH = "some_path_for_your_installed_sdk"
生成安装程序后,运行安装程序将提示用户接受some_path_for_your_installed_sdk目录作为安装可扩展SDK的默认位置。
1.6提供其他可安装的可扩展SDK内容
如果您希望构建的可扩展SDK的用户能够将项目添加到SDK,而无需用户从源代码构建项,则需要做很多事情:
1.确保您希望用户能够安装的其他项目已经构建:
- 显式构建项目。 您可以使用取决于其他recipes列表的一个或多个“meta” recipes。
- 建立“world”,并为不需要的recipes设置EXCLUDE_FROM_WORLD_pn-recipename。有关其他信息,请参见EXCLUDE_FROM_WORLD变量。
2.公开构建生成的sstate-cache目录。 通常,通过使该目录可通过Apache HTTP Server或Nginx Server使用来公开此目录。
3.设置适当的配置,以使生成的SDK知道如何查找配置。 您需要设置的变量是SSTATE_MIRRORS:
SSTATE_MIRRORS = "file://.* http://example.com/some_path/sstate-cache/PATH"
您可以在两个不同的位置设置SSTATE_MIRRORS变量:
- 如果您要设置的镜像值适合同时为实际上正在构建SDK的OpenEmbedded构建系统和SDK本身设置(即,镜像在两个地方都可以访问,否则它将在OpenEmbedded构建系统侧迅速失效,并且
它的内容不会干扰构建),那么您可以在local.conf或自定义发行版配置文件中设置变量。
然后,您可以通过添加以下内容将变量“白名单”到SDK,包括:SDK_LOCAL_CONF_WHITELIST = "SSTATE_MIRRORS"
- 另外,如果您只想为SDK设置SSTATE_MIRRORS变量的值,请在构建目录或任何层中创建conf /sdk-extra.conf文件,然后将SSTATE_MIRRORS设置放入该文件中。
注意
如果您对设置SSTATE_MIRRORS时使用哪种方法有任何疑问,则第二个选项是最安全的选项。
1.7最小化可扩展SDK安装程序的下载
默认情况下,可扩展SDK将共享状态工件捆绑在一起,以重建用于构建SDK的映像所需的所有内容。 这种捆绑会导致SDK安装程序文件的大小达到千兆字节或更大。 如果此文件的大小引起问题,则可以通过在配置中设置以下内容,来构建其中包含足够用于安装并提供对devtool命令的访问权限的SDK:
SDK_EXT_TYPE = "minimal"
将SDK_EXT_TYPE设置为“ minimal”将生成大小约为35 MB的SDK安装程序,它可以快速下载和安装。 但是,您需要认识到最小安装程序不会开箱即用地安装任何库或工具。 这些库和工具必须“即时”安装,或者通过使用devtool执行的操作或通过devtool sdk-install命令明确安装。
在大多数情况下,构建最小的SDK时,还需要启用有关系统生成的范围更广的软件包的信息。 需要更广泛的信息尤其如此,以便devtool add能够有效地将在源树中发现的依赖项映射到适当的配方。 另外,该信息使devtool搜索命令可以返回有用的结果。
为了提供更多信息,您需要设置以下内容:
SDK_INCLUDE_PKGDATA = "1"
有关其他信息,请参见SDK_INCLUDE_PKGDATA变量。
设置SDK_INCLUDE_PKGDATA变量将导致构建“world”,以便可以使用其中包含的所有配方的信息。 可用这些配方可以显着增加构建时间,并且可以将SDK安装程序的大小增加30-80 MB,具体取决于配置中包含的配方数量。
您可以将 EXCLUDE_FROM_WORLD_pn-recipename用于要排除的recipe。 但是,假设要向SDK提供其他项目,则需要构建“world”。 因此,在大多数情况下,构建“world”不应代表不必要的开销。、
注意
如果将SDK_EXT_TYPE设置为“ minimal”,则必须提供共享状态镜像,以便可以根据需要安装项目。 有关更多信息,请参见“ Providing Additional Installable Extensible SDK Content”部分。
通过将SDK_INCLUDE_TOOLCHAIN变量设置为“ 1”,可以在构建SDK时显式控制是否包括工具链。 特别是,在将SDK_EXT_TYPE设置为“ minimal”(默认情况下,不包括工具链)时,包括工具链非常有用。 另外,如果您要构建一个小型SDK以便与IDE或其他一些不想使用额外步骤来安装工具链的工具一起使用,这将很有帮助。
2 Customizing the Standard SDK
本章介绍了可以应用于标准SDK的自定义项。
2.1将单个软件包添加到标准SDK
使用bitbake -c populate_sdk构建标准SDK时,结果SDK中会包含一组默认的软件包。 TOOLCHAIN_HOST_TASK和TOOLCHAIN_TARGET_TASK变量控制添加到SDK的软件包的集合。
如果要将单个软件包添加到在主机上运行的工具链中,只需将这些软件包添加到TOOLCHAIN_HOST_TASK变量即可。 同样,如果要将软件包添加到在目标上运行的工具链的一部分的默认集合中,请将软件包添加到TOOLCHAIN_TARGET_TASK变量。
2.2将API文档添加到标准SDK
通过在DISTRO_FEATURES变量中添加“ api-documentation”,您可以在标准SDK中包括API文档以及配方提供的任何其他文档:DISTRO_FEATURES_append =“ api-documentation”如此处所示设置此变量会导致OpenEmbedded构建系统构建 文档,然后将其包含在标准SDK中。