yocto-第48篇-meta目录中conf里的配置项小札

By: fu linux
E-mail: fulinux@sina.com
Blog: https://blog.csdn.net/fulinus
喜欢的盆友欢迎点赞和订阅!
你的喜欢就是我写作的动力!

DISTRO和DISTRO_VERSION变量

首先问你一个问题如果拿到一个yocto项目,问你yocto是那个版本?你知道吗
DISTRO变量表示发行版的简称。DISTRO变量对应于一个分发配置文件,其根名称与变量的参数相同,尽可能用小写字母,且文件扩展名为.conf。例如,Poky发行版的配置文件为meta-poky/conf/distro目录中的poky.conf。通常在build/conf/local.conf配置文件中定义DISTRO变量,或者在bitbake命令之前指定(imx6系列的yocto编译时就是这样的)。比如在build/conf/local.conf中

DISTRO = "abcd"
  • 1

那么在meta-*/conf/distro中必然能找到abcd.conf配置文件

meta-XXX/conf/distro/abcd.conf
  • 1

DISTRO_VERSION变量表示发行版本,通常要查看我们yocto是那个发行版本,可以通过查询meta-poky/conf/distro/poky.conf文件,有些老的版本文件是meta-yocto/conf/distro/poky.conf

poky]$ cat meta-poky/conf/distro/poky.conf
DISTRO = "poky"
DISTRO_NAME = "Poky (Yocto Project Reference Distro)" #描述信息:叫Poky(Yocto项目参考发行版)
DISTRO_VERSION = "3.1.2" #表示当前的发行版本是3.1.2,
DISTRO_CODENAME = "dunfell" #yocto的代号
SDK_VENDOR = "-pokysdk"
SDK_VERSION = "${@d.getVar('DISTRO_VERSION').replace('snapshot-${DATE}', 'snapshot')}"
...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

看一个老一点的版本内容(meta-yocto/conf/distro/poky.conf):

poky]$ cat meta-yocto/conf/distro/poky.conf 
DISTRO = "poky"
DISTRO_NAME = "Poky (Yocto Project Reference Distro)"
DISTRO_VERSION = "2.0.3" #当前版本是2.0.3
DISTRO_CODENAME = "jethro"
SDK_VENDOR = "-pokysdk"
SDK_VERSION := "${@'${DISTRO_VERSION}'.replace('snapshot-${DATE}','snapshot')}"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

DISTRO_NAME是有关发行版的长名称的信息。

VARIANT变量

版本的变种,通常有些项目分"debug"和"user"两种版本(一个主要的区别是有无串口终端),还有"perf"种的版本,可以在build/conf/local.conf配置,或者在bitbake命令之前指定:

VARIANT="perf"
#or
VARIANT="debug"
  • 1
  • 2
  • 3

比如用于控制使用内核的那个defconfig:

KERNEL_CONFIG = "${@['xxxx-perf_defconfig', 'xxxx_defconfig'][d.getVar('VARIANT', True) == ('' or 'debug')]}"
  • 1

PACKAGE_DEBUG_SPLIT_STYLE变量

决定在创建与gdb调试器一起使用的*-dbg包时如何分割二进制文件和调试信息。
有几个参数提供参考哈~

  • ". Debug ":调试符号文件被放置在目标机器中。例如,如果一个二进制文件被安装在/usr/bin中,相应的具有调试符号的文件会被安装在/usr/bin/.debug目录中.同时,执行程序的源文件默认会被放在/usr/src/debug目录下。
  • “debug-without-src”:与前面描述的".debug"行为相同,只是没有安装源文件。
PACKAGE_DEBUG_SPLIT_STYLE = "debug-without-src"
  • 1

SERIAL_CONSOLE和SERIAL_CONSOLES变量

前者指定一个tty控制台和波特率,用空格分开,比如:

SERIAL_CONSOLE = "115200 ttyS0"
  • 1

后者可以定义一组tty控制台和波特率,tty控制台和波特率用";"分号分隔,每一组用空格分隔,比如:

SERIAL_CONSOLES = "115200;ttyS0 115200;ttyS1"
  • 1

