查看“源码编译”的源代码
←
源码编译
跳转至:
导航
、
搜索
因为以下原因,你没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
== 源码编译 == == 编译环境配置 == === 源码目录结构 === 由于OpenSTLinux所涉及到的源码较多,且有路径的依赖。所以请按照本文的说明建立源码文件夹。<br> 在用户home目录下建立FS-MP1A文件夹。<br> linux@ubuntu: $ cd ~ linux@ubuntu: $ mkdir FS-MP1A 将工作目录切换到fs-mp1a目录下,建立linux、optee-os、trusted-firmware、u-boot、tools文件夹<br> linux@ubuntu: $ cd ~/FS-MP1A linux@ubuntu: $ mkdir linux optee-os trusted-firmware u-boot tools <center>[[Image:38-1-1-1.png]]</center><br> 请务必按照此目录名称建立文件夹,否则会导致后续的OpenSTLinux系统编译错误。<br> === SDK工具链安装 === OpenSTLinux SDK是Yocto SDK定制发行版的软件开发套件,它提供了独立的交叉开发工具链和针对特定镜像中所使用到的特定链接库。<br> 开发资料光盘中提供的SDK是基于FS-MP1A开发板的定制交叉编译工具链,该工具链可用于FS-MP1A开发板中所有项目的编译与调试。<br> 将资料光盘下【华清远见-FS_MP1A开发资料\01-工具软件】的en.SDK-x86_64-stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24.tar.xz复制到ubuntu主机中,可以采用共享文件夹的方式也可以使用tfp方式将文件存入FS-MP1A源码目录下的tools文件夹下进行解压。<br> linux@ubuntu: $ tar -xvf en.SDK-x86_64-stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24.tar.xz -C /home/linux/FS-MP1A/tools/ 解压之后得到sdk目录,进入到sdk文件夹之后内容如下。<br> <center>[[Image:38-1-2-1.png]]</center> <br> 执行st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24.sh安装脚本。 linux@ubuntu: $ ./st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24.sh 运行之后会提示输入安装位置,直接按回车键默认即可:<br> <center>[[Image:38-1-2-2.png]]</center> <br> 继续询问是否安装SDK,输入Y,回车<br> <center>[[Image:38-1-2-3.png]] </center><br> 默认安装路径安装在opt目录下,这个目录需要有root权限,所以安装时需要使用sudo 安装,过程中需要输入用户的sudo密码(如果当前用户sudo功能已经授权,这个密码就是用户的登录密码),输入密码后开始进行安装。<br> <center>[[Image:38-1-2-4.png]]</center> <br> 输入密码后等待安装,安装后显示如下:<br> <center>[[Image:38-1-2-5.png]] </center><br> 导入sdk<br> linux@ubuntu: $ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi 验证开发工具是否安装正确,显示版本信息如下图所示。<br> linux@ubuntu: $ $CC --version <center>[[Image:38-1-2-6.png]]</center> <br> === 源码导入 === <ol> <li>Bootloader源码</li> 将光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\u-boot】下的u-boot-fsmp1a-2020.01.tar.xz和Makefile.sdk导入到fs-mp1a目录下u-boot文件夹中 <center>[[Image:21-1-3-1.png]]</center><br> 将u-boot-fsmp1a-2020.01.tar.xz解压之后得到u-boot-fsmp1a-2020.01文件夹 linux@ubuntu:$ tar -xvf u-boot-fsmp1a-2020.01.tar.xz <center>[[Image:21-1-3-2.png]]</center><br> <li>trusted-firmware源码</li> 将光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\tf-a】下的fsmp1a-trusted-firmware-2.2.tar.xz和Makefile.sdk导入到fs-mp1a目录下trusted-firmware文件夹中 <center>[[Image:21-1-3-3.png]]</center><br> 将fsmp1a-trusted-firmware-2.2.tar.xz解压之后得到fsmp1a-trusted-firmware-2.2文件夹 linux@ubuntu:$ tar -xvf fsmp1a-trusted-firmware-2.2.tar.xz <center>[[Image:21-1-3-4.png|1240px]]</center><br> <li>optee_os源码</li> 将光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\optee】下的fsmp1a-optee_os-3.9.0.tar.xz和Makefile.sdk导入到fs-mp1a目录下optee-os文件夹中 <center>[[Image:21-1-3-5.png]]</center><br> 将fsmp1a-optee_os-3.9.0.tar.xz解压之后得到fsmp1a-optee_os-3.9.0文件夹 linux@ubuntu:$ tar -xvf fsmp1a-optee_os-3.9.0.tar.xz <center>[[Image:21-1-3-6.png]]</center><br> <li>linux源码</li> 光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\linux】下的fsmp1a-linux-5.4.31.tar.xz导入到fs-mp1a目录下linux文件夹中 <center>[[Image:21-1-3-7.png]]</center><br> 将fsmp1a-linux-5.4.31.tar.xz解压之后得到fsmp1a-linux-5.4.31文件夹 linux@ubuntu:$ tar -xvf fsmp1a-linux-5.4.31.tar.xz <center>[[Image:21-1-3-8.png|1240px]]</center><br> <li>Yocto源码</li> 将光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\Yocto】下的fsmp1a-ST-Yocto.tar.xz导入到fs-mp1a目录下 <center>[[Image:21-1-3-9.png]]</center><br> 将fsmp1a-ST-Yocto.tar.xz解压之后得到fsmp1a-ST-Yocto文件夹 linux@ubuntu:$ tar -xvf fsmp1a-ST-Yocto.tar.xz <center>[[Image:21-1-3-10.png]]</center><br> 将光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\Yocto】下的downloads.tar.xz导入到由fsmp1a-ST-Yocto.tar.xz得到的fsmp1a-ST-Yocto文件夹下。 <center>[[Image:21-1-3-11.png]]</center><br> 将downloads.tar.xz解压之后得到downloads文件夹。 linux@ubuntu:$ tar -xvf downloads.tar.xz <center>[[Image:21-1-3-12.png]]</center><br> 至此OpenSTLinux全部源码就导入完成了。导入源码完成后的fs-mp1a目录结构如下。 <center>[[Image:21-1-3-13.png|1140px]]</center><br> == u-boot源码编译 == 1) 导入交叉编译工具链并验证 linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi linux@ubuntu:$ $CC --version [[Image:21-2-1.png]]<br> 2) 将工作目录切换到u-boot-fsmp1a-2020.01源码目录下。 linux@ubuntu:$ cd ${HOME}/fs-mp1a/u-boot/u-boot-fsmp1a-2020.01 [[Image:21-2-2.png]] 3) 导入配置文件。 fsmp1a的u-boot可以支持basic、trusted、optee三种配置。分别对应三种配置文件。<br> [[Image:21-2-3.png]] 这里使用trusted配置来编译 linux@ubuntu:$ make stm32mp15_trusted_defconfig [[Image:21-2-4.png]] 4) 编译源码 linux@ubuntu:$ make DEVICE_TREE=stm32mp157a-fsmp1a all 编译完成后得到u-boot.img文件 [[Image:21-2-5.png]] *使用Makefile.sdk编译 除了传统的编译方式之外还可以通过上层目录下的Makefile.sdk来编译镜像。使用此方法需要将先前编译过的源码清除后再编译,否则会导致编译出错。 linux@ubuntu:$ make distclean *编译basic镜像 linux@ubuntu:$ make -f $PWD/../Makefile.sdk all UBOOT_CONFIGS=stm32mp15_fsmp1a_basic_defconfig,basic,u-boot.img 编译成功后会在上级目录下生成build-basic目录。其中的u-boot-stm32mp157a-fsmp1a-basic.img和u-boot-spl.stm32-stm32mp157a-fsmp1a-basic即为生成的烧写镜像 [[Image:21-2-6.png]] *编译trusted镜像 linux@ubuntu:$ make -f $PWD/../Makefile.sdk all UBOOT_CONFIGS=stm32mp15_fsmp1a_trusted_defconfig,trusted,u-boot.stm32 编译成功后会在上级目录下生成build-trusted目录。其中的u-boot-stm32mp157a-fsmp1a-trusted.stm32即为生成的烧写镜像 [[Image:21-2-7.png]] *编译optee镜像 linux@ubuntu:$ make -f $PWD/../Makefile.sdk all UBOOT_CONFIGS=stm32mp15_fsmp1a_trusted_defconfig,optee,u-boot.stm32 编译成功后会在上级目录下生成build-optee目录。其中的u-boot-stm32mp157a-fsmp1a-optee.stm32即为生成的烧写镜像 [[Image:21-2-8.png]] *编译basic、trusted、optee三种镜像 linux@ubuntu:$ make -f $PWD/../Makefile.sdk all 编译成功后会在上级目录下会同时生成build-basic、build-trusted、build-optee三个目录。 [[Image:21-2-9.png]] == tf-a 源码编译 == 1) 导入交叉编译工具链并验证 linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi linux@ubuntu:$ $CC --version [[Image:21-2-1.png]]<br> 2) 将工作目录切换到fsmp1a-trusted-firmware-2.2源码目录下。 linux@ubuntu:$ cd ${HOME}/fs-mp1a/trusted-firmware/fsmp1a-trusted-firmware-2.2 *编译trusted镜像 linux@ubuntu:$ make -f $PWD/../Makefile.sdk TFA_DEVICETREE=stm32mp157a-fsmp1a TF_A_CONFIG=trusted ELF_DEBUG_ENABLE='1' all 编译成功之后会在上级目录下生成build目录,build目录下的trusted目录中tf-a-stm32mp157a-fsmp1a-trusted.stm32即为烧写镜像。 [[Image:21-3-2.png]]<br> *编译optee镜像 linux@ubuntu:$ make -f $PWD/../Makefile.sdk TFA_DEVICETREE=stm32mp157a-fsmp1a TF_A_CONFIG=optee ELF_DEBUG_ENABLE='1' all 编译成功之后会在上级目录下生成build目录,build目录下的optee目录中tf-a-stm32mp157a-fsmp1a-optee.stm32即为烧写镜像。 [[Image:21-3-3.png]]<br> *编译trusted、optee两种镜像 linux@ubuntu:$ make -f $PWD/../Makefile.sdk all 编译成功后会在上级目录下生成build目录,该目录下同时生成了trusted和optee两个目录。 [[Image:21-3-4.png]]<br> == optee-os 源码编译 == 1) 导入交叉编译工具链并验证 linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi linux@ubuntu:$ $CC --version [[Image:21-2-1.png]] 2) 将工作目录切换到fsmp1a-optee_os-3.9.0源码目录下。 linux@ubuntu:$ cd ${HOME}/fs-mp1a/optee-os/fsmp1a-optee_os-3.9.0 [[Image:21-4-2.png]]<br> 3) 编译源码 linux@ubuntu:$ make -f $PWD/../Makefile.sdk CFG_EMBED_DTB_SOURCE_FILE=stm32mp157a-fsmp1a 编译成功之后会在上级目录下生成build目录其目录下的tee-header_v2-stm32mp157a-fsmp1a-optee.stm32、tee-pageable_v2-stm32mp157a-fsmp1a-optee.stm32、tee-pager_v2-stm32mp157a-fsmp1a-optee.stm32即为烧写镜像。 [[Image:21-4-3.png]]<br> == Linux 源码编译 == 1) 导入交叉编译工具链并验证 linux@ubuntu:$ linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi linux@ubuntu:$ $CC --version [[Image:21-2-1.png]] 2) 将工作目录切换到fsmp1a-linux-5.4.31源码目录下。 linux@ubuntu:$ cd ${HOME}/fs-mp1a/linux/fsmp1a-linux-5.4.31 [[Image:21-5-2.png]] 3) 导入配置文件 linux@ubuntu:$ make stm32_fsmp1a_defconfig [[Image:21-5-3.png]] 如果需要修改配置可以使用如下命令来启动menuconfig linux@ubuntu:$ make menuconfig [[Image:21-5-4.png]] 4) 编译内核镜像 linux@ubuntu:$ make -j4 ARCH=arm uImage vmlinux LOADADDR=0xC2000040 编译成功之后会在arch/arm/boot/目录下生成uImage文件 [[Image:21-5-5.png]] 在源码目录下生成用于调试的vmlinux文件 [[Image:21-5-6.png]] 5) 编译设备树文件 linux@ubuntu:$ make ARCH=arm dtbs 编译成功之后会在arch/arm/boot/dts目录下生成stm32mp157a-fsmp1a.dtb、stm32mp157a-fsmp1a-rgb070.dtb和stm32mp157a-fsmp1a-mipi050.dtb文件 [[Image:21-5-7.png]] stm32mp157a-fsmp1a-rgb070.dtb为rgb屏幕的设备树文件 stm32mp157a-fsmp1a-mipi050.dtb为mipi屏幕的设备树文件 6) 编译内核模块 linux@ubuntu:$ make ARCH=arm modules linux@ubuntu:$ make ARCH=arm INSTALL_MOD_PATH="$PWD/../build/install_artifact" modules_install 编译成功后会在上层目录生成build目录其中的install_artifact 目录中存放的即为导出的驱动模块。 == Yocto系统构建 == 1) 将工作目录切换到fsmp1a-ST-Yocto源码目录下。 linux@ubuntu:$ cd ${HOME}/fs-mp1a/ fsmp1a-ST-Yocto [[Image:21-6-1.png]]<br> 2) 导入编译配置 linux@ubuntu:$ DISTRO=openstlinux-weston MACHINE=fsmp1a source layers/meta-farsight/scripts/envsetup.sh 如下界面提示主机的ubuntu版本与期望的版本不同,这里输入y [[Image:21-6-2.png]]<br> 如果是第一次配置,需要同意一些协议,输入y。 [[Image:21-6-3.png]]<br> 之后按空格键到协议底部 [[Image:21-6-4.png]]<br> 输入y会出现如下界面 [[Image:21-6-5.png]]<br> 3) 编译源码 linux@ubuntu:$ bitbake fs-mp1a-weston 注意:在编译Yocto系统时确保ubuntu主机可以连接互联网 由于OpenSTLinux涉及到的源码较多,因此编译会比较耗时。 编译完成后所生成的镜像文件保存在tmp-glibc/deploy/images/fsmp1a/目录下。 这里生成了fs-mp1a开发板所需的烧写镜像,包括basic、trusted、optee三种。 *basic专有镜像 u-boot-spl.stm32-stm32mp157a-fsmp1a-basic u-boot-stm32mp157a-fsmp1a-basic.img *trusted专有镜像 tf-a-stm32mp157a-fsmp1a-trusted.stm32 u-boot-stm32mp157a-fsmp1a-trusted.stm32 *optee专有镜像 tf-a-stm32mp157a-fsmp1a-optee.stm32 u-boot-stm32mp157a-fsmp1a-optee.stm32 tee-header_v2-stm32mp157a-fsmp1a-optee.stm32 tee-pageable_v2-stm32mp157a-fsmp1a-optee.stm32 tee-pager_v2-stm32mp157a-fsmp1a-optee.stm32 *公用镜像 st-image-bootfs-openstlinux-weston-fsmp1a.ext4 st-image-userfs-openstlinux-weston-fsmp1a.ext4 st-image-vendorfs-openstlinux-weston-fsmp1a.ext4 fs-mp1a-weston-openstlinux-weston-fsmp1a.ext4 *配置文件 flashlayout_fs-mp1a-weston文件夹中存放的是烧写时所使用的配置文件 由上图可以看到配置文件分为sdcard烧写配置和emmc烧写配置。
返回至
源码编译
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
关于我们
联系我们
资料下载
STM32F103开发板
STM32U575开发板
STM32MP157开发板
Hi3861鸿蒙开发板
HaaS EDU开发板
ESP32开发板
i.MX8M Plus开发板
图书下载
嵌入式系列图书
物联网系列图书
Android系列图书
高校教仪
嵌入式实验室产品
物联网实验室产品
人工智能实验室产品
虚拟仿真实验室产品
行业应用实训室产品
虚拟仿真
嵌入式虚拟仿真平台
物联网虚拟仿真平台
人工智能虚拟仿真
友情链接
华清远见研发中心
元宇宙实验中心
华清远见硬件商城
工具
链入页面
相关更改
特殊页面
页面信息