1 硬件设计
2 设备树设计
2.1 参考文档
2.2 设备树设计
beep {
compatible = "alientek,beep";
status = "okay";
beep-gpio = <&gpioc 7 GPIO_ACTIVE_HIGH>;
};
key0 {
compatible = "qkx,irq";
status = "okay";
key0-gpio = <&gpiog 3 GPIO_ACTIVE_LOW>;
interrupt-parent=<&gpiog>;
interrupts=<3 IRQ_TYPE_EDGE_FALLING>;
};
key1 {
compatible = "qkx,irq";
status = "okay";
key1-gpio = <&gpioh 7 GPIO_ACTIVE_LOW>;
interrupt-parent=<&gpioh>;
interrupts=<7 IRQ_TYPE_EDGE_FALLING>;
};
wkup {
compatible = "qkx,irq";
status = "okay";
wkup-gpio = <&gpioa 0 GPIO_ACTIVE_HIGH>;
interrupt-parent=<&gpioa>;
interrupts=<0 IRQ_TYPE_EDGE_RISING>;
};
- 设备树编译,并拷贝到tftp
qinkaixin@qinkaixin-virtual-machine:~/tools/atk_install/alientek_linux$ make dtbs
DTC arch/arm/boot/dts/stm32mp157d-atk.dtb
DTC arch/arm/boot/dts/stm32mp157d-atk-mipi.dtb
DTC arch/arm/boot/dts/stm32mp157d-atk-hdmi.dtb
qinkaixin@qinkaixin-virtual-machine:~/tools/atk_install/alientek_linux$ cp /home/qinkaixin/tools/atk_install/alientek_linux/arch/arm/boot/dts/stm32mp157d-atk.dtb /home /qinkaixin/linux/tftpboot/
2 驱动开发设计
2.1 字符设备设计过程
- 设备树结构体
- 设备树解析
- key0,下降沿触发
- 字符设备初始化函数
- 字符设备初始化
- 字符设备释放
2.1 中断函数初始化
- 中断函数启动定时器,防抖操作
- 定时器处理函数
3 调试验证
3.1 应用程序开发
3.2 Makefile编写
3.3 驱动编译及拷贝到tftp
cd key0irq/
sudo depmod
make
arm-none-linux-gnueabihf-gcc key0irqApp.c -o key0irqApp
sudo cp key0irq.ko key0irqApp /home/qinkaixin/linux/nfs/rootfs/lib/modules/5.4.31/ -f
cd key1irq/
sudo depmod
make
arm-none-linux-gnueabihf-gcc key1irqApp.c -o key1irqApp
sudo cp key1irq.ko key1irqApp /home/qinkaixin/linux/nfs/rootfs/lib/modules/5.4.31/ -f
cd wkupirq/
sudo depmod
make
arm-none-linux-gnueabihf-gcc wkupirqApp.c -o wkupirqApp
sudo cp wkupirq.ko wkupirqApp /home/qinkaixin/linux/nfs/rootfs/lib/modules/5.4.31/ -f
3.4 设备树拷贝到tftp
cp /home/qinkaixin/tools/atk_install/alientek_linux/arch/arm/boot/uImage /home/qinkaixin/linux/tftpboot/
3.5 网络调试
- 网络调试环境配置
(以NFS作为根文件系统,也可以烧录到EMMC)
1:IP设置
setenv ipaddr 192.168.0.105
setenv ethaddr b8:ae:1d:01:01:01
setenv gatewayip 192.168.0.1
setenv netmask 255.255.255.0
setenv serverip 192.168.0.111
saveenv
2:nfs调试
nfs C2000000 192.168.0.111:/home/qinkaixin/linux/nfs/rootfs/test
3:设置nfs根文件系统
setenv bootargs 'console=ttySTM0,115200 root=/dev/nfs nfsroot=192.168.0.111:/home/qinkaixin/linux/nfs/rootfs,proto=tcp rw ip=192.168.0.105:192.168.0.111:192.168.0.1:255.255.255.0::eth0:off' saveenv
4:tftp网络调试 setenv bootcmd 'tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000' saveenv boot
- 进入开发板/lib/modules/5.4.31目录,执行驱动挂载
cd /lib/modules/5.4.31/
modprobe key0irq.ko
modprobe key1irq.ko
modprobe wkupirq.ko
cat /proc/interrupts
- 测试
./key0irqApp /dev/key0
./key1irqApp /dev/key1
./wkupirqApp /dev/wkup