0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在NXP源码基础上适配ELF 1开发板的PWM功能

ElfBoard 2024-09-10 10:00 次阅读

本次源码适配项目是在NXP i.MX6ULL EVK评估板所搭载的Linux内核源码(版本为Linux-imx_4.1.15)基础上进行的,主要目标是通过调整功能接口引脚配置,使其适应ELF 1开发板。为了深入阐述这一适配过程,我们将以PWM功能的适配作为具体示例,深入解析整个流程。

1、准备工作

NXP源码路径:ELF1开发板资料包\07-NXP 原厂资料\07-1 NXP官方源码\linux-imx-imx_4.1.15_2.0.0_ga.tar.bz2
(1)将NXP源码拷贝到开发环境home/root/work目录下解压

elf@ubuntu:~/work$ tar jvxf linux-imx-imx_4.1.15_2.0.0_ga.tar.bz2 elf@ubuntu:~/work$ cd linux-imx-imx_4.1.15_2.0.0_ga/ elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ ls

(2)添加默认配置文件

将arch/arm/configs路径下的imx_v7_mfg_defconfig复制一份,命名为imx6ull_elf1_defconfig

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ cp arch/arm/configs/imx_v7_mfg_defconfig arch/arm/configs/imx6ull_elf1_defconfig

(3)添加ELF 1设备树

将arch/arm/boot/dts路径下的imx6ull-14x14-evk.dts复制一份,命名为imx6ull-elf1-emmc.dts

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ cp arch/arm/boot/dts/imx6ull-14x14-evk.dts arch/arm/boot/dts/imx6ull-elf1-emmc.dts

打开arch/arm/boot/dts/Makefile,找到CONFIG_SOC_IMX6ULL,将imx6ull-elf1-emmc.dts添加到Makefile中。

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vi arch/arm/boot/dts/Makefile

wKgZombemAuAJRPCAANOW6pgPJ8196.png

(4)建立交叉编译脚本

建立一个编译脚本build.sh

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vim build.sh

添加以下内容,保存退出

#!/bin/bash export CPUS=`grep -c processor /proc/cpuinfo` source /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi make distclean make imx6ull_elf1_defconfig make -j${CPUS} rm -rf ./.tmp make modules_install INSTALL_MOD_PATH=./.tmp/rootfs/ cd .tmp/rootfs/ tar -jcvf modules.tar.bz2 *

给予脚本权限

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ chmod 777 build.sh

2、适配PWM

(1)硬件原理

开发板上控制蜂鸣器的引脚网络名为PWM2,通过引脚网络名可确定到其球号为M15,再通过球号确定到引脚名称PAD NAME为GPIO1_IO09。

wKgaombemOWAT3pCAAB08ml1Tm0307.pngwKgaombemPyAaPhDAAEzRRnS-b4694.png

(2)IOMUX配置

从上图可以看出PWM2连接到了连接器的65脚。接下来我们需要找到这个引脚在软件上的信号名称。

打开ELF 1开发板资料包\05-硬件资料\05-4 管脚分配表\ELF 1引脚复用对照表找到65引脚的信号名称。

wKgaombemR-AKP6CAAEJJFPm29w031.png

可以看到连接器的65引脚信号名称为GPIO1_IO09。
因为需要使用PWM控制蜂鸣器,所以需要把它复用成PWM功能,在arch/arm/boot/dts/imx6ul-pinfunc.h中找到它们的宏定义,如下:

wKgaombemXyASIXmAACnhtwzD8Q974.png

打开设备树文件arch/arm/boot/dts/imx6ull-elf1-emmc.dts,在&iomux节点下添加子节点pinctrl_pwm2:

pinctrl_pwm2: pwm2grp { fsl,pins = < MX6UL_PAD_GPIO1_IO09__PWM2_OUT 0x110b0 >; };

效果如下:

wKgZombembSANVsCAAECA1y-pPU473.png

配置完PWM2之后,检查设备树中是否把GPIO1_IO09复用成其它功能了。在arch/arm/boot/dts/imx6ull-elf1-emmc.dts文件中搜索引脚PAD NAME“GPIO1_IO09”,在&iomux的子节点pinctrl_hog_1节点下搜索到了GPIO1_IO09的另一个功能复用配置,将该引脚复用成了GPIO功能,用于TF卡的复位,ELF 1开发板没有使用此功能,可以将其注释掉。

wKgaombemdGAZxi0AAF476XJmMA811.png

此外,还需要注释掉节点下的如下内容

