目录
写在前面:
本文章为《Linux系统移植之扩展板外设驱动移植篇》系列中的一篇,笔者使用的开发平台为华清远见FS-MP1A开发板(STM32MP157开发板)。资源扩展板是FS-MP1A开发板的扩展模块,主要包含了10余种助主流传感器、执行器件、总线控制器件,非常方便项目扩展用。可拓展开发智慧家庭、智能医疗、智能安防、工业控制、图像识别、环境检测等方向的10个左右综合项目,华清远见开发板也将配套提供所有项目的说明文档、实验源码、应用程序等资料。
针对FS-MP1A开发板,除了扩展板外设驱动移植篇外,还包括其他多系列教程,包括Cortex-A7开发篇、Cortex-M4开发篇、FreeRTOS篇、Linux应用开发篇、Linux系统移植篇、Linux驱动开发篇、硬件设计篇、人工智能机器视觉篇、Qt应用编程篇、Qt综合项目实战篇等。欢迎关注,更多stm32mp157开发教程及视频,可加技术交流Q群483143191,感谢关注。
FS-MP1A开发板详情介绍:https://item.taobao.com/item.htm?id=622457259672
1.资源扩展板介绍
1.1硬件介绍
1.2资源扩展板可开发项目
2.扩展板驱动移植准备
2.1实验原理
Linux设备树目录下文件分三种分别是dtsi、dts和dtb,dtsi类似于C语言中的头文件,定义一些通用的信息会被dts文件引用,dts是最终的文件,用来描述设备的硬件资源、编译后生成dtb文件,这个文件将会传递给linux内核,内核启动后通过解析这个文件获取设备的硬件资源信息。
即使同一款芯片也会有不同的设备树,对应不同的设备,这里我们要准备驱动我们的扩展板,这样我们可以认为加了扩展板的fsmp1a是一个新的设备,所以我们要为这个新的设备创建一个新的设备树文件,当然他继承了fsmp1a的主板资源,所以我们设备设备树会应用原有的设备树文件。
扩展板资源标识图
2.2实验目的
了解Linux内核设备树的原理,设备树的层次结构等,掌握如何在内核中添加一个新设备的支持。
2.3实验平台
华清远见开发环境,FS-MP1A平台
2.4实验步骤
- 导入交叉编译工具链
linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
- 新建设备树文件
在内核的arch/arm/boot/dts目录下新建文件stm32mp157a-fsmp1a-extended.dts文件并添加如下内容:
stm32mp157a-fsmp1a-extended.dts
123456789101112131415 | // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)/* * Copyright (C) Farsight 2018 - All Rights Reserved *//dts-v1/;#include "stm32mp157a-fsmp1a-mipi050.dts"//#include "stm32mp157a-fsmp1a-rgb070.dts"//#include "stm32mp157a-fsmp1a.dts"/ { model = "HQYJ STM32MP157 FSMP1A EXTENDED Discovery Board"; compatible = "st,stm32mp157a-dk1", "st,stm32mp157";}; |
说明:
主板使用的是5寸的MIPI屏需引用stm32mp157a-fsmp1a-mipi050.dts,
主板使用的是7寸的RGB屏需引用stm32mp157a-fsmp1a-rgb070.dts
如果没有屏幕则可以引用stm32mp157a-fsmp1a.dts
- 修改arch/arm/boot/dts/Makefile
在原有stm32mp157a-fsmp1a-rgb070.dts下添加如下新dts文件的条目(标红部分未新增条目)
dtb-$(CONFIG_ARCH_STM32) += \
stm32f429-disco.dtb \
stm32f469-disco.dtb \
stm32f746-disco.dtb \
stm32f769-disco.dtb \
stm32429i-eval.dtb \
stm32746g-eval.dtb \
stm32h743i-eval.dtb \
stm32h743i-disco.dtb \
stm32mp157a-dk1.dtb \
stm32mp157a-fsmp1a.dtb \
stm32mp157a-fsmp1a-mipi050.dtb \
stm32mp157a-fsmp1a-rgb070.dtb \
stm32mp157a-fsmp1a-extended.dtb \
- 编译设备树文件
编译后会生成stm32mp157a-fsmp1a-extended.dtb文件
- 增加启动项配置
u-boot可以通过eMMC、SD卡、TFTP三种方式加载内核和设备树文件,三种不同的方式分别需要修改不同的文件
eMMC启动:修改根文件系统的/boot/mmc1_stm32mp157a-fsmp1a_extlinux/extlinux.conf
SD卡启动:修改根文件系统的/boot/mmc1_stm32mp157a-fsmp1a_extlinux/extlinux.conf
TFTP启动:修改根文件系统的/tftpboot/pxelinux.cfg/01-00-80-e1-42-60-17
注意:
01-00-80-e1-42-60-17为板子u-boot期间的MAC地址,如需改变可以在u-boot期间使用env set -f ethaddr xx:xx:xx:xx:xx:xx来修改mac地址。
红色部分为增加内容
# Generic Distro Configuration file generated by OpenEmbedded
menu title Select the boot mode
MENU BACKGROUND ../splash.bmp
TIMEOUT 20
DEFAULT stm32mp157a-fsmp1a-mipi-emmc
LABEL stm32mp157a-fsmp1a-emmc
KERNEL /uImage
FDT /stm32mp157a-fsmp1a-extended.dtb
APPEND root=/dev/mmcblk2p4 rootwait rw console=ttySTM0,115200
LABEL stm32mp157a-fsmp1a-extended
KERNEL /uImage
FDT /stm32mp157a-fsmp1a-extended.dtb
APPEND root=/dev/mmcblk2p4 rootwait rw console=ttySTM0,115200
说明:
“APPEND root=/dev/mmcblk2p4 rootwait rw console=ttySTM0,115200”表示根文件系统在eMMC上、如果需要使用nfs挂载根文件系统需将APP内容改为:
APPEND root=/dev/nfs nfsroot=192.168.11.251:/source/rootfs ip=dhcp rootwait rw earlyprintk console=ttySTM0,115200
硬件平台:华清远见FS-MP1A开发板(STM32MP157)
部分开发教程下载:加QQ群483143191,群文件里有。
部分视频课程收看:华清远见研发中心的个人空间_哔哩哔哩_Bilibili
淘宝购买链接:https://item.taobao.com/item.htm?id=622457259672
手机淘宝分享码:复制本行文字打开手淘₤T4FPXn3YYJ2₤