1.驱动程序的三种写法
图中介绍了驱动程序的三种写法
2.使用设备树点亮led灯
操作说明:imx6ULL开发板、搭建了ubuntu以及网络文件系统。(没有的看第一篇文章)
2.1内核路径
/home/fjq/100ask_imx6ull-sdk/Linux-4.9.88/arch/arm/boot/dts
2.2内核文件
100ask_imx6ull-14x14.dts
2.3 使用imx6ull设备树工具选择led指定的引脚
2.4 添加Pinctrl 信息
&iomuxc_snvs {
myled_for_gpio_subsys: myled_for_gpio_subsys{
fsl,pins = <
MX6ULL_PAD_SNVS_TAMPER3__GPIO5_IO03 0x000110A0
>;
};
#在文件中寻找iomuxc_snvs结点,添加到这个节点里面
2.5 设备节点信息(放在根节点下)
myled {
compatible = "100ask,leddrv";
pinctrl-names = "default";
pinctrl-0 = <&myled_for_gpio_subsys>;
led-gpios = <&gpio5 3 GPIO_ACTIVE_LOW>;
};
#参数说明: 1:compatible 要与程序中的名字相同,用于内核寻找相应的驱动程序
2.6 编译(回到Linux-4.988 目录进行编译)
fjq@ubuntu:~/100ask_imx6ull-sdk/Linux-4.9.88$ make dtbs
2.7 编译成功提示
fjq@ubuntu:~/100ask_imx6ull-sdk/Linux-4.9.88$ make dtbs
CHK include/config/kernel.release
CHK include/generated/uapi/linux/version.h
CHK include/generated/utsrelease.h
CHK include/generated/bounds.h
CHK include/generated/timeconst.h
CHK include/generated/asm-offsets.h
CALL scripts/checksyscalls.sh
DTC arch/arm/boot/dts/100ask_imx6ull-14x14.dtb
2.8 将dtb文件复制到网络文件系统
cp arch/arm/boot/dts/100ask_imx6ull-14x14.dtb /home/book/nfs_rootfs/
2.9 开启开发板
//复制网络文件系统中的dtb文件 到 boot目录中 重启
[root@imx6ull:/mnt]# cp 100ask_imx6ull-14x14.dtb /boot/
[root@imx6ull:/mnt]# reboot
2.10编译编写的驱动程序 挂载驱动程序
// 执行makefile文件
make
//打开内核打印信息
echo "7 4 1 7" > /proc/sys/kernel/printk
//挂载驱动程序
insmod insmod led_drv.ko
//执行
./led_text /dev/100ask_led0 on