ARM_INSTRUCTION_SET变量

对于armv7a及更高版本,默认使用Thumb-2指令集。如果有任何构建软件的自定义recipe需要使用ARM指令集构建,请按以下方式更改配方以设置指令集:

ARM_INSTRUCTION_SET       ?= "arm" 
  • 1

ARM指令集:ARM指令是32位的指令,编代码全部是 32bits 的,每条指令能承载更多的信息,因此使用最少的指令完成功能,
所以在相同频率下运行速度也是最快的, 但也因为每条指令是32bits 的而占用了最多的程序空间。

Thumb指令集:Thumb指令是16位的指令长度,编代码全部是 16bits
的,每条指令所能承载的信息少,因此它需要使用更多的指令才能完成功能, 因此运行速度慢,
但它也占用了最少的程序空间,但是Thumb指令集中的数据处理指令的操作数仍然是32位,指令地址也为32位,并且有些处理器可以根据指令译码器将Thumb指令转换为32位的ARM指令

Thumb-2指令集:Thumb-2指令集是16+32混合,在前面两者之间取了一个平衡, 兼有二者的优势, 当一个 操作可以使用一条
32bits指令完成时就使用 32bits 的指令, 加快运行速度, 而当一次操作只需要一条16bits 指令完成时就使用16bits
的指令,节约存储空间。 ————————————————
原文链接:https://blog.csdn.net/FCWTDGZ/article/details/109478921

FULL_OPTIMIZATION变量

编译优化系统时传入 TARGET_CFLAGS CFLAGS 的选项中。默认选项为 -O2 -pipe ${DEBUG_FLAGS} 。比如某个conf中:

FULL_OPTIMIZATION          = "-O2 -Wa,--noexecstack -fexpensive-optimizations -frename-registers -fomit-frame-pointer -ftree-vectorize "
FULL_OPTIMIZATION         += " -finline-functions -finline-limit=64 "
#Ignore a few common warnings
FULL_OPTIMIZATION         += " -Wno-error=maybe-uninitialized -Wno-error=unused-result "
  • 1
  • 2
  • 3
  • 4

ENABLE_BINARY_LOCALE_GENERATION变量

该变量用于控制在构建期间为glibc生成哪些locales(区域),对于一些RAM不超过64mb的设备,这个变量很有用。比如忽略设置

ENABLE_BINARY_LOCALE_GENERATION = "0"
  • 1

USE_LDCONFIG变量

该变量控制是否安装ldconfig,不安装:

USE_LDCONFIG = "0"
  • 1

但是目前已经被下面这个语句替代

DISTRO_FEATURES_BACKFILL_CONSIDERED_append = " ldconfig"
  • 1

PREFERRED_VERSION变量

字面意思就是优先使用的某个版本,前提是你的recipe支持多个版本,并且是这些版本中的一个才可以用,以 PN (recipe名)做后缀,赋值为版本号,可以用通配符"%", 比如有三个字段的版本号后面一个字段,或者其他经常变化的字段,比如有些bb文件名也会带有这个通配符。举两个例子:

PREFERRED_VERSION_autoconf = "2.68"
PREFERRED_VERSION_readline = "5.2"
PREFERRED_VERSION_python = "3.4.0"
PREFERRED_VERSION_linux-yocto = "4.12%"
  • 1
  • 2
  • 3
  • 4

USE_DEVFS变量

确定devtmpfs是否用于/dev入口。当没有特别设置值时,USE_DEVFS的默认值是“1”。通常,对于静态填充的/dev目录,您可以将USE_DEVFS设置为“0”。

DEPLOY_DIR_IMAGE变量

指向构建系统用于放置准备部署到目标机器上的镜像和其他相关输出文件的目录。该目录是特定于机器的,因为它包含 M A C H I N E 名 。 默 认 情 况 下 , 该 目 录 位 于 构 建 目 录 {MACHINE}名。默认情况下,该目录位于构建目录 M A C H I N E {DEPLOY_DIR}/images/${MACHINE}/中。比如:

