GPIO驱动写错,导致内存出现问题,系统死掉

解决方法:

请教了别人,噶偶我让我用nfs挂载,但搞了半天,只是把PC上的文件挂载到了开发板上,比较郁闷

后来在系统快起的时候kill掉自启动的QT程序,卸载自己装载的驱动,然后用FLASHFXP进入系统文件目录(原来不进行上面的操作进入不来了),然后打开rcs文件修改开机启动项,搞定了。


需要学习的:1.NFS文件系统的挂载, 2.直接操作寄存器来设置GPIO口时最好用ioremap来设置


这个问题解决后又回到了起点,写一个GPIO的驱动完成读取数据。

  1. GPIO是与硬件体系密切相关的,linux提供一个模型来让驱动统一处理GPIO,即各个板卡都有实现自己的gpio_chip控制模块:request, free, input,output, get,set,irq...然后把控制模块注册到内核中,这时会改变全局gpio数组:gpio_desc[]. 当用户请求gpio时,就会到这个数组中找到,并调用这个GPIO对应的gpio_chip的处理函数。gpio实现为一组可用的 gpio_chip, 由驱动传入对应 gpio的全局序号去 request, dataout ,datain, free. 这时会调用gpio_chip中具体的实现。
  2. gpio是一组可控件的脚,由多个寄存器同时控制。通过设置对应的寄存器可以达到设置GPIO口对应状态与功能。数据状态,输入输出方向,清零,中断(那个边沿触发), 一般是一组(bank)一组的。
  3. 寄存器读写函数: __raw_writel() __raw_writeb() __raw_readl() __raw_readb()
原来写的驱动是直接对寄存器操作的,也没有进行内存映射:iormap(),导致内存奔溃的,在网上找到了上面一段话,可以直接内核的接口操作GPIO口。现在也有点理解:驱动是基于内核的,应用层是基于任务的

GPIO口驱动的编写:
1.申请GPIO口;2.注册设备;3.创建GPIO的sysfs的相关文件

自己的程序中的GPIO驱动应用:
#include  <linux/gpio.h>
//初始化GPP引脚8,设置为输入
s3c_gpio_setpull(S3C64XX_GPP(8),S3C_GPIO_PULL_UP);
       s3c_gpio_cfgpin(S3C64XX_GPP(8),S3C_GPIO_INPUT);
再用gpio_get_value(/*GPIO口*/);获取相应GPIO口的值即可

阅读更多
上一篇关于继电器的串口通信的写法
下一篇2013年11.25本周计划
想对作者说点什么? 我来说一句

GPIO驱动和例程 GPIO驱动和例程

2011年04月06日 2.52MB 下载

没有更多推荐了,返回首页

关闭
关闭