Linux系统移植开发篇1:系统移植前说明及源码编译

发布者:SereneSoul55最新更新时间:2023-10-30 来源: elecfans关键字:Linux  系统移植 手机看文章 扫描二维码
随时随地手机看文章

本文章为《STM32MP157 Linux系统移植开发篇》系列中的一篇,笔者使用的开发平台为华清远见FS-MP1A开发板(STM32MP157开发板)。stm32mp157是ARM双核,2个A7核,1个M4核,A7核上可以跑Linux操作系统,M4核上可以跑FreeRTOS、RT-Thread等实时操作系统,STM32MP157开发板所以既可以学嵌入式linux,也可以学stm32单片机


针对FS-MP1A开发板,除了Linux系统移植篇外,还包括其他多系列教程,包括Cortex-A7开发篇、Cortex-M4开发篇、扩展板驱动移植篇、Linux应用开发篇、FreeRTOS系统移植篇、Linux驱动开发篇、硬件设计篇、人工智能机器视觉篇、Qt应用编程篇、Qt综合项目实战篇等。
————————————————

系统移植前说明

关于命令行提示符:

在实验步骤中会涉及到执行命令的操作,为区分操作是在Ubuntu上完成还是在开发板上完成,不同操作会有不同的提示符:

Ubuntu操作时命令行提示符为:linux@ubuntu:$

开发板Linux系统下操作时命令行提示符为:root@fsmp1a:$

开发板u-boot期间操作是命令行提示符为:STM32MP>

注意:由于部分操作需要进入特定目录下完成,导致命令行提示符较长如:

linux@ubuntu:~/FS-MP1A/stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sources/arm-ostl-linux-gnueabi/u-boot-stm32mp-2020.01-r0/u-boot-stm32mp-2020.01$

过长的命令行提示符不便于文档编写,所以本文中所有命令行提示符均忽略了当前工作目录的显示,命令行提示符不代表当前目录,具体当前操作是在哪个目录下完成,请结合文档上下文确定。

 

1. 源码编译

1.1 源码目录结构

1.1.1 编译环境配置

由于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系统编译错误。

 

1.1.2 SDK工具链安装

  1.  

 

OpenSTLinux SDK是Yocto SDK定制发行版的软件开发套件,它提供了独立的交叉开发工具链和针对特定镜像中所使用到的特定链接库。

开发资料光盘中提供的SDK是基于FS-MP1A开发板的定制交叉编译工具链,该工具链可用于FS-MP1A开发板中所有项目的编译与调试。

将资料光盘下【华清远见-FS-MP1A开发资料1-工具软件】的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

 

1.1.3 源码导入

  1.  

 

Bootloader源码

 

将光盘资料中【华清远见-FS-MP1A开发资料2-程序源码5-预装系统源码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

 

     trusted-firmware源码

 

将光盘资料中【华清远见-FS-MP1A开发资料2-程序源码5-预装系统源码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

 

optee_os源码

将光盘资料中【华清远见-FS-MP1A开发资料2-程序源码5-预装系统源码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

 

 

linux源码

盘资料中【华清远见-FS-MP1A开发资料2-程序源码5-预装系统源码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

 

Yocto源码

盘资料中【华清远见-FS-MP1A开发资料2-程序源码5-预装系统源码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开发资料2-程序源码5-预装系统源码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目录结构如下。

 

 

1.2 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

 

 

将工作目录切换到u-boot-fsmp1a-2020.01源码目录下。

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编译

除了传统的编译方式之外还可以通过上层目录下的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即为生成的烧写镜像

 

编译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即为生成的烧写镜像

 

 

编译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即为生成的烧写镜像

 

 

编译basic、trusted、optee三种镜像

linux@ubuntu:$ make -f $PWD/../Makefile.sdk all

编译成功后会在上级目录下会同时生成build-basic、build-trusted、build-optee三个目录。

 

 

 

1.3 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

 

 

将工作目录切换到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即为烧写镜像。

 

 

编译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即为烧写镜像。

 

 

编译trusted、optee两种镜像

linux@ubuntu:$ make -f $PWD/../Makefile.sdk all

编译成功后会在上级目录下生成build目录,该目录下同时生成了trusted和optee两个目录。

 

 

1.4 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

 

 

将工作目录切换到fsmp1a-optee_os-3.9.0源码目录下。

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即为烧写镜像。

 

 

 

1.5 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

 

 

将工作目录切换到fsmp1a-linux-5.4.31源码目录下。

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目录中存放的即为导出的驱动模块。

 

1.6 Yocto构建系统

将工作目录切换到fsmp1a-ST-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三种。

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烧写配置。


关键字:Linux  系统移植 引用地址:Linux系统移植开发篇1:系统移植前说明及源码编译

上一篇:一种基于STM32的力反馈型康复机器人控制系统设计
下一篇:存储器系统的非对齐访问

推荐阅读最新更新时间:2024-11-17 06:53

