代码拉取完成,页面将自动刷新
基于任务要求,实现一个led灯的亮灭与开关的状态识别。led灯为状态指示灯,需要根据不同状态下切换不同的显示效果,开关为电源开关,开发设备上做了关闭开关后延时15秒才断电的操作,15秒内需要通知应用系统执行关机。
分成两个设备:/dev/state_led和/dev/power_switch。一个负责状态灯,另一个负责断电检测。先是编写驱动(底层的操作和系统接口),然后在基于设备编写应用程序……工作量和工作难度都比较高。
使用系统提供的GPIO API库#include <linux/gpio.h>
。API库的相关描述在sd-fuse_rk3588-master/kernel/Documentation/translations/zh_CN/gpio.txt
直接基于系统的文件操作方式,对GPIO进行操作。原先的控制脚本也是基于此,只是使用的是shell脚本语言和python语言编写的。这样的话需要修改成使用C/C++重新对操作进行编写了。
在T6上测试没有成功
发现sysfs方式在4.0内核后件会慢慢淘汰。试试使用这个库。
.
|-- demo
| `-- demo001.c
|-- main.c
|-- method1 # 方法一:驱动方式
| `-- state_led.c
|-- method2 # 方法二:GPIO子系统API方式
|-- method3 # 方法三:/sys/class/gpio/方式
`-- readme.md # 说明记录文件
因为设计内核操作,需要安转该内核头文件进行操作。以下转载至6.8 安装内核头文件
sudo dpkg -i /opt/linux-headers-*.deb
root@NanoPC-T6:~# sudo dpkg -i /opt/linux-headers-*.deb
Selecting previously unselected package linux-headers-5.10.160.
(Reading database ... 108405 files and directories currently installed.)
Preparing to unpack .../linux-headers-5.10.160-1.deb ...
Unpacking linux-headers-5.10.160 (5.10.160-1) ...
Setting up linux-headers-5.10.160 (5.10.160-1) ...
测试编译内核模块
sudo apt update
sudo apt install git gcc make bc
git clone https://github.com/RinCat/RTL88x2BU-Linux-Driver.git
cd RTL88x2BU-Linux-Driver
make -j$(nproc)
sudo make install
sudo modprobe 88x2bu
#安装libgpiod库及头文件
sudo apt install libgpiod-dev
#安装gpiod 命令行工具
sudo apt install gpiod
/sys/class/gpio
root@NanoPC-T6:/sys/class/gpio# ll
total 0
drwxr-xr-x 2 root root 0 Dec 8 00:00 ./
drwxr-xr-x 77 root root 0 Dec 8 00:00 ../
--w------- 1 root root 4096 Dec 8 16:29 export # 创建(添加)GPIO操作路径
lrwxrwxrwx 1 root root 0 Dec 8 16:29 gpio106 -> ../../devices/platform/pinctrl/fec40000.gpio/gpiochip3/gpio/gpio106/
lrwxrwxrwx 1 root root 0 Dec 8 00:00 gpio107 -> ../../devices/platform/pinctrl/fec40000.gpio/gpiochip3/gpio/gpio107/
lrwxrwxrwx 1 root root 0 Dec 8 00:00 gpio111 -> ../../devices/platform/pinctrl/fec40000.gpio/gpiochip3/gpio/gpio111/
lrwxrwxrwx 1 root root 0 Dec 8 00:00 gpio115 -> ../../devices/platform/pinctrl/fec40000.gpio/gpiochip3/gpio/gpio115/
lrwxrwxrwx 1 root root 0 Dec 8 00:00 gpio52 -> ../../devices/platform/pinctrl/fec20000.gpio/gpiochip1/gpio/gpio52/
lrwxrwxrwx 1 root root 0 Dec 8 00:00 gpiochip0 -> ../../devices/platform/pinctrl/fd8a0000.gpio/gpio/gpiochip0/
lrwxrwxrwx 1 root root 0 Dec 8 00:00 gpiochip128 -> ../../devices/platform/pinctrl/fec50000.gpio/gpio/gpiochip128/
lrwxrwxrwx 1 root root 0 Dec 8 00:00 gpiochip32 -> ../../devices/platform/pinctrl/fec20000.gpio/gpio/gpiochip32/
lrwxrwxrwx 1 root root 0 Dec 8 00:00 gpiochip509 -> ../../devices/platform/feb20000.spi/spi_master/spi2/spi2.0/rk806-pinctrl.6.auto/gpio/gpiochip509/
lrwxrwxrwx 1 root root 0 Dec 8 00:00 gpiochip64 -> ../../devices/platform/pinctrl/fec30000.gpio/gpio/gpiochip64/
lrwxrwxrwx 1 root root 0 Dec 8 00:00 gpiochip96 -> ../../devices/platform/pinctrl/fec40000.gpio/gpio/gpiochip96/
--w------- 1 root root 4096 Dec 8 00:00 unexport #销毁GPIO操作路径
其中一个GPIO的操作路径
root@NanoPC-T6:/sys/class/gpio/gpio106# tree -L 2
.
|-- active_low
|-- device -> ../../../gpiochip3
|-- direction
|-- edge
|-- power
| |-- async
| |-- autosuspend_delay_ms
| |-- control
| |-- runtime_active_kids
| |-- runtime_active_time
| |-- runtime_enabled
| |-- runtime_status
| |-- runtime_suspended_time
| `-- runtime_usage
|-- subsystem -> ../../../../../../../class/gpio
|-- uevent
`-- value
这些文件可以通过sysfs文件系统进行访问和修改,以便对GPIO进行配置和控制。
apt install cmake curl libssl-dev libcurl4-openssl-dev libcurl4
下载可执行文件
wget https://gitee.com/lozenyin/gpio_control_api/releases/download/V1.0.0/gpio_control_api_T6_v1.0.0_202312121645.tar.gz
在/root/hardware
处解压
tar -zxvf gpio_control_api_T6_v1.0.0_202312121645.tar.gz
find gpio_control_api/method3 -type f -name 'run_*' | xargs tar -czvf gpio_control_api_T6_v1.0.0_202312121645.tar.gz
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。