iMX6Ull采用Yocto构建嵌入式Linux系统5之初始化Yocto构建目录
??通过repo获取了Yocto项目源码(NXP官方的index: imx-manifest.git项目的imx-linux-zeus分支)之后,还需要初始化Yocto构建目录,用于Yocto构建嵌入式Linux系统的工作环境(实际上是创建一些文件夹、初始化一些变量值,得到的配置文件,用于构建特定的嵌入式Linux发行版本)。
??在repo获取的Yocto项目源码路径(/home/jason/Linux/Yocto/fsl-release-yocto)下,Freescales提供了imx-setup-release.sh脚本。该脚本用于初始化Yocto构建目录,该脚本语法如下:
??例如:
??Windows下通过SecureCRT采用SSH方式登录Ubuntu,在SecureCRT终端中运行上面的命令,表示创建了一个基于imx6ull14x14evk硬件平台,嵌入式Linux系统发行版为fsl-imx-fb的Yocto构建环境,位于/home/jason/Linux/Yocto/fsl-release-yocto/build路劲下。
imx-setup-release.sh脚本运行
??运行imx-setup-release.sh脚本之前,需要给imx-setup-release.sh脚本使用chmod 777分配可执行权限:
?? 然后在imx-setup-release.sh所在路劲下输入以下命令,执行imx-setup-release.sh脚本:
??imx-setup-release.sh脚本运行后,会先让阅读一些EULA许可:
?? 阅读完成后(也可以按"q"退出阅读,按”y“接受EULA),即完成了Yocto构建目录的初始化。
?? 该脚本运行结束后,会自动生成build文件夹,并自动切换至build路劲,后续系统的构建过程就是在该build文件夹下完成的。同时,在build文件夹下,还会生成一个conf文件夹:
?? 该conf文件夹中有两个重要的文件:bblayers.conf和local.conf两个配置文件,后面将会详细解析:
??<build dir>/conf/bblayer.conf:该配置文件定义了构建嵌入式Linux系统发行版所需要使用的metalayers。
??<build dir>/conf/local.conf:该配置文件定义了MACHINE和DISTRO的配置项。
imx-setup-release.sh脚本解析
??imx-setup-release.sh脚本运行时,需要输入3个主要参数:
??DISTRO=fsl-imx-fb
??MACHINE=imx6ull14x14evk
??-b build
??总体来说,imx-setup-release.sh脚本通过这3个参数来确定了构建环境,其中,-b build生成了一个build文件夹,用于存放Yocto在构建系统过程中产生的临时文件、构建日志以及最终生成的安装文件等。同时,Yocto根据DISTRO和MACHINE这两个参数,找到相对应的配置文件(.conf),这些配置文件定义了所需构建的嵌入式Linux系统的功能和状态。
??imx-setup-release.sh脚本是通过如下命令执行的:
??在imx-setup-release.sh脚本中,有如下几个地方需要了解:
??第22行,设置了变量PROGNAME为“setup-environment”,在imx-setup-release.sh脚本所在的路劲下,有一个名叫“setup-environment”的shell脚本,在imx-setup-release.sh脚本中,会调用setup-environment脚本。
??第59行,通过脚本参数-b build,设置变量BUILD_DIR为build,用于创建工作目录。
??第119行,通过脚本参数 DISTRO=fsl-imx-fb,设置变量DISTRO为fsl-imx-fb,用于设置嵌入式Linux系统的发型版本设置,在移植部分会详细讲解DISTRO。
??第156行,通过DISTRO和MACHINE两个参数,调用PROGNAME脚本,即setup-environment脚本。关于setup-environment脚本,下一小节中会进行描述。
??第169~195行,比较重要的部分,将使用到的Layers写入build/conf/bblayers.conf文件中,用于设置构建嵌入式Linux系统所使用到的Layers。关于Layers的概念,后续章节会详细描述。
setup-environment脚本解析
??在imx-setup-release.sh脚本中,会通过DISTRO=$FSLDISTRO MACHINE=$MACHINE . ./$PROGNAME $BUILD_DIR调用setup-environment脚本。输入 ./setup-environment -h命令,查看setup-environment脚本帮助信息,该信息列出了Yocto路径下支持的MACHINE。
??在setup-environmet脚本中,第92行,通过MACHINE变量值找到相应的.conf文件,该.conf文件用来配置嵌入式Linux发行版。在/home/jason/Linux/Yocto/fsl-release-yocto/sources路径下,有很多的meta-xxx文件夹,在这些文件夹中有各种不同的machine和distro文件夹,在这两个文件下下面有不同的配置文件。通过imx-setup-release.sh脚本,就能确定所使用的是哪个machine、distro下的配置文件,用于配置所需构建的嵌入式Linux发行版。
??总的来说,imx-setup-release.sh脚本,主要实现了一下三个重要功能,用于配置所需构建的嵌入式Linux系统的发行版:
??创建Yocto构建工作环境,新建build文件夹
??将layers、machine、distro等信息写入配置文件:
??<build dir>/conf/bblayer.conf:该配置文件定义了构建嵌入式Linux系统发行版所需要使用的metalayers。
??<build dir>/conf/local.conf:该配置文件定义了MACHINE和DISTRO的配置项。
??根据DISTRO和MACHINE这两个参数,找到相应路径下的配置文件(.conf)。这些配置文件定义了需要构建的嵌入式Linux的功能和状态。
??后续在根据不同的硬件板卡及软件需求定义相应的嵌入式Linux发行版时,会详细的描述如何修改imx-setup-release.sh脚本,以及相关的MACHINE、DISTRO对应的.conf文件的修改。
DISTRO
??DISTRO是Distrobution(发行版)的缩写。一个典型的Linux发行版包括:Linux内核,一些GNU程序库和工具,命令行shell,图形界面的X Window系统和相应的桌面环境,如KDE或GNOME,并包含数千种从办公套件,编译器,文本编辑器到科学工具的应用软件。但是对于嵌入式Linux发行版来说,会根据实际需求进行相应的裁剪,例如,对于大多数嵌入式Linux发行版,就不需要桌面环境、办公套件、编译器等软件工具。
??在使用imx-setup-release.sh脚本初始化Yocto构建目录时,会使用到DISTRO参数,用于指定嵌入式Linux的发行版本。实际上,在/home/jason/Linux/Yocto/fsl-release-yocto/source路径下,有一些distro的文件夹,在distro文件夹下,有对应的.conf文件,这些.conf的文件名与DISTRO参数值一致,换句话说,imx-setup-release.sh脚本会根据DISTRO的值,在source路径下,找到DISTRO值所对应的.conf文件,例如:DISTRO= fsl-imx-fb,则会找到sources/meta-imx/meta-sdk/conf/distro路径下的fsl-imx-fb.conf文件,在该文件中定义了一些变量,用于配置嵌入式Linux发行版 。
??在后续讲解定制自己的嵌入式Linux系统时,会详细描述发行版配置文件的定义以及如何修改。
MACHINE
??Linux系统需要运行在相应的硬件平台上,相应的,对于嵌入式Linux系统也有对应的嵌入式硬件平台,不同的嵌入式硬件平台之间硬件配置不同,因此,采用MACHINE,用于配置不同的硬件平台。
??和DISTRO一样,在使用imx-setup-release.sh脚本初始化Yocto构建目录时,会使用到MACHINE参数,用于指定嵌入式Linux运行的硬件平台。实际上,在/home/jason/Linux/Yocto/fsl-release-yocto/source路径下,有一些machine的文件夹,在machine文件夹下,有对应的.conf文件,这些.conf的文件名与MACHINE参数值一致,换句话说,imx-setup-release.sh脚本会根据MACHINE的值,在source路径下,找到MACHINE值所对应的.conf文件,例如:MACHINE= imx6ull14x14evk,则会找到sources/meta-imx/meta-bsp/conf/machine路径下的imx6ull14x14evk.conf文件,在该文件中定义了一些变量,用于配置嵌入式Linux运行的硬件平台 。
??在后续讲解定制自己的嵌入式Linux系统时,会详细描述MACHINE配置文件的定义以及如何修改。