嵌入式Linux ARM汇编(三)——ARM汇编指令(四)
十二、ARM伪指令 ARM伪指令不是ARM指令集中的指令,只是为了编程方便编译器定义了伪指令,使用时可以像其他ARM指令一样使用,但在编译时这些伪指令将被等效的ARM指令代替。 1、符号定义伪指令 A、全局变量定义 GBLA(GBLL/GBLS) 全局变量名 GBLA 、GBLL 和GBLS 伪指令用于定义一个ARM 程序中的全局变量,并将其初始化。其中: GBLA 伪指令用于定义一个全局的数字变量,并初始化为0 ; GBLL 伪指令用于定义一个全局的逻辑变量,并初始化为F(假); GBLS 伪指令用于定义一个全局的字符串变量,并初始化为空; 由于以上三条伪指令用于定义全局变量,因此在整个程序范围内变量
[单片机]
基于Arm-Linux的嵌入式智能家居控制系统的设计
嵌入式系统以其占用资源少、专用性强、功耗低的特点使其广泛应用在移动通信、工业生产、安全监控等领域。针对人们对高效、舒适、安全、便利、环保的居住环境的要求,提出了以Arm-Linux为平台的智能家居控制系统的设计。 1 智能家居控制器的总体设计 Arm-Linux嵌入式系统以其在性能、体积及功耗等方面的优势在智能家居领域得到越来越广泛的应用。系统采用基于ARM的嵌入式linux方案,系统分为五层分别为硬件层,系统引导层,系统层,应用支撑层及应用层。如图1所示应用层在Qtopia图形系统、SQLite数据库等的支撑下完成了电话报警、照明控制、安防控制、门禁控制以及网络浏览等应用。 2 系统硬件的设计 CPU处理器选用
[单片机]
基于Arm-<font color='red'>Linux</font>的嵌入式智能家居控制系统的设计
arm驱动linux内核中断编程
第一部分获取中断(开启硬件中断) 一、中断的申请注销: 1)中断的申请 int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id) 2)中断的注销 void free_irq(unsigned int irq, void *dev_id) 3)中断处理函数 static irqreturn_t irq_handle(int irq, void *dev__id); 参数:irq:表示中断号,这个参数还保留由于历史遗留问题,往后可能越来越没用了。由于
[单片机]
全志推出基于玄铁C906的Linux SBC,售价12美元
本文来源CNX-Software,作者Jean-Luc Aufranc 阿里巴巴在2019年推出了玄铁910 RISC-V内核(又名XT910),具有强大功能,最多支持16个内核。但在2020年的更新显示,该公司计划开发一个完整的RISC-V核心系列产品,用于从低功耗微控制器到服务器SoC的广泛应用。 当时,我只是假设公司计划保留他们的核心,但时间证明我错了,因为阿里巴巴负责开发RISC-V核心的子公司平头哥开始与全志科技合作开发开源处理器,很快就会发布低成本的支持Linux的RISC-V SBC(单板电脑)。 据我所知,公司与全志科技签订了保密协议,但根据现阶段可用的公开信息,售价12.5美元的矽速科技(Sipee
[嵌入式]
全志推出基于玄铁C906的<font color='red'>Linux</font> SBC,售价12美元
嵌入式linux内核制作方法
制作嵌入式平台的linux内核的方法和制作PC(x86)的平台的linux内核基本一致,下面介绍如何制作用于mini2440开发板的内核。 1. 清除原有的配置和中间文件(在linux内核目录下执行命令,本文以linux-2.6.29为例) #pwd /home/guoqian/4-3-1/linux-2.6.29 #make distclean 2. 配置内核 #cp mini2440_defconfig ../../../.config 将内核文件下的/arch/arm/configs配置文件mini2440_defconfig复制到内核文件的根目录下,并重命名为隐藏文件.config。注意,所有的配
[单片机]
基于FIE8100 SoC平台实现Linux软件开发套件的设计
引言 智原科技的FIE8100 SoC平台是一种低功耗、便携式视频相关应用开发SoC平台,也可用于基于FA526 CPU的SoC设计验证。 基于FA526的Linux软件开发套件,开发人员可将Linux一2.4.19软件环境在FIE8100平台上安装实现,并完成对平台上所有IP的驱动程序安装和对FA526的内部调试。 FA526介绍 FA526是一颗有着广泛用途的32位RISC处理器。它包括一个同步CPU内核(core)、独立的指令/数据缓存(cache)、独立的指令/数据暂存器(scratchpads)、一个写缓存(write buffer)、一个内存管理单元(memory management unit)和JTAG在线
[单片机]
基于FIE8100 SoC平台实现<font color='red'>Linux</font>软件开发套件的设计
ZigBee 协议移植(ARM+Linux
ZigBee协议栈移植步骤大致如下:1) 详细了解自定义硬件平台与Microchip ZigBee协议栈支持硬件之间的异同。对用户自定义的硬件平台和Microchip ZigBee协议栈支持的硬件平台进行分析比较,了解它们的处理器在I/O端口分配,内存组成及使用、中断处理、堆栈操作等各个方面的异同。另外还要分析两者所采用的ZigBee无线收发器之间的异同,了解它们的操作时序、控制命令、各寄存器的作用等。 2) 详细分析Microchip ZigBee协议栈。对硬件有了清楚的认识之后,需要对协议栈进行详细分析,了解协议栈的组成结构、各部分功能及实现方法等,并懂得针对硬件需要对协议栈做哪些修改,目前已经有哪些功能
[单片机]
基于Linux内核的透明代理配置方案
先解释为什么要配置透明代理。   其实只配置squid就可以实现代理功能,但是对于客户端,就必须在浏览器中设置proxy server,对于其他的工具,比如FlashGet, CuteFTP等等,也必须一一设置,这一点非常麻烦。但是如果设置了透明代理,那么在客户端只需要在网络配置中设置一个网关就可以了,其他的任何程序都不用另行设置。这是设置透明代理最大的诱惑,当然这只是对我而言,其实iptables有更强大的防火墙功能,这才是它最大的用处。但是,此次配置不涉及防火墙,如果有兴趣的请看上贴的iptables howto。   1。假设我们的linux内已经将防火墙支持选项编译进去,这一点可以进入kernel source目录,用
[工业控制]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved