扩展板驱动移植准备

来自华清远见研发中心
跳转至: 导航搜索

实验原理

Linux设备树目录下文件分三种分别是dtsi、dts和dtb,dtsi类似于C语言中的头文件,定义一些通用的信息会被dts文件引用,dts是最终的文件,用来描述设备的硬件资源、编译后生成dtb文件,这个文件将会传递给linux内核,内核启动后通过解析这个文件获取设备的硬件资源信息。

即使同一款芯片也会有不同的设备树,对应不同的设备,这里我们要准备驱动我们的扩展板,这样我们可以认为加了扩展板的fsmp1a是一个新的设备,所以我们要为这个新的设备创建一个新的设备树文件,当然他继承了fsmp1a的主板资源,所以我们设备设备树会应用原有的设备树文件。

57-1-1.png

实验目的

了解Linux内核设备树的原理,设备树的层次结构等,掌握如何在内核中添加一个新设备的支持。

实验平台

华清远见开发环境,FS-MP1A平台

实验步骤

  1. 导入交叉编译工具链
  2. linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
    
  3. 新建设备树文件
  4. 在内核的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

  5. 修改arch/arm/boot/dts/Makefile
  6. 在原有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 \

  7. 编译设备树文件
  8. 编译后会生成stm32mp157a-fsmp1a-extended.dtb文件

  9. 增加启动项配置
  10. 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