社区
驱动开发/核心开发
帖子详情
Linux应用程序控制GPIO,给个简单的完整操作范例
dzjsxylmj
2011-06-17 03:37:47
s3c2440 FL开发板,想不写GPIO驱动程序,直接在应用程序中驱动GPIO,求一个简单可行的操作范例,谢谢。我得内核版本是2.6.31.
...全文
1576
11
打赏
收藏
Linux应用程序控制GPIO,给个简单的完整操作范例
s3c2440 FL开发板,想不写GPIO驱动程序,直接在应用程序中驱动GPIO,求一个简单可行的操作范例,谢谢。我得内核版本是2.6.31.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
booboo18
2012-05-05
打赏
举报
回复
楼主的问题不知道解决没有呢?我也想用个驱动GPIO口的应用程序,驱动要是内核带了得话,不是应该写个驱动就行了么?
丰满
2011-07-20
打赏
举报
回复
恩,是可以在应用层做的,有知道gpio的真实的物理地址,映射,呵呵,那还不如自己写个gpio的驱动的了,多简单啊
tian0xin0
2011-07-13
打赏
举报
回复
直接在应用层写驱动,你需要知道控制GPIO灯的寄存器地址。一般的话在开发板的使用手册里面都应该有。下面的代码是研祥工控主板上应用层直接控制GPIO口的代码:
#define INDEX_PORT 0x2E
#define DATA_PORT 0x2F
void GPIOControl::GPIOInitialize()
{
//comment out to test code on platform without GPIO
unsigned char tmp_val;
if(ioperm(INDEX_PORT,2,1))
{
printf("ioperm error!\n");
}
outb(0x87, INDEX_PORT);
outb(0x87,INDEX_PORT);
outb(0x29,INDEX_PORT);
tmp_val = (inb(DATA_PORT )|0x02)&0xfb;
outb(tmp_val, DATA_PORT);
outb(0x2c, INDEX_PORT);
tmp_val = inb(DATA_PORT ) &0x7f;
outb(tmp_val, DATA_PORT);
outb(0x07, INDEX_PORT);
outb( 0x09, DATA_PORT);
outb(0x30 ,INDEX_PORT);
outb(0x03,DATA_PORT);
outb(0xe3, INDEX_PORT);
tmp_val = inb(DATA_PORT) & 0xfc;
outb(tmp_val, DATA_PORT);
outb( 0xf0 ,INDEX_PORT);
tmp_val = (inb(DATA_PORT)& 0x3f) | 0x33;
outb(tmp_val, DATA_PORT);
}
void GPIOControl::Out_Lev(int pin, int lev_val)
{
//comment out to test code on platform without GPIO
GPIOInitialize();
unsigned char oldval;
int pin_val[4] = {36, 37, 20, 21};
unsigned int reg_val[4] = {0xf1, 0xf1, 0xe4, 0xe4};
outb(0x07,INDEX_PORT);
outb(0x09, DATA_PORT);
outb(reg_val[pin - 1] +1,INDEX_PORT);
oldval = inb(DATA_PORT) & ( ~ (0x01 << pin_val[pin -1] % 10));
outb(oldval,DATA_PORT);
outb(reg_val[pin -1],INDEX_PORT);
oldval = inb(DATA_PORT);
oldval = lev_val? oldval|(0x01 << pin_val[pin -1]%10): oldval& (~ (0x01 << pin_val[pin-1] % 10));
outb( oldval,DATA_PORT);
}
hotspring110
2011-07-09
打赏
举报
回复
直接操作不行啊,你可以用汇编写的试试!
皮CaPr
2011-07-09
打赏
举报
回复
不写驱动那还要操作系统做什么。
2440的GPIO驱动三星在内核源码中已经写好。你直接在内核中使用GPIO的通用接口函数啦。
GPIO驱动也提供了用户接口的,在/sys/class/gpio下面,可以在网上的查相关资料看怎么使用。
哥特de忧伤
2011-07-07
打赏
举报
回复
把寄存器的地址映射到用户空间,就可以正常操作了
zheguzai000
2011-07-07
打赏
举报
回复
要想不写驱动就裸机开发
dthxman
2011-07-05
打赏
举报
回复
不可能,楼主别幻想了。
victor0423
2011-07-05
打赏
举报
回复
我想也不太可能,如果这样的话还要驱动干嘛呢。。
embedarmwince
2011-07-03
打赏
举报
回复
找个代码看就可以了,网络上大把
kelsel
2011-07-02
打赏
举报
回复
你的意思是指LINUX系统下,编写应用程序直接控制GPIO口,而不编写对应的驱动?
如果是这样的话,这个应用程序是写不出来的。因为在操作系统层面,我们访问的都是虚拟地址,而GPIO口跟具体硬件相关联,属于物理地址。驱动就是将物理地址映射为虚拟地址,为应用层提供GPIO口的控制操作而存在的。
Linux
下
控制
GPIO
的三种方法
gpio
在
Linux
中的应用层
操作
gpio
的方法
背景: 由于在调试WiFi驱动模块的时候需要增加一个功能:就是用户按下一个按键就可以,将WiFi的ssid和psk恢复到出场模式。所以这里就需要开辟一个线程去检测按键的状态。第一步首先是用户按下按键后应用层能够检测到相应的
gpio
的电平的变化。
gpio
的状态应该是mpu中最基本的
操作
,所以在厂家提供的SDK中应该已经有相应的驱动了,所以用户层可以直接使用,通过上网...
Zynq-7000系列之
linux
开发学习笔记:
Linux
下的MIO/EMIO
GPIO
驱动与
操作
(八)
开发板:Zynq7030数据采集板 PC平台:Ubuntu-18.04 + MobaXterm 开发环境:Xilinx Vivado + SDK -18.3 交叉编译工具:arm-
linux
-gnueabihf- 学习目标:通过
Linux
下
GPIO
驱动
控制
开发板上的LED灯 一、Zynq
Linux
的
GPIO
驱动 在前面文章:Zynq-7000系列之
linux
开发学习笔记:PS和PL端的GPI...
linux
下
gpio
控制
它的作用是允许用户请求并使能特定的
GPIO
引脚,以便可以通过。文件写入
GPIO
引脚的编号来导出该引脚。文件的作用是将指定的
GPIO
引脚暴露给用户空间,这样你就可以对它进行
控制
(例如配置为输入或输出,并读取或写入数据)。的作用是允许用户请求并启用某个
GPIO
引脚,通过将
GPIO
引脚编号写入该文件,用户可以在。当你希望在
Linux
系统中使用某个特定的
GPIO
引脚时,你需要通过。是你导出的
GPIO
引脚编号。下找到该引脚的
控制
文件,进而对该
GPIO
引脚进行
操作
。
linux
设备驱动程序——
gpio
控制
在
gpio
初始化的函数中添加这个接口,在加载完成之后查看/sys/class/
gpio
/目录下是否有相应的
gpio
$num(这里是
gpio
26)文件(需要注意的是,在上例中,当用户程序打开设备时才进行
gpio
的初始化,关闭文件时释放
gpio
的资源,所以需要打开文件再
操作
)。当用户程序执行时,用户程序一直获取用户的输入,根据用户输入"on"或者"off",然后将其写入设备文件,触发系统调用,设备文件根据设备号找到内核中相应的file_operation结构体,相应write函数被调用,执行相应的点灯
操作
。
驱动开发/核心开发
21,620
社区成员
21,709
社区内容
发帖
与我相关
我的任务
驱动开发/核心开发
硬件/嵌入开发 驱动开发/核心开发
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章