




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
--PAGE10MYD-YA157C-V2Linux Copyright©2010-2020初始版本:uboot2020,kernel目-版本历史 .-2-目录-3-软件资源5文档资源5-开发主机环境6软件开发工具介绍8安装米尔定制的SDK9--简介-11获取源码-12从光盘镜像获取源码压缩包-12通过github12快速编译开发板镜像-14构建SDK(可选)-19-CubeProg-20制作SD24制作SD27-meta-myir-st-29板级支持包介绍-31板载TF-A-33在独立的交叉编译环境下编译TF-A33在Yocto项目下编译TF- .-34如何单独更新TF-A35板载u-boot37在独立的交叉编译环境下编译u-boot-37在Yocto项目下编译u-boot-38如何单独更新U-boot40板载Kernel-41在独立的交叉编译环境下编译Kernel-41-在Yocto项目下编译Kernel43如何单独更新Kernel44--如何创建您的设备树-48板载设备树-48设备树的添加-49如何根据您的硬件配置CPU-51GPIO51设备树中引用GPIO52如何使用自己配置的管脚-56U-bootGPIO56内核驱动中使用GPIO58用户空间使用GPIO65-基于Makefile71基于Qt75多核异构的应用-76应用程序开机自启动-80---Linux统的构建和定制化开发,目前比较常见的有Buildroot,Yocto,OpenEmbedded等等。其中YoctoLinux不仅仅是一个制作文件系统的工具,同时提供整套的基于Linux的开发和维护工作流程,本文主要介绍基于YoctoLinux流程,其中包括开发环境的准备,代码的获取,以及如何进行Bootloader,Kernel的移植,定制适合自身应用需求的Rootfs等。我们首先介绍如何基于我们提供的源代码构建适用于MYD-YA157C-V2开发板的系统镜像,如何将构建好的镜像烧录到开发板。针对那些基于MYC-YA157C-V2核心板进行项目开发的用户,我们重点介绍了将这一套系统移植到用户的硬件平台上的方法和一些要点,并通过一些实际的BSP移植案例和Rootfs本文档并不包含Yocto项目以及Linux验的嵌入式Linux系统开发人员。针对用户在进行二次开发过程中可能会使用到的一些具2SDK2.0.0发布说明》表2-4中的文档列表。MYD-YA157C-V2Linux5.4.31版本内核的操作系统,提供了丰富的系统资源和其他软件资源。开发板出厂附带嵌入式LinuxTF-AOptee-os,U-bootLinux内核和各驱动模块的源代码,以及适用于Windows桌面环境和Linux具体的包含的软件信息请参考《MYD-YA157C-V2SDK2.0.0发布说明》中第2章软件信根据用户使用开发板的各个不同阶段,SDK《MYD-YA157C-V2SDK2.0.0发布说明》2-4本章主要介绍基于MYD-YA157C-V2开发板在开发流程所需的一些软硬件环境,包括本节将介绍如何搭建适用于STM32MP1XX系列处理器平台的开发环境。通过阅读本发环境,为后面的开发和调试做准备。STM32MP157系列处理器是一个多核异构的处理2个ARMCortexA7内核,可以运行嵌入式LinuxLinux1ARMCortexM4(RTOS),使用ST官方提供的CortexM4软件开发工具。YoctoCPU,8GB以160GB硬盘或更高配置。可以是安装Linux系统的主机,也可以是运行Linux系统的虚拟机,Windows系统下的WSL2等。构建Yocto项目的主机操作系统可以有很多种选择,详细的信息请参考Yocto官方说明\h/docs/current/mega-manual/mega-manual.html#dev-preparing-the-build-host。一般选择在安装Fedora,openSUSE,Debian,Ubuntu,RHEL或者CentOSLinux发行版的本地主机上进行构建,这里推荐的是Ubuntu16.0464bit桌面版PC$PC$sudoapt-getPC$sudoapt-getinstallu-boot-toolslibyaml-devbisonflexsedwgetcurlcvssubversiongit-corecoreutilsunziptexi2htmltexinfodocbook-utilsgawkpython-pysqlite2diffstathelp2manmakegccbuild-essentialg++chrpathlibxml2-utilslibxml2-utilsxmltodocbookbsdmainutilsiputils-pingcpiopython-wandpython-pycryptopppython-cryptoPC$sudoapt-getinstalllibsdl1.2-devxtermcorkscrewnfs-commonnfs-kernel-serverdevice-tree-compilermercurialu-boot-toolslibarchive-zip-perlPC$sudoapt-getinstallncurses-devbclinux-headers-genericgcc-multiliblibncurses5-devlibncursesw5-devlrzszdos2unixlib32ncurses5repolibssl-dev在定制适用于ARMCortexA7核心的Linux系统和CortexM4核心的裸机或RTOS03-Tools下提供了部分工具,除此之外还会用到一系列ST提供的工具,简单介绍如下:ST推出了新的高集成度的编程工具STM32CubeProgrammer,它可以在烧录的过程\hSTM32CubeMX是ST公司推出的专门用于生成STM32的HAL代码的代码生成软件。它利用可视化界面来进行STM32时钟、定时器、DMA、串口、GPIO等就各种资源的配置。目前ST已经将STM32MPU系列CPU添加进STM32CubeMX,我们也可以用此工具来配置TF-A,U-boot以及Kernel的设备树和时钟,所以它既可以用来生成调试CortexM4的代码,也可以用来在CortexA7开发时生成设备树和时钟,下载地址如下:\hhtt\hSTM32CubeIDE是一个高级的C/C++开发平台,具有STM32微控制器和微处理器的外围配置、代码生成、代码编译和调试功能。它基于ECLIPSE™/CDT框架和用于开发的GCC工具链,以及用于调试的GDB工具,可用于CortexM4的调试。下载地址如下:\h我们在使用Yocto构建完系统镜像之后,还可以使用Yocto构建一套可扩展的SDK。在米尔提供的光盘镜像中包含一个编译好的SDK包,位于:03-Tools/ComplieToolchain/QT-SDK/sdk-qt.tar.xz,这个SDK中除了包含一个独立的交叉开发工具链还提供qmake,目标平台的sysroot,Qt应用开发所依赖的库和头文件等。用户可以直接使用这个SDK来建立一个独立的开发环境,单独编译Bootloader,Kernel或者编译自己的应用程序,具体过程在后面的章节中将会详细介绍。这里先介绍SDK的安装步骤,如下:将SDK压缩包拷贝到Ubuntu下的用户工作目录,如$HOME/work下,解压文件,得PC$cd$HOME/workPC$cd$HOME/workPC$tar-Jxvfsdk-qt.tar.xz进入SDKPC$PC$./meta-toolchain-qt5-openstlinux-eglfs-myir-x86_64-toolchain-2.6-snapshot.sSDK默认被安装到/opt/st/myir/3.1-snapshot目录下,用户也可以根据提示自己选择合STSTOpenSTLinux-EGLfs-(AYoctoProjectBasedDistro)SDKinstallerversion3.1-EntertargetdirectoryforSDK(default:/opt/st/myir/3.1-YouYouareabouttoinstalltheSDKto"/opt/st/myir/3.1-snapshot".Proceed[Y/n]?y[sudo]passwordforlicy:Extracting Settingit SDKhasbeensuccessfullysetupandisreadytobeEachtimeyouwishtousetheSDKinanewshellsession,youneedtosourcetheenvironmentsetupscripte.g.$./opt/st/myir/3.1-snapshot/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-li安装完成后,使用以下命令设置环境变量,测试SDKPC$PC$source/opt/st/myir/3.1-snapshot/environment-setup-cortexa7t2hf-neon-vfpPC$$CC--arm-ostl-linux-gnueabi-gcc(GCC)Copyright(C)2018FreeSoftwareFoundation,Thisisfreesoftware;seethesourceforcopyingconditions.ThereisNOwarranty;notevenforMERCHANTABILITYorFITNESSFORAPARTICULARPURPO米尔提供的SDK中除了包含交叉工具链,还包含Qt库,qmake等开发Qt应用程序所需的资源,这些是后续使用QTCreator进行应用程序开发和调试的基础。YoctoYocto是一个开源的“umbrella”项目,意指它下面有很多个子项目,Yocto只是把所有的项目整合在一起,同时提供一个参考构建项目Poky,来指导开发人员如何应用这些项目,构建出嵌入式Linux系统。它包含Bitbake、OpenEmbedded-Core,板级支持包,各种软件包的配置文件,可以构建出不同类需求的系统。关于Yocto的基础知识,请参考\h04_sources目录下提供了适用于MYD-YA57C-V2开发板的Yocto元文件和数据,帮助开发者构建出可运行在MYD-YA157C-V2开发板上的不同类型Linux系统镜像,如带Qt5.14图形库的myir-image-full系统镜像,不带GUI界面的myir-image-core系统镜像,以及包含ST官方Weston演示系统的镜像和使用Python实现的myir-image-measy-iotmyir-image-full镜像为例进行介绍注意:构建Yocto2.3节中的SDK工具链环境变量,请创建新shell或打开新04-sources目录中获取压缩包,另外一种是使用repo获取位于github上实时更新的源码进行构建,请用户根据实提示:由于Yocto构建前需要下载文件系统中所有软件包到本地,为了快速构建,MYD-用户指定目录,如$HOME/Yocto目录,这个目录将作为后续构建的顶层目录,按照下面的方式解压后出现layers目录:PC$PC$cdPC$tar-jxvfya157c-yocto-stm32mp1-5.4.31-2.0.0.tar.bz2列出layersPC$PC$$tree-d-L1layers├──meta-myir-├──meta-├──meta-├──meta-├──meta-└──openembedded-6通过github目前MYD-YA157C-V2BSP源代码和Yoctogithub托管并将保持长期更新,代码仓库地址请查看《MYD-YA157C_SDK2.0.0发布说明》。用户可以使用repo获取和同步github上的代码。具体操作方法如下:PC$mkdir PC$PC$cdPC$exportREPO_URL='/git/git-PC$repoinit-u/MYiR-Dev/myir-st-manifest.git--no-clone-bundle--depth=1-bmaster-mmyir-stm32mp1-5.4.31-2.0.0.xmlPC$repo代码同步成功之后,同样在$HOME/github目录下得到一个layers文件夹,里面包含在使用Yocto项目进行系统构建之前都需要先设置相应的环境变量,我们在构建-image-full之前需要使用米尔提供的envsetup.sh脚本进行环境变量的设置,设置过程中会创建一个构建目录(如build-openstlinuxeglfs-myir),后续构建过程,以及输出文件都PC$:PC$:DISTRO=openstlinux-eglfsMACHINE=myirsourcelayers/meta-myir-st/script执行上述配置会列出所有适用于MYD-YA157C-V2AvailableAvailableimagesforOpenSTLinuxlayersThesystembasedonQT MYiRHMIdemoofimagebasedonQTframework equire'openstlinux-eglfs'distro)ThesystembasedonOpenSTLinuxdesignsupportsYA157Cseriesproducts OpenSTLinuxwestonimagewithbasicWaylandsupport(ifenablein ThissystemisbasedonOpenSTLinuxcoreOtherOpenSTLinux OpenSTLinuxcoreandmoreimagesareavailableonmeta-myir-st/recipes-Youcannowrun'bitbake配置脚本执行完成后将进入build-openstlinuxeglfs-myir目录下,在此目录下就可以开选择构建不同的系统镜像,需使用不同的bitbake命令参数,具体命令参见下表,我们选择myir-image-full为例进行介绍。qt5.14的measy-hmi2.0openstlinux的coremyir的measy-iotweston的STdemo3-2.BitbakeBitbake-c-c从recipe-c部署镜像或软件包到目标rootfs-c注意:构建过程中下载大量的包资源,为了节约时间,推荐使用myirYocto-qt-downloads.tar.xz解压到downloadsnstlinuxeglfs-myir$bitbakemyir-image-full-kNOTE:StartedPRServerwithDBfile:/home/licy/myir-ya157c/stm32mp-ya157c-yocto/build-openstlinuxeglfs-myir/cache/prserv.sqlite3,IP:,PORT:38125,ID:Loadingcache:100%|######################|Time:0:00:01Loaded3848entriesfromdependencycache.Parsingrecipes:100%|######################|Time:Parsingof2651.bbfilescomplete(2650cached,1parsed).3848targets,116ped,0masked,0NOTE:ResolvinganymissingtaskqueueBuild = ="x86_64-linux" ="universal" ="arm-ostl-linux-gnueabi"=="openstlinux- ="3.1-snapshot- ="armvfpcortexa7neonvfpv4thumbcallconvention-hard" ="hard" ="dunfell" ="1" =PREFERRED_PROVIDER_virtual/kernel="linux-myir"meta-st-openstlinux= = =Initialisingtasks:100%|###############################|Time:Sstatesummary:Wanted425Found425Missed0Current3051(100%match,%等待系统构建完成后,在build-openstlinuxeglfs-myir/tmp-glibc/deploy/images/myir├──arm-trusted-├──├──flashlayout_myir-image-├──├──myir-image-full-openstlinux-eglfs-myir-20200930020809-license_content.ht├──myir-image-full-openstlinux-eglfs-myir.ext4->myir-image-full-openstlinux-├──myir-image-full-openstlinux-eglfs-myir-license_content.html->myir-image-f├──myir-image-full-openstlinux-eglfs-myir.manifest->myir-image-full-openstli├──myir-image-full-openstlinux-eglfs-myir.tar.xz->myir-image-full-├──myir-image-full-openstlinux-eglfs-myir.testdata.json->myir-image-full-ope├──└──st-initrd-openstlinux-eglfs-5directories,11
烧录TSVbootfsuImage,设备树,UserfsSTM32MP1DEMOeglfsSDK(可选米尔已经提供较完整的SDK安装包,用户可直接使用。但当用户需要在SDK中引入新的库,则需要重新使用Yocto构建出新的SDK工具。本节只简单对米尔提供的SDK做构建说明,使用如下构建命令生成SDK包:bitbake-cpopulate_sdkmeta-toolchain-qt5 成SDK安装包,安装方法请查看2.3节。米尔公司设计的MYC-YA157C-V2ST公司的STM32MPCubeProg制作SD制作SD卡烧录器:适用于批量生产烧写eMMCCubeProgUSBType_CSTM32CubeProgrammer选择启动模式,将拨码开关拨到Download模式(B2/B1/B0000)。连接好硬件,将开发板的J5OTG接口与电脑连接,插入电源适配器。如下图所示:关于更新方式,PC平台不同,也有两种推荐方式,可以二选一Windows平台下,建议您使用Window平台下安装的STM32CubeProgrammer,通过USB烧写。Linux平台下,建议您使用Linux平台下安装的STM32CubeProgrammer,通过USB烧写。windows打开Windows平台已经安装好的STM32CubeProgrammer软件,选择USB(标号1)烧录方式。点击connect(2)按钮连接。检查能否正常显示开发板的信息(标号4-2.选择烧录系统配置文件,不同的存储设备,配置文件不同,这里选择eMMC为例。解压开发包资料02-Image/MYIR-YA157C-full/,然后选择图4-3(标号1)位置选择eMMC的TSV文件,如文件:FlashLayout_emmc_stm32mp157c-ya157c-v2-trusted.tsv点击Browse选择image4-34-3.4-3(3)位置(download)下载更新文件,烧录系统时间较久,请耐心等待更新完成,其他存储设备如NandFlash/TFCard在windows的更新步骤Linux新建工作目录work,然后拷贝开发包资料/02-Image/MYIR-YA157C-full/所有解压完PC$PC$mkdir-p/home/myir/workPC$cd/home/myir/work添加STM32CubeProgrammer到PATHPC$PC$exportPATH=$HOME/STM32MPU_workspace/STM32MPU-Tools/STM32Cub启动安装好的STM32CubeProgrammer软件进行烧写更新,执行下面命令更新二进制文件,以MicroSDCard为例:PC$PC$STM32_Programmer_CLI-cport=usb1-wflashlayout_myir-image-full/FlashLa烧录过程时间较久,请耐心等待更新完成,其他存储设备如NandFlash/eMMC在Linux上的更新步骤一样。SD以下步骤均在WindowsSD(Win32DiskImager-1.0.0-binary(路径:\03-Tools\myirSD(myir-image-fullMicroSD将MicroSDCard放入读卡器读卡器,然后插入电脑,双击打开Win32DiskImager.exe读出U盘分区,点击箭头方向加载镜像文件。.3-4分钟完成,此速度取决于SD当写入完成后,即可使用此SD进行启动,将SD插入开发板背面的SD卡槽(J7)即可使用SD卡启动系统。SD为满足生产烧录的需要,米尔开发了适用于大批量生产的烧录方法。通过SD卡中的系统将需要烧录的系统刷写进板载的eMMC中。具体制作过程请按照下列步骤完成。详细制作步骤请查看《MYD-YA157CLinuxSDEMMC指导手制作SD4.2SD将SD插入开发板背面的SD卡槽(J7),并将拨码开关调至(B2/B1/B0:101)启动系统。插上电源,自动启动SDCard内的烧写系统,可以使用调试串口查看更新状态,或者查看蓝色的灯状态,大概2-3分钟后完成,蓝色灯常亮。Systemupdatestart...Updatefilelist:tfafilefile:/run/media/mmcblk1p5/mfgimages/tf-a-stm32mp157c-ya157c-512d-vubootfile:/run/media/mmcblk1p5/mfgimages/u-boot-stm32mp157c-ya157c-512bootfsfile:/run/media/mmcblk1p5/mfgimages/st-image-bootfs-openstlinux-westrootfsfile:/run/media/mmcblk1p5/mfgimages/myir-image-weston-openstlinux-wvendorfsfile:/run/media/mmcblk1p5/mfgimages/st-image-vendorfs-openstlinux-userfsfilefile:/run/media/mmcblk1p5/mfgimages/st-image-userfs-openstlinux-wLED SYSTEM Update[1/8]Checkimagefilesin/run/media/mmcblk1p5/mfgimages...Updating...[2/8]CheckingRootfsdevice:OK[3/8]Writetf-a...Updating...[4/8]Writeuboot...Updating...[5/8]Copybootfsfiles...Updating...[6/8]Copyvendorfsfiles...Updating...[7/8]Copyrootfsfiles...Updating...[8/8]Copyuserfsfiles...Updating...**********SystemupdatesuccessfullyUpdatecomplete.../usr/bin/flash_emmc.sh:line68: 637Terminated Updatecomplete...前面的章节已经比较完整的讲述了基于Yocto项目构建运行在MYD-YA157C-V2开发板上的系统镜像,并且将镜像烧录到开发板上的完整流程。由于MYC-YA157C-V2核心板的很多管脚都具有多种功能复用的特性,所以实际项目中基于MYC-YA157C-V2核心板设计的底板与MYB-YA157C相比总会有一些差异。这些差异可能是去掉显示,增加更多GPIO,或者需要增加更多串口,还有可能通过SPI,I2C,USB等扩展一些外设等等;除了硬件上的差异,还有一些系统组件上的差异,比如侧重HMI应用的,可能需要比较完备的图形系统,QT库等,侧重后台管理应用的,可能需要更完备的网络应用,Python运行环境meta-myir-stYoctoLinux创建的开发模型,它将Yocto项目与其他简单的构建系统区别开来。层模型同时支持协作和定制。层是包含相关指令集的存储库,这些指令集告诉OpenEmbedded构建系统应该做什么。meta-myir-st层基于在ST官方的meta-st层建立的适用于MYD-YA157C-V2开发板的层,其中包含BSP、GUI、发行版配置、中间件或应用程序的各种元数据和配方。用户可以在这个“层模型”的基础上适配基于MYC-YA157C-V2核心板设计的硬件,定制自己的应用,从而构建适合自己的系统镜像,meta-myir-st层包含的具体内容如下:├──├──├──├── ├── └──├──├──recipes- ├──qt- └──├──recipes- ├──trusted-firmware- └──u-├──recipes- └──├──recipes- ├── └──linux-├──recipes- ├── ├── └──├──recipes-└──├──├──├──└──包含多种米尔的应用程序,如measy-tf-a与uboot在进行系统移植时,需要重点关注的是负责硬件初始化和系统引导的recipes-bsp部分,负责Linux系统的内核和驱动实现的recipes-kernel部分以及应用程序定制的recipes-app部分。P包括有关设备上的硬件特性的信息和内核配置信息,以及所需的任何其他硬件驱动程一旦您接受了许可证,米尔的开发板使用的BSP以遵守开源协议许可,同时BSP的源码IPUbootLinux通常根据硬件启动的不同阶段,我们将BSP分成Bootloader部分和Kernel部分,采用MYC-YA157C-V2BSP代码可以查看meta-myir-strecipes-bsp和recipes-kernel这两个配方的内容。recipes-bsp中只包含了Bootloader部分的trusted-firmware-a和u-boot,这一部分主要实现核心硬件,如DDR,ClockMYC-YA157C-V2核心板├──trusted-firmware-└──u-recipes-kernel中包含Linux内核和LinuxFirmware两个部分,主要实现内核及外设├──└──linux-在使用米尔的核心板设计产品时,如无特殊的需求,bootloader部分可不必修改。你TF-ATF-A(TrustedFirmware-A)是由ARM®提供的安全类软件的参考实现。TF-A最初设计是为Armv8-A平台,现在由STMicroelectronics适配并使用在Armv7-A平台。现在该项目已经将TrustedFirmware项目移交给Linaro作为开源项目来管理。这部分代码遵守BSD-3-Clause版权。在meta-myir-st层模型中,TF-A是recipes-bsp的一个部分。在使用TrustedBootChain(关于BootChain的详细信息,请查看\h/stm32mpu/wiki/Boot_chain_overview)方式启动时,它用作FSBL(FirstStageBootLoader),主要实现DDRClock等核心资源的初始化,基于MYC-YA157C-V2核心板设计的硬件一般不需要修改TF-TF-A04-Source/MYiR-STM32-tf-a.tar.bz2到指定自定义的work目录(如/home/work),解压进入源码目录并查看对应的文件信息,如拷贝到work目录:PC$PC$cdPC$tar-jxvfMYiR-STM32-tf-a.tar.bz2PC$cdMYiR-STM32-tf-a编译脚本-rwxrwxrwx-rwxrwxrwx1rootroot2977Jul506:58drwxr-xr-x18rootroot4096Jul506:51myir-st-arm-trusted--rw1licylicy4705Apr2002:25PC$PC$source/opt/st/myir/3.1-snapshot/environment-setup-cortexa7t2hf-neon-vfpPC$PC$cdmyir-st-arm-trusted-PC$make-f$PWD/../Makefile.sdkall 编译成功后,在build/trusted目录下会生成TF-A的二进制文件如下表所示:5-3TF-aSTM32信息头的U-Boot件,在Trustedbootchain下用于FSBLSTM32信息头的U-Boot在使用serial启动模式中引导SSBL可直接运行的bin可用于debug调试的elfYocto项目下编译TF-系统开发中,建议使用git来管理源代码,更便捷的管理代码的多个版本。如果在修改代码并测试后,代码无误,可以提交到本地仓库中,这样使用Yocto来构建系统也更容仓库,同时修改用户可以自己建立git仓库管理代码,然后修改配方下的SRC_URI以及SRCREV来匹配自己的代码。下面以github下的建立的仓库为例加以说明。首先找到最新提交的commit,在githubcommitPC$:PC$:gitcommite8e5d61b76884fabeb9cf66717165eea7d8d5be3(HEAD->master)Author:licy<\hlicy.li@> WedSep1618:33:452020-modya15xc-tv1.0修改layers/meta-myir-st/recipes-bsp/trusted-firmware-a/tf-a-myir-common_2.2.inc下的SRCREV值。#SRC_URI+="git:///MYiR-Dev/myir-st-arm-trusted-firmware.git;protocSRCREV=TF_VERSION=PV=S="${WORKDIR}/git"#ConfiguredevupstreamclassusageBBCLASSEXTEND=#githubSRC_URI_class-devupstream="git:///MYiR-Dev/myir-st-arm-trusted-firSRCREV_class-devupstream修改完成后,可在构建目录下单独使用“bitbaketf-a-myir”命令构建arm-trusted-firmware或者按照3.3章重新构建整个系统。编译成功之后,将TF-A镜像烧录进MicroSD卡(MicroSD卡必须已分好区,如未分区,可按照3.5.1节烧录系统到MicroSD卡即可完成分区)。$>$>ls-l/dev/disk/by-partlabel/total0lrwxrwxrwx1rootroot10Jan1717:38bootfs->lrwxrwxrwx1rootroot10Jan1717:38fsbl1->../../sdb1 ➔FSBL(TF-A)lrwxrwxrwx1rootroot10Jan1717:38fsbl2->../../sdb2 ➔FSBLbackup(TF-Abackup–samecontentasFSBL)lrwxrwxrwxlrwxrwxrwx1rootroot10Jan1717:38rootfs->lrwxrwxrwx1rootroot10Jan1717:38ssbl->../../sdb3 ➔SSBL(U-Boot)lrwxrwxrwx1rootroot10Jan1717:38userfs->../../sdb6使用dd命令将镜像烧录到SDPC$:PC$:ddif=tf-a-stm32mp157c-ya157c-512d-v2-trusted.stm32of=/dev/sdb1PC$:ddif=tf-a-stm32mp157c-ya157c-512d-v2-trusted.stm32of=/dev/sdb2烧录到核心板eMMCroot@myir~#:echo0>/sys/class/block/mmcblk2boot0/force_roroot@myir~#:root@myir~#:echo0>/sys/class/block/mmcblk2boot0/force_roroot@myir~#:echo0>/sys/class/block/mmcblk2boot1/force_roroot@myir~#:ddif=tf-a-stm32mp157c-ya157c-512d-v2-trusted.stm32of=/dev/mmcblk2boot0conv=fdatasyncroot@myir~#:ddif=tf-a-stm32mp157c-ya157c-512d-v2-trusted.stm32of=/dev/mmcblk2boot1conv=fdatasyncroot@myir~#:echo1>/sys/class/block/mmcblk2boot0/force_roroot@myir~#:echo1>u-bootU-boot是一个功能非常丰富的开源启动引导程序,包括内核引导,下载更新等众多方面,在嵌入式领域应用十分广泛,可查看官网获取更多信息\hhttp://www.denx.de/wiki/U-BoSTM32MP1平台也使用bootchainsbootchains模式会对Bootchains的引入是为了区分两类启动流程中用的的各个软件组件或程序,STM32MP1Bootchains有两种方式,也可以查看/stm32mpu/wiki/Boot_chain_overviewBasicbootchain:使用U-BootSPL作为FSBL,U-Boot作为TrustedbootchainTrustedFirmware-ATF-A)作为FSBLU-Bootu-boot04-Source/MYiR-STM32-u-boot.tar.bz2到指定自定义的work目录(如/home/work),解压进入源码目录并查看对应的文件信息,如拷贝到work目录:PC$PC$cdPC$tar-jxvfMYiR-STM32-u-boot.tar.bz2PC$cdMYiR-STM32-u-boot编译脚本-rwxrwxrwx-rwxrwxrwx1rootroot3816Jun920:51drwxr-xr-x25rootroot4096Sep1801:16myir-st-u--rw1licylicy10579Apr2103:46PC$PC$source/opt/st/myir/3.1-snapshot/environment-setup-cortexa7t2hf-neon-vfpPC$cdmyir-st-u- 在源码目录下配置编译方式:(此方式不推荐PC$PC$makestm32mp15_<config>_defconfigPC$makeDEVICE_TREE=<devicetree>allBasicbootPC$PC$makePC$makeDEVICE_TREE=stm32mp157c-ya157c-512d-v2TrustedbootPC$PC$makePC$makeDEVICE_TREE=stm32mp157c-ya157c-512d-v2使用Makefile.sdk此方式将所有生成目标定义在Makefile.sdk脚本中,可使用单条命令完成:(推荐方式)PC$make-f$PWD/../Makefile.sdkall 以trusted为例,进入到编译输出文件夹PC$cd../build- 包含STM32U-Boot在Trustedbootchain下用于SSBLelf文件的uboot,可用于gdbYocto项目下编译u-5.4.1中的迭代开发过程改好U-bootYocto进行整个镜像的构建。此时需要将修改后的源代码提交到git仓库,同时修改元层的对应源代码的commit值。首先在git仓库下找到最新的commit值,并将值复制,然后通过SRC_URI和SRCREV变量将用户自己创建的git仓库URL和对应的commit值提供给BSP配PC$:git commitcommitd7a7867fcfca68b025c3396f3e1d165a20b2a333(HEAD->master)Author:licy<\hlicy.li@> FriSep1802:32:082020-mod修改layers/meta-myir-st/recipes-bsp/u-boot/u-boot-myir-common_2020.1.inc下的SRCREV值。#githubSRC_URI+="SRCREV=U_BOOT_VERSION="2020.1"PV="${U_BOOT_VERSION}"S="${WORKDIR}/git"#ConfiguredevupstreamclassBBCLASSEXTEND=#githubSRC_URI_class-devupstream="git:///MYiR-Dev/myir-st-u-boot.git;proSRCREV=修改完成后,可在构建目录下单独使用“bitbakeu-boot-myir”命令构建u-boot或者按照3.3章重新构建这个系统。编译成功之后,将U-boot镜像烧录进MicroSD卡(MicroSD卡必须已分好区,如未分区,可按照4.2节烧录一次系统到SD卡即可完成分区)。$>$>ls-l/dev/disk/by-totallrwxrwxrwx1rootroot10Jan1717:38bootfs->lrwxrwxrwx1rootroot10Jan1717:38fsbl1->lrwxrwxrwx1rootroot10Jan1717:38fsbl2->../../sdb2backup–samecontentasFSBL)lrwxrwxrwx1rootroot10Jan1717:38rootfs->lrwxrwxrwx1rootroot10Jan1717:38ssbl->lrwxrwxrwx1rootroot10Jan1717:38userfs->FSBL(TF-FSBLbackup(TF-SSBL(U-使用dd命令将镜像烧录到SDPC$:PC$:ddif=u-boot-stm32mp157c-ya157c-512d-v2-trusted.stm32of=/dev/sdb3co烧录到核心板eMMCroot@myir~#:root@myir~#:ddif=u-boot-stm32mp157c-ya157c-512d-v2-trusted.stm32of=/dev/mmcblk2p1conv=fdatasyncKernelLinuxkernel是个十分庞大的开源内核,被应用在各种发行版操作系统上,Linuxkernel以其可移植性,多种网络协议支持,独立的模块机制,MMU等诸多丰富特性,使Linuxkernel能在嵌入式系统中被广泛采用。同时STM32MP1也支持Linux内核,并被添加到了内核主线,将得到长期稳定的更新,可查看内核主线了解最新消息\h/,MYD-YA157C-V2使用ST开源社区版内核移植,最新支持Linuxkernel5.4.31版本。kernel04-Source/MYiR-STM32-kernel.tar.bz2到指定自定义的work目录(如/home/work),解压进入源码目录并查看对应的文件信息,如拷贝到work目录:PC$PC$cdPC$tar-jxvfMYiR-STM32-kernel.tar.bz2PC$cdMYiR-STM32-kerneldrwxr-xr-xdrwxr-xr-x26rootroot4096Aug3104:50myir-st--rw1rootroot15366Jun922:49PC$cdmyir-st- PC$mkdir-p PC$makeARCH=armO="$PWD/../build"myc-ya157c_defconfig PC$cd PC$make 4-4.PC$PC$source/opt/st/myir/3.1-snapshot/environment-setup-cortexa7t2hf-neon-vfpPC$makeARCH=armO="$PWD/../build"myc- PC$PC$makeARCH=armuImagevmlinuxdtbsLOADADDR=0xC2000040PC$makeARCH=armmodules耐心等待编译完成PC$PC$makeARCH=armINSTALL_MOD_PATH="$PWD/../build/install_artifact"modules_installO="$PWD/../build"PC$mkdir-pPC$cp$PWD/../build/arch/arm/boot/uImage$PWD/../build/install_artifact/boot/PC$cp$PWD/../build/arch/arm/boot/dts/st*.dtb$PWD/../build/install_artifact/bo这样就会在build/install_artifact看到编译输出文件,其中build/install_artifact/lib目录存放的是内核模块文件,build/install_artifact/boot目录存放的是设备树与内核镜像文件。编译,可参看源码目录的build文件。5-5.5-6.支持带HDMI支持带LCDYocto项目下编译将修改后的源代码提交到github仓库,同时修改元层的对应源代码的commitgithub仓库下找到最新的commitPC$:PC$:gitcommitaf22ad957c7f88791f72fe5fd0a4725ed56ebce5(HEAD->master,origin/master,origin/HEAD)Author:licy\h FriSep1803:27:512020-addfdcanand修改layers/meta-myir-st/recipes-kernel/linux/linux-myir_5.4.bbSRCREV#ConfiguredevupstreamclassusageBBCLASSEXTEND=SRC_URI+="SRCREV=修改完成后,可在构建目录下单独使用“bitbakelinux-myir”命令构建kernel或者按照3.3章重新构建这个系统。编译成功之后,将uImage和dtb文件可通过以太网,WIFI,USBotg,U盘等传输介质传输到开发板的/boot分区下(SD卡启动模式)即可完成更新,内核模块文件传输到root分区的/lib/modules路径下。当传输完成后执行sync&reboot完成同步和重启。将编译的服务器与开发板同时连接到同一子网中,如开发板以太网IP100。编译服务器IP为:01在生成输出文件下build/install_artifact/使用scp方式传输需要更新的文件。更新uImage与设备树:PC$scp-rboot/*root@00:/boot/ 删除编译生成文件build/install_artifact/lib下的软连接文件:PC$rmlib/modules/<kernelversion>/sourcelib/modules/<kernel更新内核PC$PC$scp-rlib/modules/*USBOTG用Type-CUSBOTG接口与编译服务器直接连接。开发板上Linux系统默认设置USBOTG从设备为模拟网卡设备。IP地址默认为:build/install_artifact/使用scp方式传输需要更新的文件。更新uImage与设备树:PC$PC$scp-rboot/*删除编译生成文件build/install_artifact/libPC$rmlib/modules/<kernelversion>/sourcelib/modules/<kernelversion>/build更新内核modules:PC$scp-rlib/modules/* 使用umsUMS名为USB大容量存储器,将开发板的模拟成大容量的储存器。可使用这个来更 ums0mmcUSBDisk:ums0usb将USBotg与编译服务器直接连接,开发板进入uboot命令行终端(uboot计时状态输入任意键),ums0mmc0(SDcard)MMC0上的分区信息。HitHitanykeytostopautoboot:0STM32MP>ums0mmc0UMS:LUN0,dev0,hwpart0,sector0x0,count编译服务器将自动挂载到mediaroot@ubuntu:/media/licy#root@ubuntu:/media/licy#ls-alltotal15drwxr-x+6rootroot4096Oct1519:37 4rootroot4096Aug1320:57 5rootroot1024Oct1318:53drwxr-xr-x21rootroot4096Feb72020 7rootroot1024Sep3001:53 4rootroot1024Sep3001:51在生成输出文件下build/install_artifact/使用cp方式传输需要更新的文件。更新uImage与设备树:PC$PC$cp-rfboot/*删除编译生成文件build/install_artifact/libPC$rmlib/modules/<kernelversion>/sourcelib/modules/<kernelversion>/build更新内核modules:PC$cp-rflib/modules/* SD将启动的SD卡通过读卡器等介质,连接到编译服务器。编译服务器将自动挂载到目录(有些系统无法自动挂载,及需要手动挂载bootfs分区)root@ubuntu:/media/licy#root@ubuntu:/media/licy#ls-alltotal15drwxr-x+6rootroot4096Oct1519:57 4rootroot4096Aug1320:57 5rootroot1024Oct1318:53drwxr-xr-x21rootroot4096Feb72020 7rootroot1024Sep3001:53 4rootroot1024Sep3001:51在生成输出文件下build/install_artifact/使用cp方式传输需要更新的文件。更新uImage与设备树:PC$cp-rfboot/*/media/$USER/bootfs/ 删除编译生成文件build/install_artifact/lib下的软连接文件:PC$rmlib/modules/<kernelversion>/sourcelib/modules/<kernelversion>/build更新内核modules:PC$cp-rflib/modules/* 为了适配用户新的硬件平台,首先需要了解米尔的MYD-YA157C-V2开发板提供了哪些资源,具体的信息可以查看《MYD-YA157C-V2SDK2.0.0发布说明》。除此之外用户还需要对CPU的芯片手册,以及MYC-YA157C-V2核心板的产品手册,管脚定义有比较用户可以在BSP源码里创建自己的设备树,一般情况下不需要修改Bootloader部分中的TF-a和u-bootLinux内核设备树进行适当的调整即可。在此将MYD-YA157C-V2BSP各个部分中的设备树列表罗列出来,方便用户支持V2256MBDDR3支持V2256MBDDR3stm32mp157系列处理器的pin支持HDMI支持lcdMYD-YA57C-V2开发板pinLinux内核设备树是一种数据结构,它通过特有的语法格式描述片上片外的设备信息。由BootLoader传递给kernel,kernel进行解析后形成和驱动程序关联的dev结构供在内核源码下arch/arm/boot/dts下可以看到大量的平台设备树。如适合MYD-YA157C-V2的设备树,可在当前路径下增加自定义设备树,如:stm32mp157c-ya157c-xxx.dts////Path:-rw-r--r--1rootroot1941Sep1023:45stm32mp157c-ya157c-hdmi--rw-r--r--1rootroot1116Aug1402:04stm32mp157c-ya157c-lcd--rw-r--r--1rootroot3401Aug2423:24stm32mp157c-ya157c--rw-r--r--1rootroot3401Oct1323:19stm32mp157c-ya157c-我们将MYC-YA157C-V2stm32mp157.dtsi以及stm32mp1////SPDX-License-Identifier:(GPL-2.0+ORBSD-3-#include#include"stm32mp157-ya157c-pinctrl.dtsi"#include"stm32mp15xa.dtsi"#include"stm32mp15xxac-pinctrl.dtsi"#include"stm32mp15xx-ya157c-pmic.dtsi"#include"stm32mp15xx-ya157c.dtsi"/model="MYIRYA157Cv2\hwww.myir-compatible="myir,stm32mp157c-ya157c-v2",aliasesethernet0=ðernet0;serial0=&uart4;chosenstdout-path=reserved-memorygpu_reserved:gpu@dc000000reg=<0xdc000000用户增加了新的设备树源文件之后,还需要在同目录下的Makefile里添加设备树编译////File:arch/arm/boot/dts/Makefiledtb-$(CONFIG_ARCH_STM32)+= stm32mp157c-ya157c-v2.dtb\stm32mp157c-ya157c-hdmi-v2.dtb\stm32mp157c-ya157c-lcd-v2.dtb\5.5节的方法编译生成设备树dtb文件stm32mp157c-ya157c-xxx.dtb。上述过程是新建设备树文件过程,但由于添加新设备树后还需要修改U-boot中的加载文件名称,修改Yocto的配置文件和元数据,所以建议CPUGPIO:General-purposeinput/output,通用的输入输出口,在嵌入式设备中是一个十STM32MP1封装大量的外设控制器,这些外设控制器与外部设备交户一般是通过控制GPIO来实现,而将GPIO被外设控制器使用我们称为复用(AlternateFunction),给它们赋予了更多复杂的功能,如用户可以通过GPIO口和外部硬件进行数据交互(如UARGPIO口的使用非常广泛。STM32MPU的GPIOSTM32CubeMX配置或使用STM32CubeMX目前ST已经将STM32MPU系列CPU添加进STM32CubeMX,我们也可以用此工具来配置TF-A,U-boot以及Kernel的GPIO功能设备树和外设时钟。本节不重点讲解其WIKI:\h官方\hGPIO的配置可通过米尔整理的Datasheet找到描述文件(01-Document\Datasheet\STM32MP157A.pdf)与核心板引脚清单(01-Document\Hardware\SCH&PinList\MYD-YA157C-V2\MYC_YA157C_PINLIST-V2-2020508.pdf),示例如下:((port*16+line)<<8)|port:port:Thegpioportindex(PA=0,PB=1,...,PK=line:Thelineoffsetwithintheport(PA0=0,PA1=1,...,PA15=--function:Thefunctionnumber,can0:1:AlternateFunction2:AlternateFunction3:AlternateFunction16:AlternateFunction17:18:0表示通用数字GPIO;1-15表示复用功能AF0-AF15;Analog下面以扩展接口上的GPIOF14/*/*GPIOF14setasalernatefunction5...pinmux=<STM32_PINMUX('F',14,AF5)>;//set/*GPIOF14setasGPIO...pinmux=<STM32_PINMUX('F',14,/*GPIOF14setasanalog...pinmux=<STM32_PINMUX('F',14,/*GPIOF14reservedforco-processor...pinmux=<STM32_PINMUX('F',14,GPIO此实例使用PF14作为测试GPIO。介绍如何在设备树里配置设备节点,并为后面章gpioctr_device{compatible="myir,gpioctr";status="okay";gpioctr-gpios=<&gpiof14LCDMYD-YA157C-V2开发板定义和实现的众多丰富的功能,但同时也占有了大量的管脚资源,如用户直接使用MYD-YA157C-V2基础上进行设计开发,将需要对管脚进行重新定义和配置。下列就以将LCD复用管脚(PH11与PH12)重新配置I2C功能,可先查表了MYD-YA157C-V2开发板已经使用PH11与PH12两个管脚作为LCD的RGB信号管脚LCD_R5(AF14)与LCD_R6(AF14),管脚配置如下:ltdc_pins_a:ltdc-a-0{pinspinspinmux=<STM32_PINMUX('G',7,AF14)>,/*LCD_CLK<STM32_PINMUX('I',10,AF14)>,/*LCD_HSYNC<STM32_PINMUX('I',9,AF14)>,/*LCD_VSYNC<STM32_PINMUX('E',13,AF14)>,/*LCD_DE<STM32_PINMUX('H',2,AF14)>,/*LCD_R0<STM32_PINMUX('H',3,AF14)>,/*LCD_R1<STM32_PINMUX('H',8,AF14)>,/*LCD_R2<STM32_PINMUX('H',9,AF14)>,/*LCD_R3<STM32_PINMUX('H',10,AF14)>,/*LCD_R4<STM32_PINMUX('H',11,AF14)>,/*LCD_R5<STM32_PINMUX('H',12,AF14)>,/*LCD_R6slew-rate=<1>;通过查手册可重新配置进行管脚给i2C1使用分配为PH11(AF5)与i2c1_pins_a:i2c1_a-0{pinspinmux=<STM32_PINMUX('H',11,AF5)>,/*I2C1_SCL<STM32_PINMUX('H',12,AF5)>;/*I2C1_SDAslew-rate=<0>;i2c1_sleep_pins_a:i2c1_sleep_a-0{pins{pinmux=<STM32_PINMUX('H',11,ANALOG)>,/*I2C1_SCL<STM32_PINMUX('H',<STM32_PINMUX('H',12,ANALOG)>;/*I2C1_SDA配置设备树节点并将状态设置为启动态pinctrl-names="default","sleep";pinctrl-0=<&i2c1_pins_a>;pinctrl-1=<&i2c1_sleep_pins_a>;status="okay";同时将lcd<dc<dcpinctrl-names="default","sleep";pinctrl-0=<<dc_pins_a>;pinctrl-1=<<dc_pins_sleep_a>;status="disabled";通过以上步骤即可完成了管脚的重新分配,将配置完成的设备树重新按照5.5节编译与更新即可在/dev下生成i2c-X的I2C的设备节点,由于分配出来的I2C1总线下没有挂接我们在u-bootKernelu-bootKernel中U-boot中使用GPIOuboot可以直接使用命令来控制GPIO的设置。如设置GPIOF14STM32MP>STM32MP>gpiosetgpio:pinGPIOF14(gpio94)valueis1STM32MP>gpioclearGPIOF14gpio:pinGPIOF14(gpio94)valueis可使用设备树定义IO操作的节点,在代码中实现IO的功能,如下列wifi&bt////File:uboot/arch/arm/dts/stm32mp157c-ya157c-512d-v2.dtswifi_bt_power:wifi_bt_power{compatible="wifibt-rst";wifi{label="wifi-gpios=<&gpiof3btlabel="bt-gpios=<&gpiof15//File:uboot/board/st/stm32mp1/stm32mp1.cstaticintwifi_bt_power(void)ofnodenode1,structgpio_descwifi,bt;intret=0;node1=ofnode_path("/wifi_bt_power/wifi");if(!ofnode_valid(node1)){printf("%s:nowifi-power?\n",func);return-ENOENT;node2=ofnode_path("/wifi_bt_power/bt");if(!ofnode_valid(node2)){printf("%s:nobt-power?\n",func);return-ENOENT;if(gpio_request_by_name_nodev(node1,"gpios",&wifi,GPIOD_IS_OUT)){printf("%s:couldnotfindreset-gpios1\n",func);return-ENOENT;if(gpio_request_by_name_nodev(node2,"gpios",&bt,GPIOD_IS_OUT))printf("%s:couldnotfindreset-func);return-ENOENT;ret=dm_gpio_set_value(&wifi,0);if(ret){pr_err("%s:can'tset_valueforwifiresetgpio",func);gotoerror;ret=dm_gpio_set_value(&bt,ifif(ret)pr_err("%s:can'tset_valueforbtresetgpio",func);gotoerror;ret=dm_gpio_set_value(&wifi,1);if(ret){pr_err("%s:can'tset_valueforwifiresetgpio",func);gotoerror;ret=dm_gpio_set_value(&bt,1);if(ret){pr_err("%s:can'tset_valueforbtresetgpio",func);gotoerror;return内核驱动中使用GPIOIO6.2.2节中的第一个设备树示例中,已经定义完成了gpio节点信息,下面将使用内核驱动来实现GPIO的控制(对PF14管脚进行置1与置0,如需检测需使用万用表测试#include<linux/module.h>#include<linux/of_device.h>#include<linux/fs.h>#include<linux/errno.h>#include<linux/miscdevice.h>#include<linux/kernel.h>#include<linux/major.h>#include<linux/mutex.h>#include<linux/proc_fs.h>#include<linux/seq_file.h>#include<linux/stat.h>#include<linux/init.h>#include<linux/device.h>#include<linux/tty.h>#include<linux/kmod.h>#include<linux/gfp.h>#include<linux/gpio/consumer.h>#include<
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025上海市分行个人汽车贷款合同
- 2025标准车位买卖合同模板
- 2025【合同协议】合作伙伴合同
- 2025【景观设计合同】景观工程设计包括内容
- 政治经济学-不平等和社会正义
- 2024年计算机基础考试知识点归纳试题及答案
- 中华女子学院《世界文化产业专题研究》2023-2024学年第二学期期末试卷
- 湖州学院《模拟面试(一)》2023-2024学年第一学期期末试卷
- 2025年房屋租赁合同大全
- 天津生物工程职业技术学院《工程招投标与合同管理》2023-2024学年第二学期期末试卷
- 中华医学会杂志社作者贡献声明.
- 蓄水池工程工程安全管理措施和方案
- 机壳类2D图纸标注参考规范
- 起重吊装及指挥安全风险告知书
- 矿井开拓方案比较
- DB23-黑龙江省建设工程施工操作技术规程-城镇道路工程.doc
- 《远离浮躁,静心学习》ppt课件
- 二维数控精密工作台设计说明书
- 项目研究助力区域教学改进
- 初中化学优质课评分表.
- LKJ-2000课件
评论
0/150
提交评论