sys/class/gpio下的gpio操作(KE210)

本文介绍了如何在Linux系统下通过/sys/class/gpio目录操作GPIO。首先检查该目录是否存在,若不在则需在编译内核时添加相应支持。然后通过终端获取GPIO信息,例如GPH2_0的引脚编号为146。通过写入特定引脚编号到/export,可以导出GPIO进行控制,设置direction为out定义输出方向,value文件用于设置GPIO端口的1或0状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.看看系统中有没有“/sys/class/gpio”这个文件夹。
如果没有请在编译内核的时候加入。

$ make menuconfig

 Device Drivers  —>  GPIO Support  —>     /sys/class/gpio/… (sysfs interface)。 

$ make

重新烧写即可。

2.启动开发板,在终端中敲入以下命令,获取GPIO的信息。

# cd /sys/class/gpio
# for i in gpiochip* ; do echo `cat $i/label`: `cat $i/base` ; done

终端显示如下(部分):

GPA0: 0
GPG1: 104
GPG2: 112
GPG3: 120
GPH0: 128
GPH1: 137
GPB: 14
GPH2: 146
GPH3: 155
GPI: 164

3.计算GPIO的引脚编号。
我们用GPH2_0来控制IO口。
GPH2的起始编号是146,那么GPH2_0 就是146+0 = 146。

	# echo "146" > /sys/class/gpio/export
	# echo "out" > /sys/class/gpio/gpio146/direction
	# echo "1" > /sys/class/gpio/gpio146/value
	# echo "0" > /sys/class/gpio/gpio146/value

读取val

<think>我们分析的是这段shell脚本。这段脚本主要做了以下几件事情:1.禁用`nvgetty`服务2.设置核心转储文件大小不受限制3.杀死名为`nvargus-daemon`的进程4.操作GPIO(导出、设置方向、边沿触发等)5.进入特定目录并运行一个名为`XCamera`的程序下面逐行解释:```bash#!/bin/bash```指定脚本解释器为bash。```bashsystemctldisablenvgetty```禁用`nvgetty`服务(系统服务管理命令)。```bashulimit-cunlimited```设置当前shell及其启动的进程的核心转储文件大小不受限制。这样当程序崩溃时,可以生成coredump文件用于调试。```bashps-ef|grepnvargus-daemon|grep-vgrep|awk'{print$2}'|xargskill-9```这条命令的作用是查找并杀死所有名为`nvargus-daemon`的进程:-`ps-ef`:列出所有进程。-`grepnvargus-daemon`:过滤出包含`nvargus-daemon`的行。-`grep-vgrep`:排除掉`grep`进程本身。-`awk'{print$2}'`:提取第二列(即进程ID)。-`xargskill-9`:将前面得到的进程ID作为参数传递给`kill-9`,强制杀死这些进程。```bash#turn-on/offlight```注释,说明接下来的操作与灯光控制有关。```bashecho50>/sys/class/gpio/unexport```如果GPIO50已经被导出,则取消导出(避免重复操作)。```bashecho50>/sys/class/gpio/export```导出GPIO50,这样在`/sys/class/gpio/gpio50`目录下会出现操作GPIO的文件。```bashechoin>/sys/class/gpio/gpio50/direction```设置GPIO50为输入模式。```bashechofalling>/sys/class/gpio/gpio50/edge```设置GPIO50为下降沿触发(通常用于中断,当电平由高变低时触发)。```bashecho51>/sys/class/gpio/unexportecho51>/sys/class/gpio/exportechoout>/sys/class/gpio/gpio51/directionecho1>/sys/class/gpio/gpio51/value```对GPIO51进行类似操作:先取消导出(如果已经导出),然后导出,设置方向为输出,并输出高电平(1)。```bashecho216>/sys/class/gpio/unexportecho216>/sys/class/gpio/exportechoout>/sys/class/gpio/gpio216/direction```对GPIO216:取消导出(如果已导出),然后导出,设置方向为输出(但没有设置初始值,所以默认可能是低电平)。```bashcd/home/careray/XCamera_Runnable/Server/```切换到指定目录。```bash./XCamerafalse```运行当前目录下的`XCamera`程序,并传递参数`false`。```bash#exit0```注释掉的退出命令(实际不会执行),通常表示脚本正常结束。注意:脚本中操作GPIO的部分需要root权限,因此这个脚本可能需要以root用户运行。综上所述,这个脚本的主要目的是设置系统环境(禁用服务、杀死进程、设置GPIO),然后启动一个名为`XCamera`的应用程序。但是,脚本中有一个潜在问题:在操作GPIO时,如果之前没有导出过,那么`unexport`操作会失败(会向标准错误输出写入错误信息,但不会终止脚本)。这通常是无害的,因为目的是确保GPIO处于未导出状态,然后再导出。但更好的做法是检查GPIO是否已经存在,或者忽略错误。另外,在杀死进程的命令中,如果找不到`nvargus-daemon`进程,`xargskill`会收到空参数而报错,但也不会终止脚本。可以通过在`xargs`前加上`xargs-r`(如果支持)来避免。最后,运行`XCamera`程序后,脚本会阻塞在该命令,直到程序退出。然后脚本结束。相关问题:</think>以下是对这段 Shell 脚本的详细分析: ### 脚本功能概述 这是一个用于初始化嵌入式设备环境的脚本,主要功能包括: 1. 禁用系统服务 2. 设置核心转储 3. 杀死特定进程 4. 配置 GPIO 引脚 5. 启动摄像头应用程序 ### 代码逐行分析 ```bash #! /bin/bash ``` 指定脚本使用 Bash shell 解释器执行 ```bash systemctl disable nvgetty ``` 禁用 `nvgetty` 服务(NVIDIA 串行控制台服务) ```bash ulimit -c unlimited ``` 设置核心转储文件大小为无限制,允许生成完整的崩溃调试文件 ```bash ps -ef| grep nvargus-daemon | grep -v grep | awk '{print $2}' | xargs kill -9 ``` 查找并强制杀死所有 `nvargus-daemon` 进程: 1. `ps -ef` 列出所有进程 2. `grep nvargus-daemon` 过滤目标进程 3. `grep -v grep` 排除 grep 自身 4. `awk '{print $2}'` 提取进程 ID 5. `xargs kill -9` 强制杀死进程 ```bash # turn-on/off light ``` 注释说明接下来的操作与灯光控制相关 ```bash echo 50 > /sys/class/gpio/unexport echo 50 > /sys/class/gpio/export echo in > /sys/class/gpio/gpio50/direction echo falling > /sys/class/gpio/gpio50/edge ``` 配置 GPIO 50 引脚: 1. 取消导出(确保初始状态) 2. 重新导出引脚 3. 设置为输入模式 4. 配置为下降沿触发(用于检测电压从高到低的变化) ```bash echo 51 > /sys/class/gpio/unexport echo 51 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio51/direction echo 1 > /sys/class/gpio/gpio51/value ``` 配置 GPIO 51 引脚: 1. 取消导出 2. 重新导出 3. 设置为输出模式 4. 输出高电平 (1) ```bash echo 216 > /sys/class/gpio/unexport echo 216 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio216/direction ``` 配置 GPIO 216 引脚: 1. 取消导出 2. 重新导出 3. 设置为输出模式(未设置初始值,默认为低电平) ```bash cd /home/careray/XCamera_Runnable/Server/ ``` 切换到应用程序目录 ```bash ./XCamera false ``` 启动 `XCamera` 应用程序并传递参数 `false` ```bash #exit 0 ``` 注释掉的退出指令(实际不会执行) ### 关键点说明 1. **GPIO 操作**: - 使用 Linux sysfs 接口控制 GPIO - GPIO 50:输入模式,下降沿触发(适合按钮/开关检测) - GPIO 51:输出模式,初始高电平(可能控制指示灯) - GPIO 216:输出模式(可能控制其他外设) 2. **进程管理**: - 强制杀死 `nvargus-daemon`(NVIDIA 相机相关服务) - 启动自定义相机应用 `XCamera` 3. **环境配置**: - 禁用不必要的系统服务 - 开启核心转储用于调试 4. **应用启动**: - 传递 `false` 参数可能控制应用启动模式 - 脚本会阻塞在 `XCamera` 进程直到其退出 ### 典型使用场景 这看起来是一个嵌入式设备(可能是基于 NVIDIA Jetson 平台)的启动脚本,用于: 1. 准备硬件环境(GPIO 配置) 2. 清理后台服务 3. 启动自定义相机应用程序 4. 提供调试支持(核心转储) ### 潜在改进建议 1. 添加错误检查(如 GPIO 操作是否成功) 2. 使用 `-r` 参数避免空进程列表:`xargs -r kill -9` 3. 将重复的 GPIO 操作封装为函数 4. 添加日志记录功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值