#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. jQuery中的DOM操作------复制及包裹节点

    1.复制节点: 如果单击<li>元素后需要再复制一个<li>元素,可以用clone()方法来完成: $(this).clone().appendTo("ul" ...

  2. NoSQL在大数据中的应用

    一.序言 NoSQL是Not Only SQL的缩写,而不是Not SQL,指的是非关系型的数据库,它不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准.ACID属性.表结构等等.相比传统数据库 ...

  3. linux上的组管理

    上一次我们谈了CentOS上的用户管理,现在我们再来谈下CentOS上的用户组管理. groupadd创建一个新的组 用法如下: groupadd [选项] groupname 常用选项: -f 强制 ...

  4. Linux(CentOS)挂载NTFS格式的U盘、移动硬盘

    以下操作均在root下执行的 1.U盘挂载 mkdir /mnt/usb //创建一个目录,用于挂载U盘 fdisk -l //查看系统中挂载的U盘,若系统有一块硬盘sdb1 代表你的U盘,/dev/ ...

  5. 使用json文件给es中导入数据

    使用json文件可以给es中导入数据,10万条左右的数据可以一次导入,数量太大时导入就会报错.大数量的到导入还是需要用bulk方式. accounts.json文件格式如下: {"index ...

  6. 【转】TCP/IP和SOCKET的区别

    要写网络程序就必须用Socket,这是程序员都知道的.而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,w ...

  7. 如何使用JS实现banner图滚动

    通过JS实现banner图的滚动主要是定时器的应用 先新建好banner图的几张图片,最后一张与第一张用同一个,保证滚动的不间断 改好样式,需注意所有图片要在同行显示,否则不能向左滚动 声明一个函数, ...

  8. linux文件权限查看及修改-chmod ------入门的一些常识

    查看Linux文件的权限:ls -l 文件名称查看linux文件夹的权限:ls -ld 文件夹名称(所在目录)修改文件及文件夹权限:sudo chmod -(代表类型)×××(所有者)×××(组用户) ...

  9. Ubuntu下利用Apache转发模块实现反向代理

    Apache的反向代理主要利用转发模块,proxy和proxy_http 先配置 Apache 支持proxy 和 proxy_http 在Ubuntu系统下,Apache的配置文件在目录/etc/a ...

  10. 【转】egametang框架简介

    讨论QQ群 : 474643097 1.可用VS单步调试的分布式服务端,N变1 一般来说,分布式服务端要启动很多进程,一旦进程多了,单步调试就变得非常困难,导致服务端开发基本上靠打log来查找问题.平 ...