“源码编译”的版本间的差异
(→Yocto系统构建) |
(→Yocto系统构建) |
||
(未显示同一用户的7个中间版本) | |||
第12行: | 第12行: | ||
linux@ubuntu: $ cd ~/FS-MP1A | linux@ubuntu: $ cd ~/FS-MP1A | ||
linux@ubuntu: $ mkdir linux optee-os trusted-firmware u-boot tools | linux@ubuntu: $ mkdir linux optee-os trusted-firmware u-boot tools | ||
− | [[Image:38-1-1-1.png]]<br> | + | <center>[[Image:38-1-1-1.png]]</center><br> |
请务必按照此目录名称建立文件夹,否则会导致后续的OpenSTLinux系统编译错误。<br> | 请务必按照此目录名称建立文件夹,否则会导致后续的OpenSTLinux系统编译错误。<br> | ||
第27行: | 第27行: | ||
解压之后得到sdk目录,进入到sdk文件夹之后内容如下。<br> | 解压之后得到sdk目录,进入到sdk文件夹之后内容如下。<br> | ||
− | [[Image:38-1-2-1.png]] <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安装脚本。 | 执行st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24.sh安装脚本。 | ||
第35行: | 第35行: | ||
运行之后会提示输入安装位置,直接按回车键默认即可:<br> | 运行之后会提示输入安装位置,直接按回车键默认即可:<br> | ||
− | [[Image:38-1-2-2.png]] <br> | + | <center>[[Image:38-1-2-2.png]]</center> <br> |
继续询问是否安装SDK,输入Y,回车<br> | 继续询问是否安装SDK,输入Y,回车<br> | ||
− | [[Image:38-1-2-3.png]] <br> | + | <center>[[Image:38-1-2-3.png]] </center><br> |
默认安装路径安装在opt目录下,这个目录需要有root权限,所以安装时需要使用sudo 安装,过程中需要输入用户的sudo密码(如果当前用户sudo功能已经授权,这个密码就是用户的登录密码),输入密码后开始进行安装。<br> | 默认安装路径安装在opt目录下,这个目录需要有root权限,所以安装时需要使用sudo 安装,过程中需要输入用户的sudo密码(如果当前用户sudo功能已经授权,这个密码就是用户的登录密码),输入密码后开始进行安装。<br> | ||
− | [[Image:38-1-2-4.png]] <br> | + | <center>[[Image:38-1-2-4.png]]</center> <br> |
输入密码后等待安装,安装后显示如下:<br> | 输入密码后等待安装,安装后显示如下:<br> | ||
− | [[Image:38-1-2-5.png]] <br> | + | <center>[[Image:38-1-2-5.png]] </center><br> |
导入sdk<br> | 导入sdk<br> | ||
第57行: | 第57行: | ||
linux@ubuntu: $ $CC --version | linux@ubuntu: $ $CC --version | ||
− | [[Image:38-1-2-6.png]] <br> | + | <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文件夹中 | 将光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\u-boot】下的u-boot-fsmp1a-2020.01.tar.xz和Makefile.sdk导入到fs-mp1a目录下u-boot文件夹中 | ||
− | [[Image:21-1-3-1.png]]<br> | + | <center>[[Image:21-1-3-1.png]]</center><br> |
将u-boot-fsmp1a-2020.01.tar.xz解压之后得到u-boot-fsmp1a-2020.01文件夹 | 将u-boot-fsmp1a-2020.01.tar.xz解压之后得到u-boot-fsmp1a-2020.01文件夹 | ||
第69行: | 第70行: | ||
linux@ubuntu:$ tar -xvf u-boot-fsmp1a-2020.01.tar.xz | linux@ubuntu:$ tar -xvf u-boot-fsmp1a-2020.01.tar.xz | ||
− | [[Image:21-1-3-2.png]]<br> | + | <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文件夹中 | 将光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\tf-a】下的fsmp1a-trusted-firmware-2.2.tar.xz和Makefile.sdk导入到fs-mp1a目录下trusted-firmware文件夹中 | ||
− | [[Image:21-1-3-3.png]]<br> | + | <center>[[Image:21-1-3-3.png]]</center><br> |
将fsmp1a-trusted-firmware-2.2.tar.xz解压之后得到fsmp1a-trusted-firmware-2.2文件夹 | 将fsmp1a-trusted-firmware-2.2.tar.xz解压之后得到fsmp1a-trusted-firmware-2.2文件夹 | ||
第81行: | 第82行: | ||
linux@ubuntu:$ tar -xvf fsmp1a-trusted-firmware-2.2.tar.xz | linux@ubuntu:$ tar -xvf fsmp1a-trusted-firmware-2.2.tar.xz | ||
− | [[Image:21-1-3-4.png]]<br> | + | <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文件夹中 | 将光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\optee】下的fsmp1a-optee_os-3.9.0.tar.xz和Makefile.sdk导入到fs-mp1a目录下optee-os文件夹中 | ||
− | [[Image:21-1-3-5.png]]<br> | + | <center>[[Image:21-1-3-5.png]]</center><br> |
将fsmp1a-optee_os-3.9.0.tar.xz解压之后得到fsmp1a-optee_os-3.9.0文件夹 | 将fsmp1a-optee_os-3.9.0.tar.xz解压之后得到fsmp1a-optee_os-3.9.0文件夹 | ||
第93行: | 第94行: | ||
linux@ubuntu:$ tar -xvf fsmp1a-optee_os-3.9.0.tar.xz | linux@ubuntu:$ tar -xvf fsmp1a-optee_os-3.9.0.tar.xz | ||
− | [[Image:21-1-3-6.png]]<br> | + | <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文件夹中 | 光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\linux】下的fsmp1a-linux-5.4.31.tar.xz导入到fs-mp1a目录下linux文件夹中 | ||
− | [[Image:21-1-3-7.png]]<br> | + | <center>[[Image:21-1-3-7.png]]</center><br> |
将fsmp1a-linux-5.4.31.tar.xz解压之后得到fsmp1a-linux-5.4.31文件夹 | 将fsmp1a-linux-5.4.31.tar.xz解压之后得到fsmp1a-linux-5.4.31文件夹 | ||
第105行: | 第106行: | ||
linux@ubuntu:$ tar -xvf fsmp1a-linux-5.4.31.tar.xz | linux@ubuntu:$ tar -xvf fsmp1a-linux-5.4.31.tar.xz | ||
− | [[Image:21-1-3-8.png]]<br> | + | <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目录下 | 将光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\Yocto】下的fsmp1a-ST-Yocto.tar.xz导入到fs-mp1a目录下 | ||
− | [[Image:21-1-3-9.png]]<br> | + | <center>[[Image:21-1-3-9.png]]</center><br> |
将fsmp1a-ST-Yocto.tar.xz解压之后得到fsmp1a-ST-Yocto文件夹 | 将fsmp1a-ST-Yocto.tar.xz解压之后得到fsmp1a-ST-Yocto文件夹 | ||
第117行: | 第118行: | ||
linux@ubuntu:$ tar -xvf fsmp1a-ST-Yocto.tar.xz | linux@ubuntu:$ tar -xvf fsmp1a-ST-Yocto.tar.xz | ||
− | [[Image:21-1-3-10.png]]<br> | + | <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文件夹下。 | 将光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\Yocto】下的downloads.tar.xz导入到由fsmp1a-ST-Yocto.tar.xz得到的fsmp1a-ST-Yocto文件夹下。 | ||
− | [[Image:21-1-3-11.png]]<br> | + | <center>[[Image:21-1-3-11.png]]</center><br> |
将downloads.tar.xz解压之后得到downloads文件夹。 | 将downloads.tar.xz解压之后得到downloads文件夹。 | ||
第127行: | 第128行: | ||
linux@ubuntu:$ tar -xvf downloads.tar.xz | linux@ubuntu:$ tar -xvf downloads.tar.xz | ||
− | [[Image:21-1-3-12.png]]<br> | + | <center>[[Image:21-1-3-12.png]]</center><br> |
至此OpenSTLinux全部源码就导入完成了。导入源码完成后的fs-mp1a目录结构如下。 | 至此OpenSTLinux全部源码就导入完成了。导入源码完成后的fs-mp1a目录结构如下。 | ||
− | [[Image:21-1-3-13.png]]<br> | + | <center>[[Image:21-1-3-13.png|1140px]]</center><br> |
== u-boot源码编译 == | == u-boot源码编译 == | ||
− | + | <ol> | |
+ | <li>导入交叉编译工具链并验证</li> | ||
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:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi | ||
第140行: | 第142行: | ||
linux@ubuntu:$ $CC --version | linux@ubuntu:$ $CC --version | ||
− | [[Image:21-2-1.png]]<br> | + | <center>[[Image:21-2-1.png]]</center><br> |
− | + | <li>将工作目录切换到u-boot-fsmp1a-2020.01源码目录下。</li> | |
linux@ubuntu:$ cd ${HOME}/fs-mp1a/u-boot/u-boot-fsmp1a-2020.01 | linux@ubuntu:$ cd ${HOME}/fs-mp1a/u-boot/u-boot-fsmp1a-2020.01 | ||
− | [[Image:21-2-2.png]] | + | <center>[[Image:21-2-2.png|1140px]]</center> |
− | + | <li>导入配置文件。</li> | |
fsmp1a的u-boot可以支持basic、trusted、optee三种配置。分别对应三种配置文件。<br> | fsmp1a的u-boot可以支持basic、trusted、optee三种配置。分别对应三种配置文件。<br> | ||
− | [[Image:21-2-3.png]] | + | <center>[[Image:21-2-3.png|1140px]]</center> |
这里使用trusted配置来编译 | 这里使用trusted配置来编译 | ||
第158行: | 第160行: | ||
linux@ubuntu:$ make stm32mp15_trusted_defconfig | linux@ubuntu:$ make stm32mp15_trusted_defconfig | ||
− | [[Image:21-2-4.png]] | + | <center>[[Image:21-2-4.png]]</center> |
− | + | <li>编译源码</li> | |
linux@ubuntu:$ make DEVICE_TREE=stm32mp157a-fsmp1a all | linux@ubuntu:$ make DEVICE_TREE=stm32mp157a-fsmp1a all | ||
第166行: | 第168行: | ||
编译完成后得到u-boot.img文件 | 编译完成后得到u-boot.img文件 | ||
− | [[Image:21-2-5.png]] | + | <center>[[Image:21-2-5.png|1140px]]</center> |
*使用Makefile.sdk编译 | *使用Makefile.sdk编译 | ||
第179行: | 第181行: | ||
编译成功后会在上级目录下生成build-basic目录。其中的u-boot-stm32mp157a-fsmp1a-basic.img和u-boot-spl.stm32-stm32mp157a-fsmp1a-basic即为生成的烧写镜像 | 编译成功后会在上级目录下生成build-basic目录。其中的u-boot-stm32mp157a-fsmp1a-basic.img和u-boot-spl.stm32-stm32mp157a-fsmp1a-basic即为生成的烧写镜像 | ||
− | [[Image:21-2-6.png]] | + | <center>[[Image:21-2-6.png|1140px]]</center> |
*编译trusted镜像 | *编译trusted镜像 | ||
第186行: | 第188行: | ||
编译成功后会在上级目录下生成build-trusted目录。其中的u-boot-stm32mp157a-fsmp1a-trusted.stm32即为生成的烧写镜像 | 编译成功后会在上级目录下生成build-trusted目录。其中的u-boot-stm32mp157a-fsmp1a-trusted.stm32即为生成的烧写镜像 | ||
− | [[Image:21-2-7.png]] | + | <center>[[Image:21-2-7.png|1140px]]</center> |
*编译optee镜像 | *编译optee镜像 | ||
第193行: | 第195行: | ||
编译成功后会在上级目录下生成build-optee目录。其中的u-boot-stm32mp157a-fsmp1a-optee.stm32即为生成的烧写镜像 | 编译成功后会在上级目录下生成build-optee目录。其中的u-boot-stm32mp157a-fsmp1a-optee.stm32即为生成的烧写镜像 | ||
− | [[Image:21-2-8.png]] | + | <center>[[Image:21-2-8.png|1140px]]</center> |
*编译basic、trusted、optee三种镜像 | *编译basic、trusted、optee三种镜像 | ||
第201行: | 第203行: | ||
编译成功后会在上级目录下会同时生成build-basic、build-trusted、build-optee三个目录。 | 编译成功后会在上级目录下会同时生成build-basic、build-trusted、build-optee三个目录。 | ||
− | [[Image:21-2-9.png]] | + | <center>[[Image:21-2-9.png]]</center> |
+ | </ol> | ||
== tf-a 源码编译 == | == tf-a 源码编译 == | ||
− | + | <ol> | |
+ | <li>导入交叉编译工具链并验证</li> | ||
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:$ 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 | linux@ubuntu:$ $CC --version | ||
− | [[Image:21-2-1.png]]<br> | + | <center>[[Image:21-2-1.png]]</center><br> |
− | + | <li>将工作目录切换到fsmp1a-trusted-firmware-2.2源码目录下。</li> | |
linux@ubuntu:$ cd ${HOME}/fs-mp1a/trusted-firmware/fsmp1a-trusted-firmware-2.2 | linux@ubuntu:$ cd ${HOME}/fs-mp1a/trusted-firmware/fsmp1a-trusted-firmware-2.2 | ||
第220行: | 第224行: | ||
编译成功之后会在上级目录下生成build目录,build目录下的trusted目录中tf-a-stm32mp157a-fsmp1a-trusted.stm32即为烧写镜像。 | 编译成功之后会在上级目录下生成build目录,build目录下的trusted目录中tf-a-stm32mp157a-fsmp1a-trusted.stm32即为烧写镜像。 | ||
− | [[Image:21-3-2.png]]<br> | + | <center>[[Image:21-3-2.png|1140px]]</center><br> |
*编译optee镜像 | *编译optee镜像 | ||
第228行: | 第232行: | ||
编译成功之后会在上级目录下生成build目录,build目录下的optee目录中tf-a-stm32mp157a-fsmp1a-optee.stm32即为烧写镜像。 | 编译成功之后会在上级目录下生成build目录,build目录下的optee目录中tf-a-stm32mp157a-fsmp1a-optee.stm32即为烧写镜像。 | ||
− | [[Image:21-3-3.png]]<br> | + | <center>[[Image:21-3-3.png|1140px]]</center><br> |
*编译trusted、optee两种镜像 | *编译trusted、optee两种镜像 | ||
第236行: | 第240行: | ||
编译成功后会在上级目录下生成build目录,该目录下同时生成了trusted和optee两个目录。 | 编译成功后会在上级目录下生成build目录,该目录下同时生成了trusted和optee两个目录。 | ||
− | [[Image:21-3-4.png]]<br> | + | <center>[[Image:21-3-4.png|1040px]]</center><br> |
+ | </ol> | ||
== optee-os 源码编译 == | == optee-os 源码编译 == | ||
− | + | <ol> | |
+ | <li>导入交叉编译工具链并验证</li> | ||
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:$ 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 | linux@ubuntu:$ $CC --version | ||
− | [[Image:21-2-1.png]] | + | <center>[[Image:21-2-1.png]]</center> |
− | + | <li>将工作目录切换到fsmp1a-optee_os-3.9.0源码目录下。</li> | |
linux@ubuntu:$ cd ${HOME}/fs-mp1a/optee-os/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> | + | <center>[[Image:21-4-2.png|1140px]]</center><br> |
− | + | <li>编译源码</li> | |
linux@ubuntu:$ make -f $PWD/../Makefile.sdk CFG_EMBED_DTB_SOURCE_FILE=stm32mp157a-fsmp1a | linux@ubuntu:$ make -f $PWD/../Makefile.sdk CFG_EMBED_DTB_SOURCE_FILE=stm32mp157a-fsmp1a | ||
第258行: | 第264行: | ||
编译成功之后会在上级目录下生成build目录其目录下的tee-header_v2-stm32mp157a-fsmp1a-optee.stm32、tee-pageable_v2-stm32mp157a-fsmp1a-optee.stm32、tee-pager_v2-stm32mp157a-fsmp1a-optee.stm32即为烧写镜像。 | 编译成功之后会在上级目录下生成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> | + | <center>[[Image:21-4-3.png]]</center><br> |
+ | </ol> | ||
== Linux 源码编译 == | == Linux 源码编译 == | ||
− | + | <ol> | |
+ | <li>导入交叉编译工具链并验证</li> | ||
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:$ 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 | linux@ubuntu:$ $CC --version | ||
− | [[Image:21-2-1.png]] | + | <center>[[Image:21-2-1.png]]</center> |
− | + | <li>将工作目录切换到fsmp1a-linux-5.4.31源码目录下。</li> | |
linux@ubuntu:$ cd ${HOME}/fs-mp1a/linux/fsmp1a-linux-5.4.31 | linux@ubuntu:$ cd ${HOME}/fs-mp1a/linux/fsmp1a-linux-5.4.31 | ||
第274行: | 第282行: | ||
[[Image:21-5-2.png]] | [[Image:21-5-2.png]] | ||
− | + | <li>导入配置文件</li> | |
linux@ubuntu:$ make stm32_fsmp1a_defconfig | linux@ubuntu:$ make stm32_fsmp1a_defconfig | ||
− | [[Image:21-5-3.png]] | + | <center>[[Image:21-5-3.png]]</center> |
如果需要修改配置可以使用如下命令来启动menuconfig | 如果需要修改配置可以使用如下命令来启动menuconfig | ||
第284行: | 第292行: | ||
linux@ubuntu:$ make menuconfig | linux@ubuntu:$ make menuconfig | ||
− | [[Image:21-5-4.png]] | + | <center>[[Image:21-5-4.png]]</center> |
− | + | <li>编译内核镜像</li> | |
linux@ubuntu:$ make -j4 ARCH=arm uImage vmlinux LOADADDR=0xC2000040 | linux@ubuntu:$ make -j4 ARCH=arm uImage vmlinux LOADADDR=0xC2000040 | ||
第292行: | 第300行: | ||
编译成功之后会在arch/arm/boot/目录下生成uImage文件 | 编译成功之后会在arch/arm/boot/目录下生成uImage文件 | ||
− | [[Image:21-5-5.png]] | + | <center>[[Image:21-5-5.png]]</center> |
在源码目录下生成用于调试的vmlinux文件 | 在源码目录下生成用于调试的vmlinux文件 | ||
− | [[Image:21-5-6.png]] | + | <center>[[Image:21-5-6.png]]</center> |
− | + | <li>编译设备树文件</li> | |
linux@ubuntu:$ make ARCH=arm dtbs | linux@ubuntu:$ make ARCH=arm dtbs | ||
第304行: | 第312行: | ||
编译成功之后会在arch/arm/boot/dts目录下生成stm32mp157a-fsmp1a.dtb、stm32mp157a-fsmp1a-rgb070.dtb和stm32mp157a-fsmp1a-mipi050.dtb文件 | 编译成功之后会在arch/arm/boot/dts目录下生成stm32mp157a-fsmp1a.dtb、stm32mp157a-fsmp1a-rgb070.dtb和stm32mp157a-fsmp1a-mipi050.dtb文件 | ||
− | [[Image:21-5-7.png]] | + | <center>[[Image:21-5-7.png]]</center> |
stm32mp157a-fsmp1a-rgb070.dtb为rgb屏幕的设备树文件 | stm32mp157a-fsmp1a-rgb070.dtb为rgb屏幕的设备树文件 | ||
第310行: | 第318行: | ||
stm32mp157a-fsmp1a-mipi050.dtb为mipi屏幕的设备树文件 | stm32mp157a-fsmp1a-mipi050.dtb为mipi屏幕的设备树文件 | ||
− | + | <li>编译内核模块</li> | |
linux@ubuntu:$ make ARCH=arm modules | linux@ubuntu:$ make ARCH=arm modules | ||
第317行: | 第325行: | ||
编译成功后会在上层目录生成build目录其中的install_artifact 目录中存放的即为导出的驱动模块。 | 编译成功后会在上层目录生成build目录其中的install_artifact 目录中存放的即为导出的驱动模块。 | ||
+ | |||
+ | </ol> | ||
== Yocto系统构建 == | == Yocto系统构建 == | ||
− | + | <ol> | |
+ | <li>将工作目录切换到fsmp1a-ST-Yocto源码目录下。</li> | ||
linux@ubuntu:$ cd ${HOME}/fs-mp1a/ fsmp1a-ST-Yocto | linux@ubuntu:$ cd ${HOME}/fs-mp1a/ fsmp1a-ST-Yocto | ||
− | [[Image:21-6-1.png]]<br> | + | <center>[[Image:21-6-1.png]]</center><br> |
− | + | <li>导入编译配置</li> | |
linux@ubuntu:$ DISTRO=openstlinux-weston MACHINE=fsmp1a source layers/meta-farsight/scripts/envsetup.sh | linux@ubuntu:$ DISTRO=openstlinux-weston MACHINE=fsmp1a source layers/meta-farsight/scripts/envsetup.sh | ||
第331行: | 第342行: | ||
如下界面提示主机的ubuntu版本与期望的版本不同,这里输入y | 如下界面提示主机的ubuntu版本与期望的版本不同,这里输入y | ||
− | [[Image:21-6-2.png]]<br> | + | <center>[[Image:21-6-2.png|1140px]]</center><br> |
如果是第一次配置,需要同意一些协议,输入y。 | 如果是第一次配置,需要同意一些协议,输入y。 | ||
− | [[Image:21-6-3.png]]<br> | + | <center>[[Image:21-6-3.png|1140px]]</center><br> |
之后按空格键到协议底部 | 之后按空格键到协议底部 | ||
− | [[Image:21-6-4.png]]<br> | + | <center>[[Image:21-6-4.png]]</center><br> |
输入y会出现如下界面 | 输入y会出现如下界面 | ||
− | [[Image:21-6-5.png]]<br> | + | <center>[[Image:21-6-5.png|1140px]]</center><br> |
− | + | <li>编译源码</li> | |
linux@ubuntu:$ bitbake fs-mp1a-weston | linux@ubuntu:$ bitbake fs-mp1a-weston | ||
第386行: | 第397行: | ||
由上图可以看到配置文件分为sdcard烧写配置和emmc烧写配置。 | 由上图可以看到配置文件分为sdcard烧写配置和emmc烧写配置。 | ||
+ | |||
+ | |||
+ | </ol> |
2021年3月24日 (三) 10:15的最新版本
目录
源码编译
编译环境配置
源码目录结构
由于OpenSTLinux所涉及到的源码较多,且有路径的依赖。所以请按照本文的说明建立源码文件夹。
在用户home目录下建立FS-MP1A文件夹。
linux@ubuntu: $ cd ~ linux@ubuntu: $ mkdir FS-MP1A
将工作目录切换到fs-mp1a目录下,建立linux、optee-os、trusted-firmware、u-boot、tools文件夹
linux@ubuntu: $ cd ~/FS-MP1A linux@ubuntu: $ mkdir linux optee-os trusted-firmware u-boot tools
请务必按照此目录名称建立文件夹,否则会导致后续的OpenSTLinux系统编译错误。
SDK工具链安装
OpenSTLinux SDK是Yocto SDK定制发行版的软件开发套件,它提供了独立的交叉开发工具链和针对特定镜像中所使用到的特定链接库。
开发资料光盘中提供的SDK是基于FS-MP1A开发板的定制交叉编译工具链,该工具链可用于FS-MP1A开发板中所有项目的编译与调试。
将资料光盘下【华清远见-FS_MP1A开发资料\01-工具软件】的en.SDK-x86_64-stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24.tar.xz复制到ubuntu主机中,可以采用共享文件夹的方式也可以使用tfp方式将文件存入FS-MP1A源码目录下的tools文件夹下进行解压。
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文件夹之后内容如下。
执行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
运行之后会提示输入安装位置,直接按回车键默认即可:
继续询问是否安装SDK,输入Y,回车
默认安装路径安装在opt目录下,这个目录需要有root权限,所以安装时需要使用sudo 安装,过程中需要输入用户的sudo密码(如果当前用户sudo功能已经授权,这个密码就是用户的登录密码),输入密码后开始进行安装。
输入密码后等待安装,安装后显示如下:
导入sdk
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
源码导入
- Bootloader源码
- trusted-firmware源码
- optee_os源码
- linux源码
- Yocto源码
- 导入交叉编译工具链并验证
- 将工作目录切换到u-boot-fsmp1a-2020.01源码目录下。
- 导入配置文件。
- 编译源码
- 使用Makefile.sdk编译
- 编译basic镜像
- 编译trusted镜像
- 编译optee镜像
- 编译basic、trusted、optee三种镜像
- 导入交叉编译工具链并验证
- 将工作目录切换到fsmp1a-trusted-firmware-2.2源码目录下。
- 编译trusted镜像
- 编译optee镜像
- 编译trusted、optee两种镜像
- 导入交叉编译工具链并验证
- 将工作目录切换到fsmp1a-optee_os-3.9.0源码目录下。
- 编译源码
- 导入交叉编译工具链并验证
- 将工作目录切换到fsmp1a-linux-5.4.31源码目录下。
- 导入配置文件
- 编译内核镜像
- 编译设备树文件
- 编译内核模块
- 将工作目录切换到fsmp1a-ST-Yocto源码目录下。
- 导入编译配置
- 编译源码
- basic专有镜像
- trusted专有镜像
- optee专有镜像
- 公用镜像
- 配置文件
将光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\u-boot】下的u-boot-fsmp1a-2020.01.tar.xz和Makefile.sdk导入到fs-mp1a目录下u-boot文件夹中
将u-boot-fsmp1a-2020.01.tar.xz解压之后得到u-boot-fsmp1a-2020.01文件夹
linux@ubuntu:$ tar -xvf u-boot-fsmp1a-2020.01.tar.xz
将光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\tf-a】下的fsmp1a-trusted-firmware-2.2.tar.xz和Makefile.sdk导入到fs-mp1a目录下trusted-firmware文件夹中
将fsmp1a-trusted-firmware-2.2.tar.xz解压之后得到fsmp1a-trusted-firmware-2.2文件夹
linux@ubuntu:$ tar -xvf fsmp1a-trusted-firmware-2.2.tar.xz
将光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\optee】下的fsmp1a-optee_os-3.9.0.tar.xz和Makefile.sdk导入到fs-mp1a目录下optee-os文件夹中
将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
光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\linux】下的fsmp1a-linux-5.4.31.tar.xz导入到fs-mp1a目录下linux文件夹中
将fsmp1a-linux-5.4.31.tar.xz解压之后得到fsmp1a-linux-5.4.31文件夹
linux@ubuntu:$ tar -xvf fsmp1a-linux-5.4.31.tar.xz
将光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\Yocto】下的fsmp1a-ST-Yocto.tar.xz导入到fs-mp1a目录下
将fsmp1a-ST-Yocto.tar.xz解压之后得到fsmp1a-ST-Yocto文件夹
linux@ubuntu:$ tar -xvf fsmp1a-ST-Yocto.tar.xz
将光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\Yocto】下的downloads.tar.xz导入到由fsmp1a-ST-Yocto.tar.xz得到的fsmp1a-ST-Yocto文件夹下。
将downloads.tar.xz解压之后得到downloads文件夹。
linux@ubuntu:$ tar -xvf downloads.tar.xz
至此OpenSTLinux全部源码就导入完成了。导入源码完成后的fs-mp1a目录结构如下。
u-boot源码编译
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
linux@ubuntu:$ cd ${HOME}/fs-mp1a/u-boot/u-boot-fsmp1a-2020.01
fsmp1a的u-boot可以支持basic、trusted、optee三种配置。分别对应三种配置文件。
这里使用trusted配置来编译
linux@ubuntu:$ make stm32mp15_trusted_defconfig
linux@ubuntu:$ make DEVICE_TREE=stm32mp157a-fsmp1a all
编译完成后得到u-boot.img文件
除了传统的编译方式之外还可以通过上层目录下的Makefile.sdk来编译镜像。使用此方法需要将先前编译过的源码清除后再编译,否则会导致编译出错。
linux@ubuntu:$ make distclean
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即为生成的烧写镜像
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即为生成的烧写镜像
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即为生成的烧写镜像
linux@ubuntu:$ make -f $PWD/../Makefile.sdk all
编译成功后会在上级目录下会同时生成build-basic、build-trusted、build-optee三个目录。
tf-a 源码编译
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
linux@ubuntu:$ cd ${HOME}/fs-mp1a/trusted-firmware/fsmp1a-trusted-firmware-2.2
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即为烧写镜像。
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即为烧写镜像。
linux@ubuntu:$ make -f $PWD/../Makefile.sdk all
编译成功后会在上级目录下生成build目录,该目录下同时生成了trusted和optee两个目录。
optee-os 源码编译
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
linux@ubuntu:$ cd ${HOME}/fs-mp1a/optee-os/fsmp1a-optee_os-3.9.0
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即为烧写镜像。
Linux 源码编译
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
linux@ubuntu:$ cd ${HOME}/fs-mp1a/linux/fsmp1a-linux-5.4.31
linux@ubuntu:$ make stm32_fsmp1a_defconfig
如果需要修改配置可以使用如下命令来启动menuconfig
linux@ubuntu:$ make menuconfig
linux@ubuntu:$ make -j4 ARCH=arm uImage vmlinux LOADADDR=0xC2000040
编译成功之后会在arch/arm/boot/目录下生成uImage文件
在源码目录下生成用于调试的vmlinux文件
linux@ubuntu:$ make ARCH=arm dtbs
编译成功之后会在arch/arm/boot/dts目录下生成stm32mp157a-fsmp1a.dtb、stm32mp157a-fsmp1a-rgb070.dtb和stm32mp157a-fsmp1a-mipi050.dtb文件
stm32mp157a-fsmp1a-rgb070.dtb为rgb屏幕的设备树文件
stm32mp157a-fsmp1a-mipi050.dtb为mipi屏幕的设备树文件
linux@ubuntu:$ make ARCH=arm modules
linux@ubuntu:$ make ARCH=arm INSTALL_MOD_PATH="$PWD/../build/install_artifact" modules_install
编译成功后会在上层目录生成build目录其中的install_artifact 目录中存放的即为导出的驱动模块。
Yocto系统构建
linux@ubuntu:$ cd ${HOME}/fs-mp1a/ fsmp1a-ST-Yocto
linux@ubuntu:$ DISTRO=openstlinux-weston MACHINE=fsmp1a source layers/meta-farsight/scripts/envsetup.sh
如下界面提示主机的ubuntu版本与期望的版本不同,这里输入y
如果是第一次配置,需要同意一些协议,输入y。
之后按空格键到协议底部
输入y会出现如下界面
linux@ubuntu:$ bitbake fs-mp1a-weston
注意:在编译Yocto系统时确保ubuntu主机可以连接互联网
由于OpenSTLinux涉及到的源码较多,因此编译会比较耗时。
编译完成后所生成的镜像文件保存在tmp-glibc/deploy/images/fsmp1a/目录下。
这里生成了fs-mp1a开发板所需的烧写镜像,包括basic、trusted、optee三种。
u-boot-spl.stm32-stm32mp157a-fsmp1a-basic u-boot-stm32mp157a-fsmp1a-basic.img
tf-a-stm32mp157a-fsmp1a-trusted.stm32 u-boot-stm32mp157a-fsmp1a-trusted.stm32
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烧写配置。