主机: Ubuntu 16.04.5 64bit
S32V bsp infomation:
Bsp version:auto_yocto_bsp_19.0 ;
Linux Kernel version: 4.13.34 ;
Yocto Project version: 2.1 ;
开发板SBC-S32V234官网资料:https://www.nxp.com/design/development-boards/automotive-development-platforms/s32v-mpu-platforms/s32v-vision-and-sensor-fusion-evaluation-board:SBC-S32V234
在NXP的官网上提供了S32V SOC的资料:
S32 Design Studio for Vision Processors包含了Vision SDK Software,并为Vision SDK Software提供了一套基于Eclipse的图形开发环境,这两者都包含完整的编译器,分别为aarch64 linux、aarch64 baremetal和cortex m4内核(S32V内嵌的一个MCU)提供支持,还有一个定制化的clang编译器为APEX处理器提供支持。
Vision SDK Software 可以单独安装,二者包含的功能基本相同,只不过缺少了一个集成开发环境,需要自己使用make来组织工程。
Vision Driver是为APEX、ISP、编解码器等硬件提供的驱动,与常规驱动不同的是,这些驱动基本上只是作为一个bridge,将硬件访问接口暴露出来,主要的硬件控制操作其实是在用户空间完成的。
注:以上介绍来源网络。
(1)首先安装yocto环境所需要的相关工具软件包, 命令如下:
sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev
(2)安装soc层环境需要的工具软件包,命令如下:
sudo apt-get install libsdl1.2-dev xterm sed cvs subversion coreutils texi2html docbook-utils python-pysqlite2 help2man make gcc g++ desktop-file-utils libgl1-mesa-dev libglu1-mesa-dev mercurial autoconf automake groff curl lzop asciidoc
(3)安装uboot工具软件包,命令如下:
(4)安装获取repo工具,命令如下:
注意:如果没有VPN,repo可能会下载失败, 可以使用国内的repo下载网址替代:curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
之后还要导入REPO_URL环境变量才会去清华源下载相关资源,命令如下:
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
(5)Git配置,输入如下命令:
(6)下载yocto环境,同步代码到创建的目录,命令如下:
(7)首次编译安装配置,准备主机工作环境,命令如下:
(8)创建编译目录和测试安装,命令如下:
注意:-m 后面的选项根据自己的SOC板子来选,该bsp支持的板子和soc如下:
• Machines: s32g275sim, s32v234bbmini, s32v234evb28899, s32v234evb, s32v234pcie, s32v234tmdp,
s32v344sim, s32r45xsim, s32v234evbubuntu, s32v234sbc
You can now run 'bitbake
Targets specific to NXP:
fsl-image-mfgtool-initramfs
fsl-image-auto
fsl-image-base
fsl-image-base-fit
fsl-image-bluebox
fsl-image-blueboxbootflash
fsl-image-blueboxdt
fsl-image-blueboxls2sdfactory
fsl-image-fit
fsl-image-flash
fsl-image-itbflash
fsl-image-nfs-initramfs
fsl-image-sim
fsl-image-ubuntu-base
fsl-image-ubuntu
fsl-image-ubuntu-ros
fsl-image-vsdk
To return to this build environment later please run:
. /home/nice/work/fsl-auto-yocto-bsp/build_s32v234sbc/SOURCE_THIS
(9)编译整包镜像, 如有需要可以先配置下Kernel添加GPU驱动:
and from Device Drivers -> Generic Driver Options -> [*] DMA Contiguous Memory Allocator -> set (32) Size
in Mega Bytes instead of 16 (default)
(10)开始编译整包镜像,命令如下:
注意:如果想要离线编译,可以使用fetchall命令先下载编译项所需要的pack再去编译,命令如下: bitbake fsl-image-auto -c do_fetch
支持编译的目标镜像如下:
Images: fsl-image-base, fsl-image-auto, fsl-image-ubuntu, fsl-image-ubuntu-base
(1) 首先,要获取到Yocto下的 meta-adas 配方库, repo init使用-m指定adas.xml:
(2)去下载和安装VSDK,准备集成到yocto中,下载地址(目前最新版本为1.3.0, 兼容bsp19.0): https://nxp.flexnetoperations.com/control/frse/product?plneID=713087
注意: 安装APU Compiler的时候会提示输入license, 下载的时候会自动发送到你的NXP账户邮箱, 或者点击下载列表中的License Lists
(3)创建编译文件夹(之前已经创建,也可不执行):
(4)编辑
(5)为了能够在镜像中使用VSDK ffmpeg的依赖, 需要在
(6)编译镜像,命令如下:
(7)上面编译命令, 如果发现找不到fsl-image-vsdk这个package, 可以手动把meat-adas层路径增加到
BBLAYERS ?= " \
...
"
我们的meta-adas层路径实例:
BBLAYERS ?= " \
...
/home/nice/work/fsl-auto-yocto-bsp/sources/meta-adas \
"
(1).在 sources/meta-alb/conf/distro/fsl-auto.conf 文件中添加一行,如下:
(2).在sources/meta-alb/recipes-fsl/images/fsl-image-auto.bb文件中添加一行,如下:
(3).将glmark2的官方补丁添加到Yocto 配方中去,编译的时候自动去打补丁,步骤如下:
在yocto的sources/meta-alb文件夹中创建补丁存放文件夹:
创建补丁的bbappend文件:
将补丁的下载路径等属性加入bbappend文件:
注意: 如果bitbake编译的时候fetch下载compatibility_with_fbdev.patch文件出错,就手动下载放到Dowloads目录下去, 再次编译又会提示没有指定checksum, 在glmark2_git.bbappend文件最后加上即可, 如下:
(1).添加GPU内核模块,在meta-alb/recipes-fsl/images/fsl-image-auto.bb文件中添加下面这一行, Yocto会自动去下载Galcore内核模块源码(手动下载地址: https://source.codeaurora.org/external/autobsps32/galcore/?h=alb/master):
(2)需要接受NXP的EULA, 检查
(3)去下载 VivanteVTK, 解压该文件,放到一个目录,这里示例放在~/opt目录下,下载地址如下:
https://nxp.flexnetoperations.com/control/frse/download?agree=Accept&element=3557133
(4)在
[可选] Yocto环境下,在bb文件中添加了GPU模块时,Yocto打包时会自动下载并包含GPU模块到生成的镜像当中. 并自动加载运行.如果是手动下载和编译,需要把Galcore内核模块源码生成的galcore.ko文件手动安装下.
(5)bitbake fsl-image-auto编译生成kernel和rootfs之后,烧录验证, 可以运行glmarks2-es2来测试显示.
注意: 开发板SBC-S32V234的HDMI输出需要先通过I2C设置前端的HDMI芯片输出, 在U-Boot设置环境变量,如下:
1.如何找到 U-Boot和Linux其他源码路径?
如果不知道
示例:
bitbake -e u-boot | grep "^S="
S="
bitbake -e virtual/kernel | grep "^S="
S="
2.使用Yocto定制、构建和部署内核
2.1 在Yocto中添加Kernel的补丁
这里以添加一个GPIO驱动为例, 步骤如下:
(1). Go to the gpio driver folder:
And edit the source file gpio-siul2.c
(2). Add source that you changed before to git
(3). Create the patch
Check in
ated, e.g. 0001-test-gpio-repackage.patch
(4). Copy the patch file to meta-alb/recipes-kernel/linux/linux-s32 folder
(5). Edit linux-s32_4.19.bb file in /meta-alb/recipes-kernel/linux to include the patch file, e.g.
(6). Return to the build directory and run command as bellow to clean the previous sstate:
(7). Re-build and deploy linux
2.2 在Yocto环境中配置Kernel
(1) 在构建文件夹目录下,运行命令:
(2)配置完成后,重新编译Kernel,命令:
(3)部署Kernel镜像:
2.3 配置编译和部署u-boot
重新编译:bitbake -c compile -f u-boot
部署镜像:bitbake u-boot
2.4 在Yocto中添加自定义补丁
(1)为适当的配方创建一个.bbappend文件:
(2)确定所需要的 .patch文件的获取地址, 添加到.bbappend文件中,示例如下:
(3)重新编译和不熟镜像即可.
(4)添加glmark2的patch示例:
(1)编译内核出错1:
/bin/sh: bison: command not found
scripts/Makefile.lib:196: recipe for target 'scripts/kconfig/zconf.tab.c' failed
make[3]: *** [scripts/kconfig/zconf.tab.c] Error 127
Makefile:539: recipe for target 'syncconfig' failed
make[2]: *** [syncconfig] Error 2
Makefile:635: recipe for target 'include/config/auto.conf' failed
make[1]: *** [include/config/auto.conf] Error 2
Makefile:286: recipe for target '__build_one_by_one' failed
make: *** [__build_one_by_one] Error 2
解决方法:
sudo apt-get install bison
sudo apt-get install flex
(2)编译内核出错2:
scripts/kconfig/conf –syncconfig Kconfig
* Configuration file “.config” not found!
* Please run some configurator (e.g. “make oldconfig” or
* “make menuconfig” or “make xconfig”).
scripts/kconfig/Makefile:40: recipe for target ‘syncconfig’ failed
解决方法:
make menuconfig
(3)U-boot在别的板子运行出错, 卡死; 打开DEBUG输出,在include/log.h中定义DEBUG宏:
U-Boot 2018.07+g21d6118 (Oct 10 2019 - 10:51:18 +0000)
CPU: NXP S32V234 V2.0 at 1000 MHz
Reset cause: unknown reset
Board: mpxs32v234-R2
I2C: ready
DRAM: 2 GiB
RTC: PCF85263
All (4) cores are up.
MMC: FSL_SDHC: 0
Loading Environment from MMC... *** Warning - bad CRC, using default environment
Failed (-5)
原因: 新板子没有pcie外设, 卡在common/board_r.c文件中的initr_pci()函数.
解决办法; 注释掉pci初始化函数,或者取消include/configs/s32.h和include/configs/mpxs32v234.h头文件中的CONFIG_PCI宏定义