wKgZombemeqAe3V2AAFBkJQvkoY914.png

(3)设备节点配置

在设备树文件arch/arm/boot/dts/imx6ull.dtsi中已经定义好了8路PWM信号的相关节点,只需要将PWM2的时钟配置上即可,将clocks属性的IMX6UL_CLK_DUMMY更改为IMX6UL_CLK_PWM2。

wKgaombemgiAbMMkAAGdkUyV3IA895.png

打开arch/arm/boot/dts/imx6ull-elf1-emmc.dts文件,已经存在PWM1相关节点,PWM1是输出给LCD的背光使用的。在&pwm1节点下添加节点&pwm2。

&pwm2 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_pwm2>; status = "okay"; };

效果如下:

wKgaombemjWAXJl6AAEGnj0Ef-s739.png

(4)编译

由于pwm只涉及到设备树修改,不再使用脚本编译,单独编译设备树即可。

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ make dtbs

将编译生成的imx6ull-elf-emmc.dtb拷贝到ELF 1开发板的/run/media/mmcblk1p1 路径下。

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ scp arch/arm/boot/dts/imx6ull-elf1-emmc.dtb root@172.16.0.175:/run/media/mmcblk1p1/

保存并重启开发板

root@ELF1~# sync root@ELF1~# reboot

3、PWM测试

待开发板启动完成,将PWM2设置为输出

root@ELF1:~#:~# echo 0 > /sys/class/pwm/pwmchip1/export

使能PWM2功能

root@ELF1:~#:~# echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable

设置PWM周期,单位为ns

root@ELF1:~#:~# echo 1000000 > /sys/class/pwm/pwmchip1/pwm0/period

设置PWM占空比为50%

root@ELF1:~#:~# echo 500000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle

此时可以听到蜂鸣器响起。关闭蜂鸣器,失能PWM2功能

root@ELF1:~#:~# echo 0 > /sys/class/pwm/pwmchip1/pwm0/enable

至此,就完成了在NXP源码基础上适配ELF 1开发板的PWM功能,期望这份详实的指南能为正在阅读的小伙伴带来实质性的助益与启发,在嵌入式开发之旅上,愿我们携手共进,探索无限可能。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6056

    文章

    44805

    浏览量

    643888
  • 嵌入式
    +关注

    关注

    5121

    文章

    19413

    浏览量

    312486
  • Linux平台
    +关注

    关注

    0

    文章

    13

    浏览量

    8215
  • 开发板系统
    +关注

    关注

    0

    文章

    3

    浏览量

    4895
  • 学习开发板
    +关注

    关注

    0

    文章

    10

    浏览量

    385
