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口的值即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值