改变IO的复用状态

cabbage000 2017-04-11 03:28:24
我想在用户态对一个pin进行操作,datasheet写明这个pin是个复用管脚。我想把它配置成gpio,然后使用export,dirction,value这些简单方法直接对pin进行写0,写1.

现在的问题是我看到kernel里有gpio_configure类似这样的管脚复用配置函数,但是我想直接在用户态完成对这个复用pin的配置,不知道可以实现吗? 有大神接触过吗
...全文
404 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jklinux 2017-06-19
  • 打赏
  • 举报
回复
引用 楼主 Cabbage_c 的回复:
我想在用户态对一个pin进行操作,datasheet写明这个pin是个复用管脚。我想把它配置成gpio,然后使用export,dirction,value这些简单方法直接对pin进行写0,写1. 现在的问题是我看到kernel里有gpio_configure类似这样的管脚复用配置函数,但是我想直接在用户态完成对这个复用pin的配置,不知道可以实现吗? 有大神接触过吗
这个只能自己写个设备驱动,驱动里实现根据用户接口提供的参数来设置io口的方式来工作
lr2131 2017-06-19
  • 打赏
  • 举报
回复
引用 1 楼 Cabbage_c 的回复:
或者在内核里哪个地方去实现对pin的复用配置。可能是kernel调用GPIO初始化这里吗
这个我感觉可能给不了你满意的答案。 首先要纠正个小错误,pin的配置那些都属于驱动层的,当然驱动层和内核层也是联系紧密的,说pin在内核的哪个地方去配置复用,这个说法有点蹩脚,但不妨碍表达。 我玩过几种厂家的开发板,感觉就算是pin的初始化这样基本的配置,每家也都有区别。 好像是从2.6的内核版本开始,Linux加入了内核设备树,那么配置pin这样的工作,在DTS和DTC等配置文件中就可以简单轻松搞定了。 而那些没有内核设备树的内核版本呢,有可能需要你在代码中去配置,这相对于有内核设备树的来说当然会麻烦一下。 另外,有的厂家会在内核驱动代码中引入配置文件,实现的机制不知道是否和内核设备树一样,但用起来的外部特性却是十分相识。 在开发中,你会遇到各种各样方式的要求,建议把底层原理性的东西搞清楚,好好看看开发手册,上面的架子或工具自然也都清楚了。 都是
lr2131 2017-06-19
  • 打赏
  • 举报
回复
引用 楼主 Cabbage_c 的回复:
我想在用户态对一个pin进行操作,datasheet写明这个pin是个复用管脚。我想把它配置成gpio,然后使用export,dirction,value这些简单方法直接对pin进行写0,写1. 现在的问题是我看到kernel里有gpio_configure类似这样的管脚复用配置函数,但是我想直接在用户态完成对这个复用pin的配置,不知道可以实现吗? 有大神接触过吗
一般不建议在用户态下直接修改pin的配置,因为用户态下一般是看不到pin的实际物理地址的。即使你查到了pin的物理地址,在用户态下直接操作寄存器,虚拟内存管理单元可能会重映射操作地址,或者不允许你直接操作寄存器地址! 如果你确实需要在用户态下操作寄存器,也不是不行,在驱动中流出接口到应用层,这样应用层就可以间接的操作到寄存器。 另外,你说的export,dirction,value这些简单方法,这个我也不知道哦,你知道的话,告诉我一下。
cabbage000 2017-04-11
  • 打赏
  • 举报
回复
或者在内核里哪个地方去实现对pin的复用配置。可能是kernel调用GPIO初始化这里吗

21,595

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