【linux内核驱动day04】
设备树:
- .dts : 描述板级资源的设备树文件(一般一个开发板对应一个文件)
- 开发板外设
- .dtsi : 描述SOC的设备树文件(类似.C对应的.h文件)
- IIC SPI PWM之类的
- .h : C语言的头文件 ---- 设备树编译支持预处理C文件
- .dtb : 最终编译完成后生成的可加载设备树文件(类似a.out)
拷贝:
修改:
make:
将pute.dtb拷贝到tftpboot目录下:
sudo minicom中tftp三部曲:
tftp 0x80800000 zImage
tftp 0x83000000 pute.dtb
bootz 0x80800000 - 0x83000000
在/arm/boot/dts/pute.dts文件里:
先定义reg中的数字类型,地址1,大小1的格式
属性书写原则:
- 该属性通用性高,则按照设备树中已有的属性名及格式定义
- 该属性如果未在设备树中定义过,则自行定义
在/arch/arm/boot/dts/pute.dts文件里加节点:
在顶层目录下编译make pute.dtb或者make dtbs
在顶层目录下拷贝到tftpboot目录 cp arch/arm/boot/dts/pute.dtb ~/tftpboot
在顶层目录下,写drivers/char/led_dts.c文件
修改driver/char/Makefile文件,把led_misc.o修改成led_dts.o,不用修改Kconfig,
在顶层目录下,make zImage和make modules
将生成的/drivers/char/led_dts.ko拷贝到/nfs/rootfs目录下
在uboot里:tftp 0x80800000 zImage
tftp 0x83000000 pute.dtb
bootz 0x80800000 - 0x83000000
insmod led_dts.ko
GPIO子系统:
内核帮我们实现操作对应接口的函数
- 设备树中定义对应的引脚及设置电器属性
编写vim arch/arm/boot/dts/pute.dtb 添加ptledsub
在顶层目录下,编译make dtbs
将pute.dtb文件拷贝到tftpboot目录下
在vim /drivers/char/led_subgpio.c文件中,编写代码
vim drivers/char/Makefile中添加led_subgpio.o
make modules
将led_subgpio.ko文件拷贝到rootfs目录下
在开发板里,tftp 0x80800000 zImage
tftp 0x83000000 pute.dtb
bootz 0x80800000 - 0x83000000
insmod led_subgpio.ko