git init
生成一个.git 目录
git config --global user.name 用户名
git config --global user.email 邮箱
vim .gitignore
git status
查看状态
git add 文件名
git rm 文件名
git commit -m 说明
git log
git branch
git branch 分支名
git checkout 分支名
通过linux自带的gpio-leds驱动实现,改驱动通过调用Pinctrl子系统和GPIO子系统实现LED灯的控制;
IOMUX是指IO引脚功能多路复用;其对应的引脚功能可以看05-硬件资料\05-4 管脚分配表\ELF 1引脚复用对照表-20230921.xlsx
,在表中Alt0为默认功能,后面的Alt[数字]列为可以复用功能,复用为GPIO需要配置为Alt5,相关的寄存器配置可以查看IMX6ULLRM.pdf
chapter 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. 怎么进行配置(可以看后面程序理解)
- 在
arch/arm/boot/dts/dts文件名
文件中,添加对iomuxc的描述,定义pinctrl_leds0- 添加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代表复用寄存器相较于基地址的偏移量
0x0318 代表模式控制寄存器相较于基地址的偏移量
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
硬件上有三个led灯,分别连接着第60、64、30号引脚,当GPIO输出配置为低电平时导通,LED点亮;
引脚的相关宏定义在以下两个文件:
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 |
在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是对电气寄存器的配置:
将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"两种状态
make menuconfig
make -j2
在menuconfig中,按"/LEDS_GPIO”查找,选中保证该驱动已经编译进内核
将相关镜像和设备树发送到开发板
scp arch/arm/boot/dts/imx6ull-elf1-emmc.dtb root@192.168.0.232:/run/media/mmcblk1p1/
scp arch/arm/boot/zImage root@192.168.0.232:/run/media/mmcblk1p1/
在开发板保存重启
sync
reboot
更改前:
更改后:
现在可以通过操作文件点灯:
echo 0 > /sys/class/leds/led1/brightness
echo 1 > /sys/class/leds/led1/brightness