《MYD-YA157C_Linux软件开发指南V2.0.docx》由会员分享,可在线阅读,更多相关《MYD-YA157C_Linux软件开发指南V2.0.docx(89页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、MYIR-MYD-YA157C-V2-SW-DG-ZH-L5.4.31_V2.0MYD-YA157C-V2 Linux 系统开发指南文件状态:文件标识:MYIR-MYD-YA157C-V2-SW-DG-ZH-L5.4.31 草稿 正式发布当前版本:V2.0作者:Licy创建日期:2020-08-04最近更新:2020-10-10Copyright 20102020 版权所有 深圳市米尔电子有限公司- 89 -版 本 历 史版本作者参与者日期备注V2.0licy202009020初始版本:uboot 2020,kernel 5.4.31,yocto3.1目 录MYD-YA157C-V2 Linu
2、x 系统开发指南. - 1 -版 本 历 史. - 2 -目 录. - 3 -1. 概述.- 5 -1.1. 软件资源. - 5 -1.2. 文档资源. - 5 -2. 开发环境准备.- 6 -2.1. 开发主机环境. - 6 -2.2. 软件开发工具介绍. - 8 -2.3. 安装米尔定制的SDK. - 9 -3. 使用Yocto 构建开发板镜像.- 11 -3.1. 简介.- 11 -3.2. 获取源码.- 12 -3.2.1. 从光盘镜像获取源码压缩包. - 12 -3.2.2. 通过github 获取源码. - 12 -3.3. 快速编译开发板镜像.- 14 -3.4. 构建SDK(可
3、选).- 19 -4. 如何烧录系统镜像. - 20 -4.1. CubeProg 烧写.- 20 -4.2. 制作SD 卡启动器. - 24 -4.3. 制作SD 卡烧录器. - 27 -5. 如何修改板级支持包. - 29 -5.1. meta-myir-st 层介绍.- 29 -5.2. 板级支持包介绍.- 31 -5.3. 板载TF-A 编译与更新.- 33 -5.3.1. 在独立的交叉编译环境下编译TF-A. - 33 -5.3.2. 在Yocto 项目下编译TF-A. - 34 -5.3.3. 如何单独更新TF-A. - 35 -5.4. 板载u-boot 编译与更新. - 37
4、-5.4.1. 在独立的交叉编译环境下编译u-boot.- 37 -5.4.2. 在Yocto 项目下编译u-boot.- 38 -5.4.3. 如何单独更新U-boot. - 40 -5.5. 板载Kernel 编译与更新.- 41 -5.5.1. 在独立的交叉编译环境下编译Kernel.- 41 -5.5.2. 在Yocto 项目下编译Kernel. - 43 -5.5.3. 如何单独更新Kernel. - 44 -6. 如何适配您的硬件平台.- 48 -6.1. 如何创建您的设备树.- 48 -6.1.1. 板载设备树. - 48 -6.1.2. 设备树的添加. - 49 -6.2. 如
5、何根据您的硬件配置CPU 功能管脚.- 51 -6.2.1. GPIO 管脚配置的方法. - 51 -6.2.2. 设备树中引用GPIO. - 52 -6.3. 如何使用自己配置的管脚.- 56 -6.3.1. U-boot 中使用 GPIO 管脚. - 56 -6.3.2. 内核驱动中使用GPIO 管脚. - 58 -6.3.3. 用户空间使用GPIO 管脚. - 65 -7. 如何添加您的应用. - 71 -7.1. 基于Makefile 的应用. - 71 -7.2. 基于Qt 的应用. - 75 -7.3. 多核异构的应用.- 76 -7.4. 应用程序开机自启动.- 80 -8. 参
6、考资料. - 86 -附录一 联系我们. - 87 -附录 售后服务与技术持. - 88 -1. 概述Linux 系统平台上有许多开源的系统构建框架,这些框架方便了开发者进行嵌入式系统的构建和定制化开发,目前比较常见的有Buildroot, Yocto, OpenEmbedded 等等。其中Yocto 项目使用更强大和定制化的方法,来构建出适合嵌入式产品的Linux 系统。它不仅仅是一个制作文件系统的工具,同时提供整套的基于Linux 的开发和维护工作流程,使底层嵌入式开发者和上层应用开发者在统一的框架下开发,解决了传统开发方式下零散和无管理的开发形态。本文主要介绍基于Yocto 项目和米尔核
7、心板定制一个完整的嵌入式Linux 系统的完整流程,其中包括开发环境的准备,代码的获取,以及如何进行Bootloader, Kernel 的移植,定制适合自身应用需求的Rootfs 等。我们首先介绍如何基于我们提供的源代码构建适用于MYD-YA157C-V2 开发板的系统镜像,如何将构建好的镜像烧录到开发板。针对那些基于MYC-YA157C-V2 核心板进行项目开发的用户,我们重点介绍了将这一套系统移植到用户的硬件平台上的方法和一些要点,并通过一些实际的BSP 移植案例和 Rootfs定制的案例,使用户能够迅速定制适合自己硬件的系统镜像。本文档并不包含Yocto 项目以及Linux 系统相关基
8、础知识的介绍,适合有一定开发经验的嵌入式Linux 系统开发人员。针对用户在进行二次开发过程中可能会使用到的一些具体功能,我们也提供了详细的应用笔记供发人员参考,具体的信息参见MYD-YA157C-V 2 SDK2.0.0 发布说明表 2-4 中的文档列表。1.1. 软件资源MYD-YA157C-V2 搭载基于 Linux 5.4.31 版本内核的操作系统,提供了丰富的系统资源和其他软件资源。开发板出厂附带嵌入式Linux 系统开发所需要的交叉编译工具链, TF-A 源代码,Optee-os 源码,U-boot 源代码,Linux 内核和各驱动模块的源代码,以及适用于Windows 桌面环境和
9、Linux 桌面环境的各种开发调试工具,应用开发样例等。具体的包含的软件信息请参考MYD-YA157C-V2 SDK2.0.0 发布说明中第 2 章软件信息中的说明。1.2. 文档资源根据用户使用开发板的各个不同阶段,SDK 中包含了发布说明,入门指南,评估指南,开发指南,应用笔记,常用问答等不同类别的文档和手册。具体的文档列表参考MYD-YA157C-V2 SDK2.0.0 发布说明表 2-4 中的说明。2. 开发环境准备本章主要介绍基于MYD-YA157C-V2 开发板在开发流程所需的一些软硬件环境,包括必要的开发主机环境,必备的软件工具,代码和资料的获取等,具体的准备工作下面将进行详细介
10、绍。2.1. 开发主机环境本节将介绍如何搭建适用于STM32MP1XX 系列处理器平台的开发环境。通过阅读本章节,您将了解相关硬件工具,软件开发调试工具的安装和使用。并能快速的搭建相关开发环境,为后面的开发和调试做准备。STM32MP157 系列处理器是一个多核异构的处理器,不同的处理器核心会运行不同的系统,也会使用不同的开发环境和工具,具体说明如下: 2 个ARM Cortex A7 内核,可以运行嵌入式Linux 系统,使用常用的嵌入式 Linux 系统的开发工具。 1 个 ARM Cortex M4 内核,可以运行裸机代码或其他实时操作系统(RTOS),使用ST 官方提供的Cortex
11、M4 软件开发工具。l 主机硬件Yocto 项目的构建对开发主机的要求比较高,要求处理器具有双核以上 CPU,8GB 以上 内存,160GB 硬盘或更高配置。可以是安装Linux 系统的主机,也可以是运行Linux 系统的虚拟机,Windows 系统下的 WSL2 等。l 主机操作系统构建Yocto 项目的主机操作系统可以有很多种选择,详细的信息请参考Yocto 官方说明https:/www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#dev-prep aring-the-build-host。一般选择在安装Fedora
12、, openSUSE, Debian, Ubuntu, RHEL 或者 CentOS 等 Linux 发行版的本地主机上进行构建,这里推荐的是Ubuntu16.04 64bit 桌面版系统,后续开发也是以此系统为例进行介绍。l 安装必备软件包PC$ sudo apt-get updatePC$ sudo apt-get install u-boot-tools libyaml-dev bison flex sed wget curl cvs subversion git-core coreutils unzip texi2html texinfo docbook-utils gawk pyth
13、on-pysqlite2 diffstat help2man make gcc build-essential g+ chrpathlibxml2-utils xmlto docbook bsdmainutils iputils-ping cpio python-wand python-pycryptopp python-cryptoPC$ sudo apt-get install libsdl1.2-dev xterm corkscrew nfs-common nfs-kernel-ser ver device-tree-compiler mercurial u-boot-tools lib
14、archive-zip-perlPC$ sudo apt-get install ncurses-dev bc linux-headers-generic gcc-multilib libncur ses5-dev libncursesw5-dev lrzsz dos2unix lib32ncurses5 repo libssl-dev2.2. 软件开发工具介绍在定制适用于ARM Cortex A7 核心的Linux 系统和Cortex M4 核心的裸机或RTOS 系统过程中会用到许多调试,烧写的工具,在米尔提供的光盘镜像目录 03-Tools 下提供了部分工具,除此之外还会用到一系列ST 提
15、供的工具,简单介绍如下:l STM32CubeProgST 推出了新的高集成度的编程工具 STM32CubeProgrammer,它可以在烧录的过程中对未分区的的存储设备进行分区,一旦分区就可以使用已经编译好的二进制文件对某个分区单独进行更新。用户可以根据需要选择使用合适的版本,下载地址如下:https:/www. l STM32CubeMXSTM32CubeMX 是ST 公司推出的专门用于生成STM32 的HAL 代码的代码生成软 件。它利用可视化界面来进行STM32 时钟、定时器、DMA、串口、GPIO 等就各种资源的配置。目前ST 已经将STM32MPU 系列CPU 添加进STM32Cu
16、beMX,我们也可以用此工具来配置TF-A,U-boot 以及Kernel 的设备树和时钟,所以它既可以用来生成调试C ortex M4 的代码,也可以用来在Cortex A7 开发时生成设备树和时钟,下载地址如下:htt ps:/l STM32CubeIDESTM32CubeIDE 是一个高级的C/C+开发平台,具有STM32 微控制器和微处理器的外围配置、代码生成、代码编译和调试功能。它基于ECLIPSE/CDT 框架和用于开发的GCC 工具链,以及用于调试的GDB 工具,可用于Cortex M4 的调试。下载地址如下: 2.3. 安装米尔定制的 SDK我们在使用Yocto 构建完系统镜像
17、之后,还可以使用Yocto 构建一套可扩展的SDK。在米尔提供的光盘镜像中包含一个编译好的SDK 包,位于:03-Tools/Complie Toolchain/ QT-SDK/sdk-qt.tar.xz,这个SDK 中除了包含一个独立的交叉开发工具链还提供qmake,目标平台的sysroot, Qt 应用开发所依赖的库和头文件等。用户可以直接使用这个SDK 来建立一个独立的开发环境,单独编译Bootloader,Kernel 或者编译自己的应用程序,具体过程在后面的章节中将会详细介绍。这里先介绍SDK 的安装步骤,如下:l 拷贝 SDK 到 Linux 目录并解压将SDK 压缩包拷贝到Ubu
18、ntu 下的用户工作目录,如$HOME/work 下,解压文件,得到安装脚本文件,如下:PC$ cd $HOME/work PC$ tar -Jxvf sdk-qt.tar.xz sdkl 查看脚本文件进入SDK 目录,可以看到下面安装脚本文件:meta-toolchain-qt5-openstlinux-eglfs-myir-x86_64-toolchain-3.1-snapshot.host.m anifestmeta-toolchain-qt5-openstlinux-eglfs-myir-x86_64-toolchain-3.1-snapshot.sh meta-toolchain-q
19、t5-openstlinux-eglfs-myir-x86_64-toolchain-3.1-snapshot.target. manifestmeta-toolchain-qt5-openstlinux-eglfs-myir-x86_64-toolchain-3.1-snapshot.testda ta.jsonl 执行安装脚本PC$ ./meta-toolchain-qt5-openstlinux-eglfs-myir-x86_64-toolchain-2.6-snapshot.s hl 选择安装目录目录SDK 默认被安装到/opt/st/myir/3.1-snapshot 目录下,用户也
20、可以根据提示自己选择合适的目录,具体根据提示进行操作:ST OpenSTLinux - EGLfs - (A Yocto Project Based Distro) SDK installer version 3.1- snapshot=Enter target directory for SDK (default: /opt/st/myir/3.1-snapshot):You are about to install the SDK to /opt/st/myir/3.1-snapshot. Proceed Y/n? y sudo password for licy:Extracting S
21、DK.doneSetting it updoneSDK has been successfully set up and is ready to be used.Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.$ . /opt/st/myir/3.1-snapshot/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-li nux-gnueabil 测试 SDK安装完成后,使用以下
22、命令设置环境变量,测试SDK 是否完成:PC$ source /opt/st/myir/3.1-snapshot/environment-setup-cortexa7t2hf-neon-vfp v4-ostl-linux-gnueabiPC$ $CC -versionarm-ostl-linux-gnueabi-gcc (GCC) 8.2.0Copyright (C) 2018 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NO warra
23、nty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPO SE.米尔提供的SDK 中除了包含交叉工具链,还包含Qt 库,qmake 等开发Qt 应用程序所需的资源,这些是后续使用QT Creator 进行应用程序开发和调试的基础。3. 使用 Yocto 构建开发板镜像3.1. 简介Yocto 是一个开源的“umbrella”项目,意指它下面有很多个子项目,Yocto 只是把所有的项目整合在一起,同时提供一个参考构建项目Poky,来指导开发人员如何应用这些项目,构建出嵌入式Linux 系统。它包含Bitbake、 Op
24、enEmbedded-Core, 板级支持包,各种软件包的配置文件,可以构建出不同类需求的系统。关于Yocto 的基础知识,请参考 www.yoctoproject.org。米尔提供的光盘镜像中 04_sources 目录下提供了适用于MYD-YA57C-V2 开发板的Y octo 元文件和数据,帮助开发者构建出可运行在MYD-YA157C-V2 开发板上的不同类型Li nux 系统镜像,如带Qt5.14 图形库的 myir-image-full 系统镜像,不带GUI 界面的myir-im age-core 系统镜像,以及包含ST 官方Weston 演示系统的镜像和使用Python 实现的my
25、i r-image-measy-iot 的物联网演示系统镜像。下面以构建 myir-image-full 镜像为例进行介绍具体的开发流程,为后续定制适合自己的系统镜像打下基础。注意:构建Yocto 不需要加载 2.3 节中的SDK 工具链环境变量,请创建新shell 或打开新的终端窗口。3.2. 获取源码我们提供两种获取源码的方式,一种是直接从米尔光盘镜像 04-sources 目录中获取压缩包,另外一种是使用repo 获取位于github 上实时更新的源码进行构建,请用户根据实际需要选择其中一种进行构建。提示:由于Yocto 构建前需要下载文件系统中所有软件包到本地,为了快速构建,MYD-
26、YA157C-V2 已经把相关的软件打包好,用户可以直接解压使用,减少重复下载的时间。3.2.1. 从光盘镜像获取源码压缩包压缩的源码包位于米尔开发包资料 04-Sources/ya157c-yocto.tar.bz2。拷贝压缩包到用户指定目录,如$HOME/Yocto 目录,这个目录将作为后续构建的顶层目录,按照下面的方式解压后出现layers 目录:PC$ cd $HOME/YoctoPC$ tar -jxvf ya157c-yocto-stm32mp1-5.4.31-2.0.0.tar.bz2 layers列出layers 目录内容如下:PC$ $ tree -d -L 1 layers
27、 layers meta-myir-st meta-openembedded meta-qt5 meta-st meta-timesys openembedded-core6 directories3.2.2. 通过github 获取源码目前MYD-YA157C-V2 开发板的 BSP 源代码和Yocto 源代码均使用了 github 托管并将保持长期更新,代码仓库地址请查看MYD-YA157C_SDK2.0.0 发布说明。用户可以使用repo 获取和同步github 上的代码。具体操作方法如下:PC$ mkdir $HOME/githubPC$ cd $HOME/githubPC$ expo
28、rt REPO_URL=PC$ repo init -u -no-clone-bu ndle -depth=1 -b master -m myir-stm32mp1-5.4.31-2.0.0.xmlPC$ repo sync代码同步成功之后,同样在$HOME/github 目录下得到一个layers 文件夹,里面包含 MYD-YA157C-V2 开发板相关的源码或者源码仓库的路径,目录结构和从压缩包解压出来的一样。3.3. 快速编译开发板镜像在使用Yocto 项目进行系统构建之前都需要先设置相应的环境变量,我们在构建myir-image-full 之前需要使用米尔提供的envsetup.sh
29、脚本进行环境变量的设置,设置过程中会创建一个构建目录(如build-openstlinuxeglfs-myir),后续构建过程,以及输出文件都包含在这个目录。l 执行环境变量设置脚本PC$: DISTRO=openstlinux-eglfs MACHINE=myir source layers/meta-myir-st/script s/envsetup.sh执行上述配置会列出所有适用于MYD-YA157C-V2 的系统镜像,如下所示:Available images for OpenSTLinux layers are:- The system based on QT frameworkmy
30、ir-image-full-MYiR HMI demo of image based on QT framework(r equire openstlinux-eglfs distro)- The system based on OpenSTLinux design supports YA157C series products myir-image-weston-OpenSTLinux weston image with basic Wayland support (if enable in distro)myir-image-measy-iot-This system is based o
31、n OpenSTLinux core image- Other OpenSTLinux images:myir-image-core-OpenSTLinux core imageand more images are available on meta-myir-st/recipes-myir/images.You can now run bitbake 配置脚本执行完成后将进入build-openstlinuxeglfs-myir 目录下,在此目录下就可以开始构建系统。l 构建 myir-image-full 镜像选择构建不同的系统镜像,需使用不同的bitbake 命令参数,具体命令参见下表,我们选择myir-image-full 为例进行介绍。表 3-1.系统镜像可选列表系统名命令基于 qt5.14 的measy-hmi2.0 系统bitbake myir-image-full基于 openstlinux 的core 系统bitbake myir-image-core基于 myir 的measy-iot 系统bitbake myir-image