#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <stdlib.h>
#include "gpio.h"

struct gpio_params gmm;
int gpid =-1;
void main(int argc,char *argv[])
{
 char filename[20];
        int i,k;

gpid = open("/dev/gpio", O_RDWR);
 if (!gpid)
 {
     printf("GPIO initial fail\n");
  
 }

gmm.ctrl_pin = 0xc0; // choose GPIO7 pin  
 gmm.data_direct = 0xc0; //set as output pin 
 if(ioctl(gpid, GPIO_SET_DATA_DIRECT,&gmm))    
  printf("GPIO_SET_DATA_DIRECT failed\n");

for(i=0;i<10;i++)
        {
    gmm.data_out = i%2==0?0x80:0x40; 
    if(ioctl(gpid, GPIO_SET_DATA_OUTPUT,&gmm))    
   printf("GPIO_SET_DATA_OUTPUT failed\n");
         printf("%d\n",i);
  usleep(500000);

}

close(gpid);
 return ;

}

//gpio.h

#define _GM8180_Platform
struct gpio_params {
 u_int group;
 u_int  ctrl_pin; 
 u_int  data_out; 
 u_int  data_in;

u_int  int_clear;  
 u_int  data_direct;   
 u_int  int_enable;   
 u_int  int_trigger;

u_int  int_both;   
 u_int  int_riseneg;   
} gpio_params;
//Modify By Ken.Hsieh
#ifdef _GM8120_Platform
#define GPIO_SET_DATA_OUTPUT  3
#define GPIO_READ_DATA_INPUT  4 
#define GPIO_SET_DATA_DIRECT 5
#define GPIO_SET_INT            6
#define GPIO_SET_INT_FUNC       7
#define GPIO_CLEAR_INT          8
#endif

#ifdef _GM8180_Platform
#define IOC_MAGIC  'g'

#define GPIO_SET_DATA_OUTPUT    _IOWR(IOC_MAGIC, 8, gpio_params)
#define GPIO_READ_DATA_INPUT    _IOWR(IOC_MAGIC, 9, gpio_params)
#define GPIO_SET_DATA_DIRECT    _IOWR(IOC_MAGIC, 10, gpio_params)
#define GPIO_SET_INT_FUNC       _IOWR(IOC_MAGIC, 11, gpio_params)
#define GPIO_SET_INT            _IOWR(IOC_MAGIC, 12, gpio_params)
#define GPIO_CLEAR_INT          _IOWR(IOC_MAGIC, 13, gpio_params)
#endif

//makefile

LINUX_SRC := /usr/src/arm-linux-2.6/linux-2.6.14-fa
CC = arm-linux-gcc
STRIP =arm-linux-strip
INCLUDE = -I$(LINUX_SRC)/include/
INCLUDE += -I/usr/src/arm-linux-2.6/module/GPIO

TARGET1=gpio
all:
 $(CC) $(INCLUDE) gpio.c -o $(TARGET1)
 $(STRIP) $(TARGET1) 
clean:
 rm -f gpio

