代码示例_poll的多路复用

发布者:DazzlingSmile最新更新时间:2025-02-06 来源: cnblogs关键字:多路复用  S5PV210 手机看文章 扫描二维码
随时随地手机看文章

    for(i = 0; i < ARRAY_SIZE(buttons_set);i++){

        free_irq(buttons_set[i].irqno,&buttons_set[i]);

    }

    device_destroy(button_dev->cls,button_dev->devno);

    class_destroy(button_dev->cls);

    cdev_del(button_dev->cdev);

    unregister_chrdev_region(button_dev->devno,1);

    kfree(button_dev);

}


//声明和认证

module_init(button_init);

module_exit(button_exit);

MODULE_LICENSE('GPL');


#include

#include

#include

#include

#include

#include

#include

#include

#include

#include <linux/input.h>


//定义一个按键的数据包

struct button_event{

    int code;    //按键的名称---键值:KEY_DOWN

    int value;        //按键的状态---按下:1,松开:0

};


int main(void)

{


    int fd;

    int ret;

    struct button_event event;

    struct pollfd pfds[2];

    char buf[128];


    fd = open('/dev/button',O_RDWR);

    if(fd < 0){

    perror('open');

    exit(1);

    }


    pfds[0].fd = 0;        //标准输入文件描述符

    pfds[0].events = POLLIN;    //是否可读


    pfds[1].fd = fd;        //开发板中的键盘

    pfds[1].events = POLLIN;    //按键是否触发中断



    while(1){


    ret = poll(pfds,2,-1);

    if(ret < 0){

        perror('poll');

        exit(1);

    }

    if(ret > 0){


        //标准输入可读

        if(pfds[0].revents & POLLIN){

        fgets(buf,sizeof(buf),stdin);

        printf('%s',buf);

        }

        //开发板中的按键触发了中断 

        if(pfds[1].revents & POLLIN){


        bzero(&event,sizeof(event));

        ret = read(fd,&event,sizeof(event));

        if(ret < 0){

            perror('read');

            exit(1);

        }


        switch(event.code){

            case KEY_UP:

            if(event.value)

                printf('按下了上键!n');

            else

                printf('松开了上键!n');

            break;

            case KEY_DOWN:

            if(event.value)

                printf('按下了下键!n');

            else

                printf('松开了下键!n');

            break;

            case KEY_LEFT:

            if(event.value)

                printf('按下了左键!n');

            else

                printf('松开了左键!n');

            break;

            case KEY_RIGHT:

            if(event.value)

                printf('按下了右键!n');

            else

                printf('松开了右键!n');

            break;

        }

        }

    }

    }


    close(fd);

    return 0;

}


#指定内核源码路径

KERNEL_DIR = /home/farsight/s5pv210/kernel/linux-3.0.8

CUR_DIR = $(shell pwd)

MYAPP = test


all:

    #让make进入内核源码编译,同时将当前目录中的c程序作为内核模块一起编译

    make -C $(KERNEL_DIR) M=$(CUR_DIR) modules

    arm-none-linux-gnueabi-gcc -o $(MYAPP) $(MYAPP).c


clean:

    #删除上面编译生成的文件

    make -C $(KERNEL_DIR) M=$(CUR_DIR) clean

    rm -rf $(MYAPP)


install:

    cp *.ko $(MYAPP) /opt/rootfs/drv_module


#指定当前目录下哪个文件作为内核模块编

obj-m = button_drv.o


Stay hungry, stay foolish 待续。。。


[1] [2]
关键字:多路复用  S5PV210 引用地址:代码示例_poll的多路复用

上一篇:内核提供的读写寄存器接口实现可移植性
下一篇:ARM—配置交叉编译环境

推荐阅读最新更新时间:2026-03-13 14:58

