扩展板驱动移植准备
实验原理
Linux设备树目录下文件分三种分别是dtsi、dts和dtb,dtsi类似于C语言中的头文件,定义一些通用的信息会被dts文件引用,dts是最终的文件,用来描述设备的硬件资源、编译后生成dtb文件,这个文件将会传递给linux内核,内核启动后通过解析这个文件获取设备的硬件资源信息。
即使同一款芯片也会有不同的设备树,对应不同的设备,这里我们要准备驱动我们的扩展板,这样我们可以认为加了扩展板的fsmp1a是一个新的设备,所以我们要为这个新的设备创建一个新的设备树文件,当然他继承了fsmp1a的主板资源,所以我们设备设备树会应用原有的设备树文件。
实验目的
了解Linux内核设备树的原理,设备树的层次结构等,掌握如何在内核中添加一个新设备的支持。
实验平台
华清远见开发环境,FS-MP1A平台
实验步骤
- 导入交叉编译工具链
- 新建设备树文件
- 修改arch/arm/boot/dts/Makefile
- 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 \
- 编译设备树文件
- 增加启动项配置
- KERNEL /uImage
- FDT /stm32mp157a-fsmp1a-extended.dtb
- APPEND root=/dev/mmcblk2p4 rootwait rw console=ttySTM0,115200
- KERNEL /uImage
- FDT /stm32mp157a-fsmp1a-extended.dtb
- APPEND root=/dev/mmcblk2p4 rootwait rw console=ttySTM0,115200
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 // 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-mipi050.dts
如果没有屏幕则可以引用stm32mp157a-fsmp1a.dts
在原有stm32mp157a-fsmp1a-rgb070.dts下添加如下新dts文件的条目(标红部分未新增条目)
编译后会生成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
LABEL stm32mp157a-fsmp1a-extended
说明:
“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