• 全部
  • 系统维护与使用
  • 应用程序开发
  • 内核源代码
  • 驱动程序开发
  • CPU和硬件区
  • UNIX文化
  • Solaris
  • Power Linux
  • 问答

Linux系统移植篇8:STM32MP1微处理器之Linux内核配置及编译

华清远见IT开放实验室 2021-09-10 09:10:16

本文章为《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综合项目实战篇等。欢迎关注,更多stm32mp157开发教程及视频,可加技术交流Q群459754978,感谢关注。

关于FS-MP1A开发板:
手机淘宝分享码:复制本行文字打开手淘₤T4FPXn3YYJ2₤
链接:https://item.taobao.com/item.htm?id=622457259672
 

Linux内核配置及编译

解压内核

建立源码目录

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

Linux系统移植篇8:STM32MP1微处理器之Linux内核配置及编译

 

该目录下以patch结尾的文件为ST官方提供的补丁文件,linux-5.4.31.tar.xz为标准linux源码包。

解压标准内核源码包

linux@ubuntu:$ tar -xvf linux-5.4.31.tar.xz

Linux系统移植篇8:STM32MP1微处理器之Linux内核配置及编译

 

进入内核源码目录下

linux@ubuntu:$ cd linux-5.4.31

Linux系统移植篇8:STM32MP1微处理器之Linux内核配置及编译

 

添加STMicroelectronics官方补丁

解压linux内核源码后得到的是Linux社区的标准内核源码,接下来需要将ST官方提供的源码补丁添加到标准内核中。

linux@ubuntu:$ for p in `ls -1 ../*.patch`; do patch -p1 < $p; done

该命令会将上层目录下所有的patch补丁文件应用到当前的内核中。

生成标准板配置文件

生成multi_v7_defconfig默认配置

linux@ubuntu:$ make ARCH=arm multi_v7_defconfig "fragment*.config"

在默认multi_v7_defconfig配置中加入ST官方提供的fragment config

linux@ubuntu:$ for f in `ls -1 ../fragment*.config`; do scripts/kconfig/merge_config.sh -m -r .config $f; done

linux@ubuntu:$ yes '' | make ARCH=arm oldconfig

生成自己的默认配置文件

linux@ubuntu:$ cp .config arch/arm/configs/stm32_fsmp1a_defconfig

取消git中的SHA1

linux@ubuntu:$ echo "" > .scmversion

配置内核

导入交叉编译工具链(如果还未安装SDK可参考《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

Linux系统移植篇8:STM32MP1微处理器之Linux内核配置及编译

 

在编译前如果需要编译额外的功能或者驱动,可以使用meunconfig来对内核进行配置。

linux@ubuntu:$ make menuconfig

Linux系统移植篇8:STM32MP1微处理器之Linux内核配置及编译

 

可以在如上菜单中对内核进行详细的配置。

编译内核

linux@ubuntu:$ make -j4 ARCH=arm uImage vmlinux LOADADDR=0xC2000040

Linux系统移植篇8:STM32MP1微处理器之Linux内核配置及编译

 

编译后在内核源码目录下,能够在生成一个vmlinux文件,该文件是没有经过压缩的内核镜像,这个镜像导出了所有的内核符号可以用作仿真调试。

Linux系统移植篇8:STM32MP1微处理器之Linux内核配置及编译

 

此外在arch/arm/boot目录下还生成了一个uImage文件,这就是经过压缩的内核镜像。可以用作系统启动。

Linux系统移植篇8:STM32MP1微处理器之Linux内核配置及编译

 

编译内核模块

linux@ubuntu:$ make ARCH=arm modules

该操作会将内核中配置为模块的源码进行编译,最终得到ko文件。

Linux系统移植篇8:STM32MP1微处理器之Linux内核配置及编译

 

生成设备树

以参考板DK1设备树文件stm32mp15xx-dkx.dtsi和stm32mp157a-dk1.dts为参考,增加stm32mp15xx-fsmp1x.dtsi和stm32mp157a-fsmp1a.dts:

对stm32mp15xx-fsmp1x.dtsi内容进行整理,去掉没有被使用的节点信息和明显与FS-MP1A的硬件没有关系的节点信息。下文内容是删掉了所有暂不使用的节点信息,整理出一个相对简单的设备树文件,确保内核可以正常启动。后续各个外设移植时会陆续增加文件的相关内容。

在arch/arm/boot/dts/ 目录下新建

stm32mp15xx-fsmp1x.dtsi:

Linux系统移植篇8:STM32MP1微处理器之Linux内核配置及编译

 

Linux系统移植篇8:STM32MP1微处理器之Linux内核配置及编译

 

Linux系统移植篇8:STM32MP1微处理器之Linux内核配置及编译

 

Linux系统移植篇8:STM32MP1微处理器之Linux内核配置及编译

 

Linux系统移植篇8:STM32MP1微处理器之Linux内核配置及编译

 

Linux系统移植篇8:STM32MP1微处理器之Linux内核配置及编译

 

Linux系统移植篇8:STM32MP1微处理器之Linux内核配置及编译

 

将编译好的设备树文件与内核的uImage文件,复制到ubuntu主机的/tftpboot文件夹下,当使用tftp方式下载内核与设备树文件时会用到。

linux@ubuntu:$ cp arch/arm/boot/uImage /tftpboot/

linux@ubuntu:$ cp arch/arm/boot/dts/stm32mp157a-fsmp1a.dtb /tftpboot/

[if !supportLists]1.1 [endif]配置tftp

在linux系统移植中,我们使用tftp下载的方式来验证结果。使用tftp下载需要构建pxelinux相关的目录。此部分可参考《通过tftp方式下载linux内核及设备树》章节进行搭建。

如果环境搭建已经搭建完成,需要将ubuntu主机中的
/tftpboot/pxelinux.cfg/01-00-80-e1-42-60-17文件内容,暂时替换为如下内容,在后续的移植过程中会根据不同的需求进行修改。

/tftpboot/pxelinux.cfg/01-00-80-e1-42-60-17

12345678 # Generic Distro Configuration file generated by OpenEmbeddedmenu title Select the boot modeTIMEOUT 20DEFAULT stm32mp157a-fsmp1a-emmcLABEL stm32mp157a-fsmp1a-emmc KERNEL /uImage FDT /stm32mp157a-fsmp1a.dtb APPEND root=/dev/mmcblk1p4 rootwait rw console=ttySTM0,115200

修改01-00-80-e1-42-60-17文件后,继续按照《通过tftp方式下载linux内核及设备树》章节中的描述进行启动。

由于目前还未对源码进行任何修改,在内核启动过程中会停留在如下地方。

Linux系统移植篇8:STM32MP1微处理器之Linux内核配置及编译

 

后续会通过对系统源码的修改,逐渐完成整个系统的启动和对外围设备的驱动。

 

硬件平台:华清远见FS-MP1A开发板(STM32MP157)
部分开发教程下载:加QQ群459754978,群文件里有。
部分视频课程收看:https://space.bilibili.com/670826565/channel/detail?cid=145472
淘宝购买链接:https://item.taobao.com/item.htm?id=622457259672
手机淘宝分享码:复制本行文字打开手淘₤T4FPXn3YYJ2₤

...全文
63 1 收藏 回复
写回复
回复
切换为时间正序
请发表友善的回复…
发表回复

还没有回复,快来抢沙发~

发帖
Linux/Unix社区
创建于2007-08-27

2.0w+

社区成员

Linux/Unix社区 应用程序开发区
申请成为版主
帖子事件
创建了帖子
2021-09-10 09:10
社区公告
暂无公告