基于Select/Poll实现并发服务器(一)
开发环境: RT-Thread版本:4.0.3 操作系统:Windows10 Keil版本:V5.30 RT-Thread Studio版本:2.0.1 开发板MCU:STM32H750XB LWIP:2.0.2 并发服务器支持多个客户端的同时连接,最大可接入的客户端数取决于内核控制块的个数。当使用Socket API时,要使服务器能够同时支持多个客户端的连接,必须引入多任务机制,为每个连接创建一个单独的任务来处理连接上的数据,多任务可以是多线程或者多进程,这是最常用的并发服务器设计。但是多线程/多进程消耗资源多,处理起来也比较复杂,本文将基于LWIP协议栈的Select/Poll机制实现并发服务器。 1 IO模型概述 在
[单片机]
基于Select/<font color='red'>Poll</font>实现并发服务器(一)
07-S3C2440驱动学习(一)嵌入式linux字符设备驱动-查询+中断+引入poll机制的按键驱动程序
一、查询方式的按键驱动程序 查询方式的按键驱动程序,与LED驱动程序类似,我们来复习一下上节的写好的字符设备驱动程序框架,改写出查询方式的按键驱动程序。 (1)按键驱动程序如下: Open中配置引脚 Read中返回引脚状态 入口函数:地址映射 虚拟地址 #include linux/module.h #include linux/kernel.h #include linux/fs.h #include linux/init.h #include linux/delay.h #include asm/uaccess.h #include asm/irq.h #include asm/io.h #
[单片机]
07-S3C2440驱动学习(一)嵌入式linux字符设备驱动-查询+中断+引入<font color='red'>poll</font>机制的按键驱动程序
字符设备驱动程序之poll机制
驱动源码: #include linux/module.h #include linux/kernel.h #include linux/fs.h #include linux/init.h #include linux/delay.h #include linux/irq.h #include asm/uaccess.h #include asm/irq.h #include asm/io.h #include asm/arch/regs-gpio.h #include asm/hardware.h #include linux/poll.h int major = 0; st
[单片机]
字符设备驱动程序之<font color='red'>poll</font>机制
S5PV210 三个Camera Interface/CAMIF/FIMC的区别
S5PV210有三个CAMIF单元,分别为CAMIF0 CAMIF1和CAMIF2。对应着驱动中的fimc0, fimc1, fimc2。在三星datasheet和驱动代码中CAMIF和FIMC(Fully Interactive Mobile Camera)这两个术语基本上可以互换的,后面我们都用FIMC代替CAMIF。这两个术语的称呼有很强的模糊性,尤其刚刚接触三星平台,会觉得这三个接口设备都是用来控制camera,实际上三个接口并不局限于只控制camera。 我们先看下datasheet中定义的CAMIF feature - 输入支持 1. ITU-R BT601/656/709 mode 2. DMA模式 3.
[单片机]
S5PV210 固件烧写 u-boot烧写
首先阅读CW210_CD自带光盘中CW210 开发板使用手册.pdf 使用usb 拨码开关置成usb启动。xx可以是ON或OFF。开发板上面也有丝印提示 usb线接好,串口线接好 使用DNW下载 自带光盘的usb驱动(x210 usb Driver)只适用于XP系统,如果在Windows 7下使用usb下载,只能使用linux dnw代替 配置DNW串口和下载地址,0xd0020010是x210_usb.bin的下载地址 连接串口,显示连接成功 此时,长按开发板复位按键 直到USB连接显示OK 现在可以通过usb发送文件,首先发送x210_usb.bin 修改下载地址,0x23e00000是u-boot.bin的下
[单片机]
<font color='red'>S5PV210</font> 固件烧写 u-boot烧写
S5PV210根文件系统的制作(一)
一、基本概念 文件管理:数据管理算法 文件系统:管理文件算法的载体 文件系统的功能:管理分区上的数据(增删查改) 文件系统的分类:fat32/ntfs/ext3/ext4/yaffs/jffs/cramfs/..... 文件系统的表现形态:   window--------- 森林   linux------------ 树 ------- 文件目录标准 文件系统与根文件系统:   根文件系统:  系统启动时加载的助文件系统   其他文件系统:  根系统启动后挂载的其他文件系统 二、需要用到的工具 busybox-1.20.2.tar,yaffs2-source,bash-4.0.t
[单片机]
【ARM裸机s5pv210 】时钟配置
clock.c // 时钟控制器基地址 #define ELFIN_CLOCK_POWER_BASE 0xE0100000 // 时钟相关的寄存器相对时钟控制器基地址的偏移值 #define APLL_LOCK_OFFSET 0x00 #define MPLL_LOCK_OFFSET 0x08 #define APLL_CON0_OFFSET 0x100 #define APLL_CON1_OFFSET 0x104 #define MPLL_CON_OFFSET 0x108 #define CLK_SRC0_OFFSET 0x200 #define CL
[单片机]
【ARM裸机s5pv210 】重定位操作
makefile final.bin: start.o led.o arm-linux-ld -Tlink.lds -o start.elf $^ //link.lds为链接脚本,指定链接地址 arm-linux-objcopy -O binary start.elf final.bin arm-linux-objdump -D start.elf start_elf.dis %.o : %.S arm-linux-gcc -o $@ $ -c -nostdlib %.o : %.c arm-linux-gcc -o $@ $ -c -nostdlib clean: rm *.o *
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved