【elfboard linux开发板】11. 版本管理和修改设备树流程(点亮LED)

1. 版本管理

1.1 初始化git仓库

git init 生成一个.git 目录
git config --global user.name 用户名
git config --global user.email 邮箱

1.2 查看.gitignore

vim .gitignore

1.3 添加删除到缓存区

git status 查看状态
git add 文件名
git rm 文件名

1.4 提交当前记录

git commit -m 说明

1.5 查看提交记录

git log

1.6 查看当前分支

git branch

1.7 创建分支

git branch 分支名

1.8 切换分支

git checkout 分支名

2. 叒叕点亮LED

通过linux自带的gpio-leds驱动实现,改驱动通过调用Pinctrl子系统和GPIO子系统实现LED灯的控制;

2.1 IOMUX介绍

IOMUX是指IO引脚功能多路复用;其对应的引脚功能可以看05-硬件资料\05-4 管脚分配表\ELF 1引脚复用对照表-20230921.xlsx,在表中Alt0为默认功能,后面的Alt[数字]列为可以复用功能,复用为GPIO需要配置为Alt5,相关的寄存器配置可以查看IMX6ULLRM.pdfchapter 32.6 中关于SW_MUX_CTL寄存器描述
a. 常用的寄存器类型

电气属性寄存器:IOMUXC_SW_PAD_CTL_PAD_* 20E_0204-20E_048F
复用寄存器:IOMUXC_SW_MUX_CTL_PAD_* 20E_0044-20E_0203

b. 怎么进行配置(可以看后面程序理解)

  1. arch/arm/boot/dts/dts文件名文件中,添加对iomuxc的描述,定义pinctrl_leds0
  2. 添加fsl,pins信息

信息按照:复用寄存器偏移值, 电气属性寄存器偏移值,输入寄存器偏移值,复用模式,输入值, 电气寄存器的值 排列,每行只描述一个引脚的各个值

举个例子:
首先利用arch/arm/boot/dts/imx6ull-pinfunc.h的定义的宏,
#define MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0x008c 0x0318 0x0000 5 0
其排列顺序参照下列描述

/*
14  * The pin function ID is a tuple of
15  * <mux_reg conf_reg input_reg mux_mode input_val>
16  */

0x008c代表复用寄存器相较于基地址的偏移量【elfboard linux开发板】11. 版本管理和修改设备树流程(点亮LED)_第1张图片
0x0318 代表模式控制寄存器相较于基地址的偏移量
【elfboard linux开发板】11. 版本管理和修改设备树流程(点亮LED)_第2张图片
5 代表 复用模式为寄存器描述的GPIO1_IO18

0101 ALT5 — Select mux mode: ALT5 mux port: GPIO1_IO18 of instance: gpio1

其次,在fsl,pins中添加:

fsl,pins = <
	MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 		0x10b0
	>;

0x10b0代表将电气属性寄存器配置为:Pull/Keeper Enabled,速度 medium(100MHz),Drive Strength Field 为DSE_6_R0_6 — R0/6
【elfboard linux开发板】11. 版本管理和修改设备树流程(点亮LED)_第3张图片

2.2 硬件说明

2.2.1 原理图

硬件上有三个led灯,分别连接着第60、64、30号引脚,当GPIO输出配置为低电平时导通,LED点亮;
【elfboard linux开发板】11. 版本管理和修改设备树流程(点亮LED)_第4张图片

【elfboard linux开发板】11. 版本管理和修改设备树流程(点亮LED)_第5张图片
在这里插入图片描述

2.2.2 引脚说明

引脚的相关宏定义在以下两个文件:
arch/arm/boot/dts/imx6ull-pinfunc.h
arch/arm/boot/dts/imx6ul-pinfunc.h

如果查找对应引脚的GPIO号,通过vi arch/arm/boot/dts/imx6ul-pinfunc.h进入文件,在命令模式下,使用/GPIO号查找名称末尾为复用中描述的GPIO名称,例如:用/GPIO1_IO10查找*GPIO1_IO10*宏

序号 名称 引脚 GPIO
60 LED_R P15_JTAG_MOD gpio1_IO10
64 LED_G K13_GPIO_0 gpio1_IO00
30 LED_Y K15_SD1_WP gpio1_IO18

2.3 程序配置说明

2.3.1 IOMUX配置

arch/arm/boot/dts/imx6ull-elf1-emmc.dts文件的末位,新增关于IOMUX的描述如下:

&iomuxc {
	pinctrl_leds0:leds0grp{
		fsl,pins = <
 			MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0x10b0
			MX6UL_PAD_JTAG_MOD__GPIO1_IO10   0x10b0
			MX6UL_PAD_GPIO1_IO00__GPIO1_IO00 0x10b0
		>;
		};
};

ps. 注意标点符号的规范,0x10b0是对电气寄存器的配置:

2.3.2 设备树配置

arch/arm/boot/dts/imx6ull-elf1-emmc.dts设备树描述文件中的根目录/下添加对led的文本说明

		leds {
                compatible = "gpio-leds";
                pinctrl-names = "default";
                pinctrl-0 = <&pinctrl_leds0 >;
                status = "okay";
                led1{
                        lable = "led1";
                        gpios = <&gpio1 10 GPIO_ACTIVE_LOW>;
                        default-state = "on";
                };
                led2{
                        lable = "led2";
                        gpios = <&gpio1 0 GPIO_ACTIVE_LOW>;
                        default-state = "on";
                };
                led3{
                        lable = "led3";
                        gpios = <&gpio1 18 GPIO_ACTIVE_LOW>;
                        default-state = "on";
                };
        };

解释:
compatible: 兼容,表示该设备可以被一个或多个驱动匹配,此处匹配gpio-leds驱动;
定义的pinctrl_leds0标签在此处使用
status 设置为 “okay” 表示 LED可用
gpios表示对映的引脚和极性(GPIO_ACTIVE_LOW 或GPIO_ACTIVE_HIGH)
default-state 表示默认状态,有"off"和"on"两种状态

2.3.3 生成镜像和设备树

make menuconfig
make -j2

在menuconfig中,按"/LEDS_GPIO”查找,选中保证该驱动已经编译进内核

2.3.4 拷贝下载验证

将相关镜像和设备树发送到开发板

scp arch/arm/boot/dts/imx6ull-elf1-emmc.dtb [email protected]:/run/media/mmcblk1p1/
scp arch/arm/boot/zImage [email protected]:/run/media/mmcblk1p1/

在开发板保存重启

sync
reboot

更改前:在这里插入图片描述
更改后:
在这里插入图片描述
现在可以通过操作文件点灯:

echo 0 > /sys/class/leds/led1/brightness
echo 1 > /sys/class/leds/led1/brightness

你可能感兴趣的:(linux)