【设备树】
sys_rw_gpio{
compatible = "yhai,sys_rw_gpio";
led_gpio = <&gpio TEGRA_GPIO(J,7) GPIO_ACTIVE_HIGH>; //40pin 丝印 12
smoke_sensor_gpio = <&gpio TEGRA_GPIO(S,5) GPIO_ACTIVE_HIGH>; //40pin 丝印 29
};
【修改设备树】
yhai@yhai:~/Linux_for_Tegra/source/public/hardware/nvidia$ vim platform/t210/porg/kernel-dts/tegra210-p3448-0000-p3449-0000-b00.dts
【编译设备树】
yhai@yhai:~/Linux_for_Tegra/source/public/kernel/kernel-4.9$ make dtbs
aidb@linux:/sys$ ls
block bus class dev devices firmware fs kernel module power
- block:块设备(eMMC/SD 卡)
- bus:各类总线(platform/i2c)
- class:按功能归类设备(leds/gpio/tty)
- dev:设备号软链接
- devices:底层完整硬件拓扑
- firmware:固件、设备树信息
- fs:内核支持的文件系统
- kernel:内核相关配置
- module:已加载内核 ko 模块
- power:电源管理
重点:sysfs 是内核导出硬件信息的虚拟文件系统。
【驱动文件】
yhai@yhai:/mnt/hgfs/ShareFolder/platdriver/06-读写多个sys属性文件$ make
【传送】
yhai@yhai:/mnt/hgfs/ShareFolder/platdriver/06-读写多个sys属性文件$ sudo scp gpio.ko aidb@10.20.3.91:/home/aidb/
sudo yhai 的密码:
aidb@10.20.3.91's password:
gpio.ko 100% 278KB 4.0MB/s 00:00
yhai@yhai:~/Linux_for_Tegra/source/public/kernel/kernel-4.9$ sudo scp arch/arm64/boot/dts/tegra210-p3448-0000-p3449-0000-b00.dtb aidb@10.20.3.91:/home/aidb/
sudo yhai 的密码:
aidb@10.20.3.91's password:
tegra210-p3448-0000-p3449-0000-b00.dtb 100% 232KB 3.8MB/s 00:00
【uboot配置】
sudo reboot
setenv bootargs root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 earlycon=uart8250,mmio32,0x70006000
ext4load mmc 1:1 0x84000000 /home/aidb/Image
ext4load mmc 1:1 0x83100000 /home/aidb/tegra210-p3448-0000-p3449-0000-b00.dtb
booti 0x84000000 - 0x83100000
【验证添加驱动】
sudo insmod gpio.ko
dmesg | tail -n 10
36.228040 gpio: loading out-of-tree module taints kernel.
36.236025 gpio_probe
36.239087 led_gpio: 79
36.241847 smoke_sensor_gpio: 149
36.245330 gpio_probe ok !!
aidb@localhost:/sys/bus/platform/devices$ ls |grep sys
sys_rw_gpio
aidb@localhost:/sys/bus/platform/devices/sys_rw_gpio$ ls
driver led_gpio of_node smoke_sensor_gpio uevent
driver_override modalias power subsystem
aidb@localhost:/sys/bus/platform/devices/sys_rw_gpio$
sudo sh -c "echo 1 > led_gpio"
cat smoke_sensor_gpio
sudo rmmod gpio