# Retain existing directory structure for msm or mdm distro images.
# Append variants like '-perf', '-user' etc to deploy dir.
DEPLOY_NAME_BASE = "${MACHINE}${@bb.utils.contains_any('DISTRO', 'abc xyz', '', '-' + d.getVar('DISTRO'), d)}"
DEPLOY_NAME = "${DEPLOY_NAME_BASE}${@['-' + d.getVar('VARIANT', True), ''][d.getVar('VARIANT', True) == ('' or           
'debug')]}"
DEPLOY_DIR_IMAGE = "${DEPLOY_DIR}/images/${DEPLOY_NAME}"
#比如beaglebone\build\tmp\deploy\images\beaglebone-yocto
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

PACKAGE_ARCH

生成的一个或多个体系结构的软件包。
默认情况下,在为target构建时,这个变量的值被设置为TUNE_PKGARCH,直观的说法就是,构建过程生成的所有内容都是在下面类似下面这个目录,与体系架构有关,比如x86体系结构编译出来的软件可以在所有x86机器上运行:

#当前tune是core2-64, qemux86-64
build]$ bitbake -e core-image-sato | grep TUNE_PKGARCH=
TUNE_PKGARCH="core2-64"
poky]$ ls build/tmp/work/core2-64-poky-linux/
acl                    grub                       libsoup-2.4                     pixman
alsa-lib               grub-efi                   libtheora                       pkgconfig
...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在为构建主机构建时设置为BUILD_ARCH,就是编译机上运行的软件,比如交叉编译器,构建过程生成的所有内容都在下面这个目录里面

#qemux86-64
build]$ bitbake -e core-image-sato | grep BUILD_ARCH=
BUILD_ARCH="x86_64"
poky]$ ls build/tmp/work/x86_64-linux/
gcc-cross-x86_64 ...
  • 1
  • 2
  • 3
  • 4
  • 5

在为SDK构建时设置为" S D K A R C H − {SDK_ARCH}- S D K A R C H {SDKPKGSUFFIX}", 构建过程生成的所有内容都在下面这个目录里面:

#qemux86-64
build]$ bitbake -e core-image-sato | grep SDK_ARCH=  
SDK_ARCH="x86_64"
build]$ bitbake -e core-image-sato | grep SDKPKGSUFFIX=
SDKPKGSUFFIX="nativesdk"
poky]$ ls build/tmp/work/x86_64-nativesdk-pokysdk-linux/
binutils-cross-canadian-x86-64  nativesdk-intltool            nativesdk-ncurses
gcc-cross-canadian-x86-64       nativesdk-libarchive          nativesdk-ninja
gdb-cross-canadian-x86-64 ...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

如果您的recipe的输出包是针对target机器而不是针对机器的体系结构构建的(说的是上面这个TUNE_PKGARCH),就是说和硬件平台密切关联的项目,比如linux kernel, u-boot (bootloader),驱动等等,基本上每个硬件都有所不同,那么应该在recipe的bb文件中将PACKAGE_ARCH设置为MACHINE_ARCH,例如:

PACKAGE_ARCH = "${MACHINE_ARCH}"
  • 1

通常你会在linux的bb文件中看到这个设置
构建过程生成的所有内容都在下面这个目录里面:

#qemux86-64
poky]$ bitbake -e virtual/kernel | grep MACHINE_ARCH=
MACHINE_ARCH="qemux86_64"
poky]$ bitbake -e virtual/kernel | grep ^PACKAGE_ARCH=
PACKAGE_ARCH="qemux86_64"
poky]$ ls build/tmp/work/qemux86_64-poky-linux/
base-files           formfactor        matchbox-session-sato          pointercal-xinput  xserver-xf86-config
connman-conf         hello-mod         packagegroup-base              shadow-securetty
core-image-minimal   init-ifupdown     packagegroup-core-boot         sysvinit-inittab
core-image-sato      linux-yocto       packagegroup-core-x11-sato     v86d
depmodwrapper-cross  make-mod-scripts  packagegroup-core-x11-xserver  xserver-nodm-init
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

给我点个赞呗! 在这里插入图片描述