/*-------------------------
*先申明下,本人是个菜鸟,刚开始接触驱动程序编写,交代下开发环境(主机系统redhat6.3,开发板ARM-s3c6410)
以watchdog (看门狗,俗称狗中断)为例,编写简单的中断(驱动)
-------------------------*/
#include <linux/init.h>
#include <linux/module.h>
#include <asm/io.h>
#include <linux/cdev.h>
#include <linux/fs.h>
#include <linux/irq.h>
#include <linux/interrupt.h> MODULE_LICENSE("GPL");
MODULE_AUTHOR("cheng"); typedef struct mydev{
unsigned long gpio_virt;
unsigned long wdt_virt;
unsigned long *gpmcon, *gpmdat;
unsigned long *wtcon, *wtdat, *wtcnt, *wtclrint;
void (*init_nydev)(struct mydev *this);
void (*exit_mydev)(struct mydev *this);
irqreturn_t (*do_irq)(int irq, struct mydev *this);
void (*led_on)(struct mydev *this);
void (*led_off)(struct mydev *this);
void (*wdt_on)(struct mydev *this);
void (*wdt_off)(struct mydev *this);
}MYDEV; void my_init_mydev(struct mydev *this);
void my_exit_mydev(struct mydev *this);
irqreturn_t my_do_irq(int irq, struct mydev *this);
void my_led_on(struct mydev *this);
void my_led_off(struct mydev *this);
void my_wdt_on(struct mydev *this);
void my_wdt_off(struct mydev *this); MYDEV my ;
static int test_init(void)
{
printk("hello,in my test_init\n");
my.init_mydev = my_init_mydev;
my.exit_mydev = my_exit_mydev;
my.init_mydev(&my); return 0;
} void test_exit()
{
my.exit_mydev(&my);
printk("this is test exit\n");
} module_init(test_init);
module_exit(test_exit); void my_init_mydev(struct mydev *this)
{
this->do_irq = my_do_irq;
this->led_on = my_led_on;
this->led_off = my_led_off;
this->wdt_on = my_wdt_on;
this->wdt_off = my_wdt_off;
int ret = request_irq(IRQ_WDT, this->do_irq, IRQF_SHARED,"hello", this);
if(ret < 0){
printk("request_irq error\n");
return ;
}
this->gpio_virt = ioremap(0x7f008000, SZ_4K);
this->wdt_virt = ioremap(0x7e004000, SZ_4K);
this->gpmcon = this->gpio_virt + 0x820;
this->gpmdat = this->gpio_virt + 0x824;
this->wtcon = this->wdt_virt + 0x00;
this->wtdat = this->wdt_virt + 0x04;
this->wtcnt = this->wdt_virt + 0x08;
this->wtclrint = this->wdt_virt + 0x0c;
this->wdt_on(this);
} void my_exit_mydev(struct mydev *this)
{
this->my_wtd_off(this);
iounmap(this->wdt_virt);
iounmap(this->gpio_virt);
free_irq(IRQ_WDT,this);
} irqreturn_t my_do_irq(int irq, struct mydev *this)
{
if(irq == IRQ_WDT){
*this->wtclrint = 0;
printk("wang wang wang\n");
static int flag = 1;
if(flag)
this->led_on(this);
else
this->led_off(this);
flag ^= 1;
}
return IRQ_HANDLED;
} void my_led_on(struct mydev *this)
{
*this->gpmcon = 1;
*this->gpmdat = 0;
} void my_led_off(struct mydev *this)
{
*this->gpmcon = 1;
*this->gpmdat = 1;
} void my_wdt_on(struct mydev *this)
{
*this->wtcon = (1 << 2) | (1 << 3) | (1 << 5) | (31 << 8);
*this->wtdat = 0x4000;
*this->wtcnt = 0x8000;
} void my_wdt_off(struct mydev *this)
{
*this->wtcon = 0;
}

/*
    下面是makefile内容:
*/

all:
make -C linux-2.6.28_smdk6410 M=`pwd` modules
clean:
make -C /linux-2.6.28_smdk6410 M=`pwd` clean
rm -rf modules.order
obj-m += test.o

