S32V234 Linux yocto开发环境搭建

一、主机环境

主机: 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 2018.R1
    Vision SDK Software RTM1.2.0
    Automotive SW – Linux BSP 19.0 (Kernel 4.14.34)
    Vision Driver

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,将硬件访问接口暴露出来,主要的硬件控制操作其实是在用户空间完成的。

 
二、Yocto简介

Yocto:Yocto ,是一个开源社区它通过提供模版、工具和方法帮助开发者创建基于linux内核的定制系统,支持ARM, PPC, MIPS, x86 (32 & 64 bit)硬件体系架构。
Poky:Poky有两个含义。第一个含义是用来构建Linux的构建系统,值得注意的该Poky仅仅是一个概念,而非一个实体:它包含了 BitBake工具、编译工具链、BSP、诸多程序包或层,可以认为Poky即是Yocto的本质;此外Poky还有另外一层意思,使用Poky系统得到的默认参考 Linux 发行版也叫Poky(当然,我们可以对此发行版随意命名),Poky的两个含义千万不能混淆。
Metadata:元数据集,所谓元数据集就是发行版内各基本元素的描述与来源
Recipes:.bb/.bbappend文件,配方文件,描述了从哪获取软件源码,如何配置,如何编译。bbappend和bb的区别主要在于bbappend是基于bb的,功能是对相应的bb文件作补充和覆盖,有点类似于“重写”的概念。
Class:.bbclass文件
Configuration:.conf文件,即配置文件,我们可以用它来改变构建方式。
Layers:即各种meta-xxx目录,将Metadata按层进行分类,有助于项目的维护
Bitbake:一个任务执行引擎,用来解析并执行Metadata
Output:即各种输出image。

注:以上介绍来源网络。

 
三、S32V Yocto环境搭建


1.Yocto基本环境搭建

(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工具软件包,命令如下:

ubuntu12.04主机安装命令:sudo apt-get install uboot-mkimage
ubuntu14.04主机安装命令:sudo apt-get install u-boot-tools

ubuntu14.04主机安装命令:sudo apt install u-boot-tools

(4)安装获取repo工具,命令如下:

    mkdir ~/bin

    curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

    chmod a+x ~/bin/repo

    export PATH=~/bin:$PATH

注意:如果没有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配置,输入如下命令:

git config --global user.name "Your Name"
git config --global user.email "Your Email"
git config --list

(6)下载yocto环境,同步代码到创建的目录,命令如下:

mkdir fsl-auto-yocto-bsp
cd fsl-auto-yocto-bsp
repo init -u https://source.codeaurora.org/external/autobsps32/auto_yocto_bsp -b release/bsp19.0 -m adas.xml
repo sync

 

 

(7)首次编译安装配置,准备主机工作环境,命令如下:

    sudo ./sources/meta-alb/scripts/host-prepare.sh

 

(8)创建编译目录和测试安装,命令如下:

    source nxp-setup-alb.sh -m s32v234sbc    

source nxp-setup-alb.sh -m s32v234evb

 

注意:-m 后面的选项根据自己的SOC板子来选,该bsp支持的板子和soc如下:

Machines:

s32g275sim, s32v234bbmini, s32v234evb28899, s32v234evb, s32v234pcie, s32v234tmdp,s32v344sim, s32r45xsim, s32v234evbubuntu, s32v234sbc

You can now run 'bitbake <target>'

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驱动:

    bitbake virtual/kernel -c menuconfig

and from Device Drivers -> Generic Driver Options -> [*] DMA Contiguous Memory Allocator -> set (32) Size in Mega Bytes instead of 16 (default)

(10)开始编译整包镜像,命令如下:

    bitbake fsl-image-auto

注意:如果想要离线编译,可以使用fetchall命令先下载编译项所需要的pack再去编译,命令如下: bitbake fsl-image-auto -c do_fetch

支持编译的目标镜像如下:

Images: fsl-image-base, fsl-image-auto, fsl-image-ubuntu, fsl-image-ubuntu-base

2.集成VSDK到Yocto

(1) 首先,要获取到Yocto下的 meta-adas 配方库, repo init使用-m指定adas.xml:

    repo init -u https://source.codeaurora.org/external/autobsps32/auto_yocto_bsp -b release/bsp19.0 -m adas.xml
    repo sync

(2)去下载和安装VSDK,准备集成到yocto中,下载地址(目前最新版本为1.3.0, 兼容bsp19.0): https://nxp.flexnetoperations.com/control/frse/product?plneID=713087

    sudo ./VisionSDK_S32V2_RTM_1_3_0_HF1.bin

注意: 安装APU Compiler的时候会提示输入license, 下载的时候会自动发送到你的NXP账户邮箱, 或者点击下载列表中的License Lists

(3)创建编译文件夹(之前已经创建,也可不执行):

    source nxp-setup-alb.sh -m s32v234sbc

(4)编辑<build folder>/conf/local.conf文件,去指定VSDK的安装路径,添加一行(根据VSDK路径不同去修改):

    FSL_LOCAL_MIRROR = "file:///home/nice/opt/VisionSDK_S32V2_RTM_1_3_0_HF1"

(5)为了能够在镜像中使用VSDK ffmpeg的依赖, 需要在<build folder>/conf/local.conf中添加一行许可证标准, 如下:

    LICENSE_FLAGS_WHITELIST_append = " commercial "

(6)编译镜像,命令如下:

    bitbake fsl-image-vsdk

(7)上面编译命令, 如果发现找不到fsl-image-vsdk这个package, 可以手动把meat-adas层路径增加到<build folder>/conf/bblayers.conf文件中的BBLAYERS关键字最后,如下:

BBLAYERS ?= " \

...

<path_to_repository>/meta-adas \

"

我们的meta-adas层路径实例:

BBLAYERS ?= " \

...

/home/nice/work/fsl-auto-yocto-bsp/sources/meta-adas \

"
3.添加glmark2(GPU性能测试工具)到Yocto

(1).在 sources/meta-alb/conf/distro/fsl-auto.conf 文件中添加一行,如下:

    DISTRO_FEATURES_append = " gpu"

(2).在sources/meta-alb/recipes-fsl/images/fsl-image-auto.bb文件中添加一行,如下:

    IMAGE_INSTALL_append = " glmark2 gpu-viv-bin-s32v2xx kernel-module-galcore"

(3).将glmark2的官方补丁添加到Yocto 配方中去,编译的时候自动去打补丁,步骤如下:

在yocto的sources/meta-alb文件夹中创建补丁存放文件夹:

    mkdir -p sources/meta-alb/recipes-patched/glmark2

创建补丁的bbappend文件:

    touch sources/meta-alb/recipes-patched/glmark2/glmark2_git.bbappend

将补丁的下载路径等属性加入bbappend文件:

    echo "SRC_URI += \" https://portland.source.codeaurora.org/patches/external/autobsps32/misc/glmark2/glmark2-2017.07/compatibility_with_fbdev.patch\"" >> sources/meta-alb/recipes-patched/glmark2/glmark2_git.bbappend
    echo "PACKAGECONFIG_s32v2xx = \"x11-gles2\"" >> sources/meta-alb/recipes-patched/glmark2/glmark2_git.bbappend
    echo "CXXFLAGS += \"-fpermissive\"" >> sources/meta-alb/recipes-patched/glmark2/glmark2_git.bbappend

注意: 如果bitbake编译的时候fetch下载compatibility_with_fbdev.patch文件出错,就手动下载放到Dowloads目录下去, 再次编译又会提示没有指定checksum, 在glmark2_git.bbappend文件最后加上即可, 如下:

    SRC_URI[md5sum] = "9eb57fc55489b6c6aafb63d0001493e1"

4.添加GPU驱动模块和GPU示例程序到Yocto (可选,非必须操作,与后面集成VSDK二选一)

(1).添加GPU内核模块,在meta-alb/recipes-fsl/images/fsl-image-auto.bb文件中添加下面这一行, Yocto会自动去下载Galcore内核模块源码(手动下载地址: https://source.codeaurora.org/external/autobsps32/galcore/?h=alb/master):

    IMAGE_INSTALL += "gpu-viv-bin-s32v2xx gpu-demos-dev"

(2)需要接受NXP的EULA, 检查<build folder>/conf/local.conf文件中的关键字是否为1,如下:

    build_s32v234evb/conf/local.conf

(3)去下载 VivanteVTK, 解压该文件,放到一个目录,这里示例放在~/opt目录下,下载地址如下:

https://nxp.flexnetoperations.com/control/frse/download?agree=Accept&element=3557133

(4)在<build folder>/conf/local.conf文件中添加FSL_LOCAL_MIRROR变量来指定上一个步骤提前下载好的GPU驱动相关文件(VivanteVTK),并使能GPU特性:

    FSL_LOCAL_MIRROR = "file:///home/nice/opt/GPU_userspace_binaries_and_VTK_tools_6.2.4"
    DISTRO_FEATURES_DEFAULT_append = " gpu"

[可选] Yocto环境下,在bb文件中添加了GPU模块时,Yocto打包时会自动下载并包含GPU模块到生成的镜像当中. 并自动加载运行.如果是手动下载和编译,需要把Galcore内核模块源码生成的galcore.ko文件手动安装下.

(5)bitbake fsl-image-auto编译生成kernel和rootfs之后,烧录验证, 可以运行glmarks2-es2来测试显示.

注意: 开发板SBC-S32V234的HDMI输出需要先通过I2C设置前端的HDMI芯片输出, 在U-Boot设置环境变量,如下:

    setenv dvi_on 'i2c dev 2; i2c mw 3f 8 35'
    setenv bootcmd 'run dvi_on; run loadimage; run mmcboot'
    boot

四、S32V BSP开发附加说明

1.如何找到 U-Boot和Linux其他源码路径?

    使用bitbake命令来查找,命令示例: bitbake -e <package> | grep "^S="

如果不知道<package>的名字,可以package搜索命令: bitbake -s | grep <package>

示例:

    U-boot source:

bitbake -e u-boot | grep "^S="

S="<builddirectory>/tmp/work/s32v234evb-fsl-linux/u-boot-s32/2018.07-r0/git"

    Linux source:

bitbake -e virtual/kernel | grep "^S="

S="<builddirectory>/tmp/work/s32v234evb-fsl-linux/linux-s32/4.19-r0/git"

2.使用Yocto定制、构建和部署内核

2.1 在Yocto中添加Kernel的补丁

这里以添加一个GPIO驱动为例, 步骤如下:

(1). Go to the gpio driver folder:

    cd tmp/work/<machine>-fsl-linux/linux-s32/4.19-r0/git/drives/gpio

And edit the source file gpio-siul2.c

(2). Add source that you changed before to git

    cd <builddirectory>/tmp/work/<machine>-fsl-linux/linux-s32/4.19-r0/git
    git add drivers/gpio/gpio-siul2.c
    git commit -s -m <title of your commit>

(3). Create the patch

    git format-patch -1

Check in <builddirectory>/tmp/work/<machine>-fsl-linux/linux-s32/4.19-r0/git folder, there is a patch file cre-

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.

    SRC_URI += "file://0001-test-gpio-repackage.patch"

(6). Return to the build directory and run command as bellow to clean the previous sstate:

    source ./SOURCE_THIS
    bitbake virtual/kernel -c cleansstate

(7). Re-build and deploy linux

    bitbake virtual/kernel

2.2 在Yocto环境中配置Kernel

(1) 在构建文件夹目录下,运行命令:

    bitbake virtual/kernel -c menuconfig

(2)配置完成后,重新编译Kernel,命令:

    bitbake -c compile -f virtual/kernel

(3)部署Kernel镜像:

    bitbake virtual/kernel

2.3 配置编译和部署u-boot

重新编译:bitbake -c compile -f u-boot

部署镜像:bitbake  u-boot

2.4 在Yocto中添加自定义补丁

(1)为适当的配方创建一个.bbappend文件:

    mkdir -p sources/meta-alb/recipes-patched/<package>
    touch sources/meta-alb/recipes-patched/<package>/<package_recipe_name>.bbappend

(2)确定所需要的 .patch文件的获取地址, 添加到.bbappend文件中,示例如下:

    SRC_URI += "https://portland.source.codeaurora.org/patches/external/autobsps32/<desired-patch-file>.patch"

(3)重新编译和不熟镜像即可.

(4)添加glmark2的patch示例:

    mkdir -p sources/meta-alb/recipes-patched/glmark2
    touch sources/meta-alb/recipes-patched/glmark2/glmark2_git.bbappend
    echo "SRC_URI += \" https://portland.source.codeaurora.org/patches/external/autobsps32/misc/glmark2/glmark2-2017.07/compatibility_with_fbdev.patch\"" >> sources/meta-alb/recipes-patched/glmark2/glmark2_git.bbappend
    echo "PACKAGECONFIG_s32v2xx = \"x11-gles2\"" >> sources/meta-alb/recipes-patched/glmark2/glmark2_git.bbappend
    echo "CXXFLAGS += \"-fpermissive\"" >> sources/meta-alb/recipes-patched/glmark2/glmark2_git.bbappend

 
五、问题总结

(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宏定义



参考链接:https://blog.youkuaiyun.com/u013007904/article/details/102740399

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aFakeProgramer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值