GM8180_gpio内核模块调试的更多相关文章

  1. Linux内核调试方法总结【转】

    转自:http://my.oschina.net/fgq611/blog/113249 内核开发比用户空间开发更难的一个因素就是内核调试艰难.内核错误往往会导致系统宕机,很难保留出错时的现场.调试内核 ...

  2. Linux驱动设计—— 驱动调试技术

    参考博客与书籍: <Linux设备驱动开发详解> <Linux设备驱动程序> http://blog.chinaunix.net/uid-24219701-id-2884942 ...

  3. 【转】Linux内核调试方法总结

    目录[-] 一  调试前的准备 二  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原子操作 四  引发bug并打印信息 1  BUG()和BUG_ON() 2  dump_sta ...

  4. Linux网络文件系统的实现与调试

    NFS协议 NFS (网络文件系统)不是传统意义上的文件系统,而是访问远程文件系统的网络协议.整个NFS服务的TCP/IP协议栈如下图所示,NFS是应用层协议,表示层是XDR,会话层是RPC,传输层同 ...

  5. Linux内核调试方法总结

    Linux内核调试方法总结 一  调试前的准备 二  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原子操作 四  引发bug并打印信息 1  BUG()和BUG_ON() 2   ...

  6. Linux 系统内核的调试

    http://www.ibm.com/developerworks/cn/linux/l-kdb/index.html 本文将首先介绍 Linux 内核上的一些内核代码监视和错误跟踪技术,这些调试和跟 ...

  7. NFS (网络文件系统)

    NFS (网络文件系统) https://www.cnblogs.com/wahaha02/p/9559345.html Linux网络文件系统的实现与调试 NFS协议 NFS (网络文件系统)不是传 ...

  8. Linux内核模块驱动加载与dmesg调试

    因为近期用到了Linux内核的相关知识,下面随笔将给出内核模块的编写记录,供大家参考. 1.运行环境 Ubuntu 版本:20.04 Linux内核版本:5.4.0-42-generic gcc版本: ...

  9. linux 内核分析+使用SystemTap调试新增内核模块

    http://blog.chinaunix.net/uid/14528823/list/1.html?cid=189394

随机推荐

  1. 面试中的Java链表

    链表作为常考的面试题,并且本身比较灵活,对指针的应用较多.本文对常见的链表面试题Java实现做了整理. 链表节点定义如下: static class Node { int num; Node next ...

  2. BZOJ 2055: 80人环游世界 [上下界费用流]

    2055: 80人环游世界 题意:n个点带权图,选出m条路径,每个点经过val[i]次,求最小花费 建图比较简单 s拆点限制流量m 一个点拆成两个,限制流量val[i],需要用上下界 图中有边的连边, ...

  3. BZOJ 2179 [快速傅里叶变换 高精度乘法]

    2179: FFT快速傅立叶 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 3108  Solved: 1599[Submit][Status][Di ...

  4. DaemonSet 典型应用场景 - 每天5分钟玩转 Docker 容器技术(129)

    Deployment 部署的副本 Pod 会分布在各个 Node 上,每个 Node 都可能运行好几个副本.DaemonSet 的不同之处在于:每个 Node 上最多只能运行一个副本. DaemonS ...

  5. JavaWeb项目架构之NFS文件服务器

    NFS简介 NFS(Network File System)即网络文件系统. 主要功能:通过网络(局域网)让不同的主机系统之间可以共享文件或目录. 主要用途:NFS网络文件系统一般被用来存储共享视频, ...

  6. Phalcon调试大杀器之phalcon-debugbar安装

    Phalcon 是一款非常火的高性能C扩展php开发框架.特点是高性能低耦合,但遗憾的是长期缺少一款得力的调试辅助工具. 目前版本主要以Laravel debugbar的具有功能为蓝本开发,并针对ph ...

  7. Windows Server 2016-抢占FSMO角色

    很多情况下,当生产域控制器发生问题无法修复的情况下,我们只能通过抢占FSMO角色以保证用户验证等正常或及时恢复.一般在同一个域环境中,我们往往都会有主备或主辅域控规划,平时工作的时候,两台域控可以实现 ...

  8. Maven文件配置

    Maven文件路径的配置 默认设置 修改之后的设置 Maven文件内容的配置 对于Maven 的 settings.xml 文件,需要注意. <mirror>镜像元素之间是互斥的,优先级是 ...

  9. GitHub中开启二次验证Two-factor authentication,如何在命令行下更新和上传代码

    最近在使用GitHub管理代码,在git命令行管理代码时候遇到一些问题.如果开起了二次验证(Two-factor authentication两个要素认证),命令行会一直提示输入用户名和密码.查找了一 ...

  10. 洛谷P4014 分配问题【最小/大费用流】题解+AC代码

    洛谷P4014 分配问题[最小/大费用流]题解+AC代码 题目描述 有 n 件工作要分配给 n 个人做.第 i 个人做第 j 件工作产生的效益为c ij. 试设计一个将 n 件工作分配给 n 个人做的 ...