面向对象之编写驱动程序--中断(linux系统、s3c6410开发板)的更多相关文章

  1. 【嵌入式】安装Linux系统到开发板

    一.开发板基本介绍 Flash --相当于硬盘 RAM -- 内存 Micro USB或232串口 连电脑 USB 接口连摄像头 启动方式 选择开关 :SD卡启动或NAND FLASH 启动 USB转 ...

  2. 014安装Linux系统到开发板

    SD卡----->开发板 1.安装准备: 硬件连接 USB下载线,一端连到开发板,另一端连到PC机: 串口线连好: 电源线连好: 设置开发板从SD卡启动: 2.打开开发板进入选单界面: 进入选单 ...

  3. part1:15-安装Linux系统到开发板

    1.Qtopia简介 Qtopia是Trolltech公司为采用嵌入式Linux操作系统的消费电子设备而开发的综合应用平台,Qtopia包含完整的应用层.灵活的界面用户.窗口操作系统.应用程序启动程序 ...

  4. 7、linux系统2440开发板域名解析问题

    如果在linux系统中ping某一台电脑的ip地址可以ping 通: ~ >: ping 192.168.1.3PING 192.168.1.3 (192.168.1.3): 56 data b ...

  5. 嵌入式linux系统应用开发

    关于嵌入式系统   平时大家说的嵌入式其实范围比较广的,是一种软硬件可裁剪,以应用为中心开发的专用系统,硬件平台可以是单片机,或者以ARM系列的处理器.单片机一般直接裸奔程序,不过现在有了好多基于单片 ...

  6. 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)

    深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...

  7. linux 3.4.103 内核移植到 S3C6410 开发板 移植失败 (问题总结,日本再战!)

    linux 3.4.103 内核移植到 S3C6410 开发板 这个星期差点儿就搭在这里面了,一開始感觉非常不值得,移植这样的浪费时间的事情.想立刻搞定,然后安安静静看书 & coding. ...

  8. 搭建测试环境——针对S3C6410开发板

    (一)前言 目前市面上的开发板型号和种类很多,但目前最流行的是基于三星S3C6410 ARM11架构的开发板.国内很多厂商在S3C6410 ARM11架构的开发板的基础上进行了扩展,开发了扩展板,本博 ...

  9. 搭建S3C6410开发板的测试环境

      因为ARM架构的开发板可基于X86架构的PC在CPU指令以及二进制上都有所不同,而且如果linux驱动需要访问硬件,这些硬件很难在PC上模拟,所以就需要我们在带有这些硬件的开发板上进行调试和测试. ...

随机推荐

  1. Java中的基本数据类型和引用数据类型的区别

    一.数据类型 Java中的数据类型分为两大类,基本数据类型和引用数据类型. 1.基本数据类型 基本数据类型只有8种,可按照如下分类 ①整数类型:long.int.short.byte ②浮点类型:fl ...

  2. C++第三十五篇 -- 写第一个驱动开发程序

    VS2017+WDK+VMware12+Win10环境配置完毕,接下来写第一个驱动程序. 1.新建一个KMDF的程序. 2.配置项目属性. 3.编译项目.一般这里应该成功,我一台电脑成功了,另一台电脑 ...

  3. Table类

    Interpreter类, class Interpreter: public CC_INTERP_ONLY(CppInterpreter) NOT_CC_INTERP(TemplateInterpr ...

  4. 构建后端第4篇之---spring 源码阅读构建环境

    解决 IDEA 创建 Gradle 项目没有src目录问题 in new model named zyt-study   root dir there are  a build.gradle plug ...

  5. JavaScript-编译与闭包

    编译原理 尽管 JavaScript 经常被归类为"动态"或"解释执行"的语言,但实际上它是一门编译语言.JavaScript 引擎进行的编译步骤和传统编译语言 ...

  6. Linux的链接(入门)

    Linux的链接分为两种:硬链接和软链接 硬链接:如果B是A的硬链接,那么B和A指向同一个文件,但是删除A并不会影响B->允许一个文件有多个路径 软链接:类似Windows下的快捷方式,删除原文 ...

  7. XCTF-simple unpack

    题目提示这是一个加壳的二进制文件,拖到exeinfope,是UPX壳. 这里我们用linux命令upx -d脱壳. 脱完壳之后拉入ida64中分析.找到main函数,可以看到这一句可以是输出flag的 ...

  8. XCTF-Web进阶-upload1

    显然是让我们上传文件,思路当然是上传一个木马文件,然后通过蚁剑连接查看目录获取flag. 但是当我们想要上传php文件的时候会出现弹窗,并且连"上传"按钮都被禁用了. ext = ...

  9. 一周内被程序员疯转3.2W次,最终被大厂封杀的《字节跳动Android面试手册》!

    一眨眼又到金三银四了,不知道各位有没有做好跳槽涨薪的准备了呢? 今天的话大家分享一份最新的<字节跳动Android面试手册>,内容包含Android基础+进阶,Java基础+进阶,数据结构 ...

  10. 字节跳动已经10万人了?渣本双非Android程序员怎么上车?

    字节跳动已经 10 万人了? 是的,在 2020 年字节跳动的员工总数从 6 万蹿到 10 万,平均每个工作日就有 150 人在办理入职,加入字节跳动全球超过 240 个办公点. 更有统计,在总部北京 ...