收藏 人收藏

    评论

    相关推荐

    ELF 1技术贴|在NXP源码基础上适配开发板的按键功能

    ELF1开发板。接下来,我们将详细阐述适配过程中关于按键功能实现的完整步骤。值得一提的是,ELF1开发
    的头像 发表于 03-08 16:58 1117次阅读
    <b class='flag-5'>ELF</b> <b class='flag-5'>1</b>技术贴|在<b class='flag-5'>NXP</b><b class='flag-5'>源码</b><b class='flag-5'>基础上</b><b class='flag-5'>适配</b><b class='flag-5'>开发板</b>的按键<b class='flag-5'>功能</b>

    ElfBoard技术贴|如何在NXP源码基础上适配ELF 1开发板的UART功能

    UART即通用异步收发器,是一种支持全双工串行通信协议的接口。在i.MX6ULL处理器平台上,该处理器原生支持多达8路的UART接口,提供了丰富的串行通信能力。 针对ELF 1开发板,实际引出
    的头像 发表于 09-25 13:56 2589次阅读
    ElfBoard技术贴|如<b class='flag-5'>何在</b><b class='flag-5'>NXP</b><b class='flag-5'>源码</b><b class='flag-5'>基础上</b><b class='flag-5'>适配</b><b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b>的UART<b class='flag-5'>功能</b>

    嵌入式学习-ElfBoard ELF 1板卡-在nxp源码基础上适配ELF 1开发板的LED功能

    源码适配即在NXP i.MX6ULL EVK评估对应的Linux内核源码(linux-imx_4.1.15 版本)
    发表于 01-05 14:35

    飞凌ElfBoard ELF 1板卡-如何在ELF 1开发板实现对java的支持

    Java作为一种功能强大且广泛应用的编程语言,具有广泛的适应性和实用性。在ELF 1开发板上集成Java支持,无疑将赋予嵌入式开发者更广阔的
    发表于 03-20 09:51

    飞凌嵌入式ElfBoard ELF 1板卡-在NXP源码基础上适配ELF 1开发板的按键功能

    的键值是103,KEY3上报的键值是108,与在设备树中配置的键值一致。 至此,就完成了在NXP源码基础上适配ELF
    发表于 07-03 09:07

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-在NXP源码基础上适配ELF 1开发板的按键功能

    的键值是103,KEY3上报的键值是108,与在设备树中配置的键值一致。 至此,就完成了在NXP源码基础上适配ELF
    发表于 07-04 09:11

    飞凌嵌入式ElfBoard ELF 1板卡-Linux内核移植之内核简介

    \\02-Linux 源代码\\02-0 出厂内核和uboot源码\\内核源码\\linux-4.1.15-elf1.tar.bz2后面我们也会介绍如何在
    发表于 12-13 09:03

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-Linux内核移植之内核简介

    开发板资料包\\02-Linux 源代码\\02-0 出厂内核和uboot源码\\内核源码\\linux-4.1.15-elf1.tar.bz2 后面我们也会介绍如
    发表于 12-16 13:08

    飞凌嵌入式ElfBoard ELF 1板卡-开发板适配之移植前的准备

    ELF 1开发平台。 获取NXP内核源码ELF 1
    发表于 01-21 14:30

    飞凌嵌入式ElfBoard ELF 1板卡-开发板适配PWM

    PWM是Pulse Width Modulation 的缩写,是指脉冲宽度调制,通过调节脉冲的宽度输出想要的波形。ELF 1开发板使用到
    发表于 02-06 09:56

    ELF 1技术贴|在NXP源码基础上适配ELF 1开发板的LED功能

    本次源码适配工作是在NXPi.MX6ULLEVK评估的Linux内核源码(特定版本:Linux-imx_4.1.15)基础上进行的。主要目
    的头像 发表于 12-29 10:04 1044次阅读
    <b class='flag-5'>ELF</b> <b class='flag-5'>1</b>技术贴|在<b class='flag-5'>NXP</b><b class='flag-5'>源码</b><b class='flag-5'>基础上</b><b class='flag-5'>适配</b><b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b>的LED<b class='flag-5'>功能</b>

    ELF技术贴|如何在开发板实现对Java的支持

    Java作为一种功能强大且广泛应用的编程语言,具有广泛的适应性和实用性。在ELF1开发板上集成Java支持,无疑将赋予嵌入式开发者更广阔的选择空间,今天就为各位小伙伴详细解析如
    的头像 发表于 03-13 16:47 628次阅读
    <b class='flag-5'>ELF</b>技术贴|如<b class='flag-5'>何在</b><b class='flag-5'>开发板</b><b class='flag-5'>上</b>实现对Java的支持

    ElfBoard技术贴|在NXP源码基础上适配ELF 1开发板的按键功能

    本次源码适配工作是在NXPi.MX6ULLEVK评估的Linux内核源码(特定版本:Linux-imx_4.1.15)基础上进行的。主要目
    的头像 发表于 07-10 09:54 795次阅读
    ElfBoard技术贴|在<b class='flag-5'>NXP</b><b class='flag-5'>源码</b><b class='flag-5'>基础上</b><b class='flag-5'>适配</b><b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b>的按键<b class='flag-5'>功能</b>

    ElfBoard技术贴|如何在ELF 1开发板搭建流媒体服务器

    流媒体服务器是一种专门用于传输实时数据流的服务器软件,广泛用于视频直播、视频会议、音频播放等应用场景。在嵌入式开发领域,将流媒体服务器部署到开发板可以实现诸如视频监控、实时数据传输等功能
    的头像 发表于 08-20 14:48 769次阅读
    ElfBoard技术贴|如<b class='flag-5'>何在</b><b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b><b class='flag-5'>上</b>搭建流媒体服务器

    NXP源码基础上如何适配ELF 1开发板的UART功能

    UART即通用异步收发器,是一种支持全双工串行通信协议的接口。在i.MX6ULL处理器平台上,该处理器原生支持多达8路的UART接口,提供了丰富的串行通信能力。 针对ELF 1开发板,实际引出了4路
    的头像 发表于 09-29 11:49 550次阅读
    在<b class='flag-5'>NXP</b><b class='flag-5'>源码</b><b class='flag-5'>基础上</b>如何<b class='flag-5'>适配</b><b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b>的UART<b class='flag-5'>功能</b>