- 浏览: 171177 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
静夜一曲:
设置完成后,为什么用svnX连不上呢?比如我设置的是~/svn ...
Mac OSX 也变成svn服务器 -
qvb3d:
object 文件了gcc -c add.c 之后的文件
如何在Mac OSX 中制作dylib和使用dylib -
hhb19900618:
你好 没明白 gcc add.o 是啥意思 为啥后面.o? ...
如何在Mac OSX 中制作dylib和使用dylib -
qvb3d:
Thank Comments !!
svn hooks 自动发邮件 -
jimjim123:
Thanks to share,It's very usefu ...
svn hooks 自动发邮件
#include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> #include <linux/fs.h> #include <linux/mm.h> #include <linux/cdev.h> #include <linux/errno.h> #include <linux/types.h> #include <linux/interrupt.h> #include <linux/delay.h> #include <linux/errno.h> #include <linux/sched.h> #include <asm/semaphore.h> #include <asm/system.h> #include <asm/uaccess.h> #include <asm/arch/irqs.h> #include <asm/io.h> #include <linux/version.h> #include <asm/hardware.h> #include <linux/delay.h> #include <asm/arch/sep4020_hal.h> #define DRIVE_MAJOR 165 #define DRIVE_NAME "Test drv" typedef struct { dev_t dev_num ; struct cdev cdev ; }code_dev ; static code_dev test_dev ; unsigned char data_source; unsigned char *testmap; unsigned char *kmalloc_area; unsigned long msize; static int test_open(struct inode *inode , struct file *filp) { return 0 ; } static int test_close(struct inode *inode , struct file *filp) { return 0 ; } static ssize_t test_write(struct file *filp, const char __user *buf,size_t count, loff_t *ppos) { if(copy_from_user(&data_source,buf,sizeof(data_source))) { printk("write error!\n"); } return(sizeof(data_source)); } static ssize_t test_read(struct file *filp, char __user *buf,size_t count,loff_t *ppos) { if(copy_to_user(buf,&data_source,sizeof(data_source))) { printk("read error!\n"); } return(sizeof(data_source)); } static int test_mmap(struct file *file,struct vm_area_struct *vma) { int ret; ret=remap_pfn_range(vma,vma->vm_start,virt_to_phys((void *)((unsigned long)kmalloc_area))>>PAGE_SHIFT,vma->vm_end-vma->vm_start,PAGE_SHARED); if(ret!=0) { return -EAGAIN; } return ret; } static int test_ioctl(struct inode *inode, struct file *filp,unsigned int cmd, unsigned long arg) { int result; int i; switch(cmd) { case 0: { result=0; } break; case 1: { result=1; } break ; case 2: { for(i=0;i<20;i++) { printk("i=%d %c\n",i,*(testmap+i)); } result=2; } break; default: return -ENOTTY; } return(result); } static struct file_operations test_fs = { .owner = THIS_MODULE , .open = test_open , .release = test_close , .read = test_read , .write = test_write , .mmap = test_mmap, .ioctl = test_ioctl }; static int __init test_init(void) { unsigned int ret ; unsigned char *virt_addr; memset(&test_dev , 0 ,sizeof(test_dev)) ; test_dev.dev_num = MKDEV(DRIVE_MAJOR , 0) ; ret = register_chrdev_region(test_dev.dev_num , 1 ,DRIVE_NAME) ; if(ret < 0) { return(ret) ; } cdev_init(&test_dev.cdev , &test_fs) ; test_dev.cdev.owner = THIS_MODULE ; test_dev.cdev.ops = &test_fs ; printk("\nInit drv \n") ; ret = cdev_add(&test_dev.cdev , test_dev.dev_num , 1) ; if(ret < 0) { printk("cdev add error !\n") ; return(ret) ; } testmap=kmalloc(4096,GFP_KERNEL); kmalloc_area=(int *)(((unsigned long)testmap +PAGE_SIZE-1)&PAGE_MASK); if(testmap==NULL) { printk("Kernel mem get pages error\n"); } for(virt_addr=(unsigned long)kmalloc_area;virt_addr<(unsigned long)kmalloc_area+4096;virt_addr+=PAGE_SIZE) { SetPageReserved(virt_to_page(virt_addr)); } memset(testmap,'q',100); printk("Test drv reg success !\n") ; return 0 ; } static void __exit test_exit(void) { printk("Test drv exit\n") ; cdev_del(&test_dev.cdev) ; unregister_chrdev_region(test_dev.dev_num , 1) ; } MODULE_LICENSE("GPL") ; module_init(test_init) ; module_exit(test_exit) ;
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/mman.h> #include <fcntl.h> #include <string.h> #define max_num 4096 int main(int argc,char *argv[]) { int fd; int ret; unsigned char *rwc,*rrc; unsigned int *map; unsigned char ** newmap; rwc=malloc(sizeof(unsigned char)); rrc=malloc(sizeof(unsigned char)); *rwc=50; *rrc=30; fd=open("/dev/drvio1",O_RDWR); if(fd<0) { printf("open file error!\n"); return -1; } ret=write(fd,rwc,sizeof(rwc)); ret=read(fd,rrc,sizeof(rrc)); printf("rwc =%d\nrrc =%d\n",*rwc,*rrc); *rwc=10; ret=write(fd,rwc,sizeof(rwc)); ret=read(fd,rrc,sizeof(rrc)); printf("rwc =%d\nrrc =%d\n",*rwc,*rrc); ioctl(fd,2,0); if((map=(unsigned int *)mmap(NULL,max_num,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0))==MAP_FAILED) { printf("mmap error!\n"); } memset(map,'c',max_num); strcpy(map,"Welcome"); ioctl(fd,2,0); munmap(map,4096); map=NULL; close(fd); return 0; }
AR = ar ARCH = arm CC = arm-linux-gcc #ifneq ($(KERNELRELEASE)) obj-m:= drv.o #else KDIR = /decard_dev/linux-v3.4.4 PWD:=$(shell pwd) default: $(MAKE) -C $(KDIR) M=$(PWD) modules arm-linux-gcc tdrv.c -o tdrv arm-linux-gcc tdrv1.c -o tdrv1 rm -rf *.mod.c *.mod.o *.o rm -rf .*.ko.cmd .*.mod.o.cmd .*.o.cmd .tmp_versions clean: rm -rf *.o *.ko *.mod.c tdrv tdrv1 rm -rf .*.ko.cmd .*.mod.o.cmd .*.o.cmd .tmp_versions #endif
mknod /dev/drvio1 c 165 0
- drv_mmap_20120821.tar.bz2 (2.4 KB)
- 下载次数: 4
发表评论
-
使用OpenSSL 以密文重设密码 chpasswd
2013-07-03 14:32 2851openssl passwd -1 >mypass ... -
openssl 使用
2013-07-03 14:30 5969OpenSSL OpenSSL 包含一个命令行工具用来 ... -
显示文件内容
2013-01-17 21:08 745#include <stdio.h> # ... -
结构体函数指针
2012-08-31 09:50 1252#include <stdio.h> typ ... -
Linux kernel logo
2012-08-03 16:23 2270这里讲解我们新添加一组数据实现开机LOGO的方法: 第 ... -
创建一个linux 静态库
2012-06-13 10:23 1148创建一个linux 静态库 1.我们先写一个简单的函数 ... -
java 调用gcc so
2012-06-01 11:19 1179java 调用gcc so mkdi ... -
查看一个int的所在内存bits
2012-05-15 10:52 1123#include <stdio.h> ... -
在进程中的线程通信pthread fork
2012-05-09 14:53 1834这几天一直被人问,你做过线程和进程吗? 以下写个例子 ... -
qt开发webkit
2012-05-04 13:24 5002昨天遇到一个兄台,说要qt写界面 有时界面会变动很大 ... -
C++双向链表
2012-05-04 10:56 1562#ifndef LINKLIST_H #define LIN ... -
OSX 编译chillispot-1.1.0
2012-05-03 11:32 1414OSX 编译chillispot-1.1.0 ... -
朋友问 if [ "$?" != "0" ]; then 是个啥
2012-04-20 10:19 16219刚刚有个朋友来问 说脚本中的是什么意思 ./s ... -
C程序使用xml
2012-04-17 10:57 1267C程序使用xml 项目用到的 改编简单实例 ... -
svn hooks 自动发邮件
2012-04-17 10:24 6580svn hooks 自动发邮件 在svn库中有一个 ... -
svn 上添加源码
2012-04-13 13:46 919最近几天很忙又开了一个新项目源码又要放到svn上前面介绍了建立 ... -
更改mysql数据表中自动增加auto_increment
2012-04-06 11:08 1883如果在mysql中一个表qvbdata中的ID字段设为a ... -
Mac OSX 也变成svn服务器
2012-04-06 10:59 3133让你的Mac OSX 也变成svn服务器 最近在公司,要 ... -
把user加入sudo列表中
2012-04-06 10:15 1123sudo usermod -a -G admin userna ... -
Mac OSX 或 Linux 使用 tftp
2012-04-06 10:09 2452tar xzvf opentftpmtV1.65.tar ...
相关推荐
这里面的代码提供了内核驱动的样例,并且提供了通过mmap,在用户态和内核态之间构建共享内存,来进行通信的方法
1. Linux 设备驱动第三版 .................................................................................................................... 5 2. 第 1 章 设备驱动简介 ....................................
5熟悉在x86体系结构上Linux中断和异常的处理原理,中断注册、共享、控制,和中断上下文的意义,中断和设备驱动程序的关系,以及设备驱动程序结构和用户接口。(4小时) 6中断处理程序被分解为top half和bottom ...
6.7 共享内存 6.8 信号量 第7章基于socket的进程间通信 7.1系统调用socket() 7.2函数sys—socket()——创建插口 7.3函数sys—bind()——指定插口地址 7.4函数sys—listen()——设定server插口 7.5函数sys—...
LINUX设备驱动第三版_ 前言 第一章 设备驱动程序简介 设备驱动程序的作用 内核功能划分 设备和模块的分类 安全问题 版本编号 许可证条款 加入内核开发社团 本书概要 第二章 构造和运行模块 设置测试系统 ...
6.7 共享内存 6.8 信号量 第7章 基于socket的进程间通信 7.1 系统调用socket() 7.2 函数sys—socket()——创建插口 7.3 函数sys—bind()——指定插口地址 7.4 函数sys—listen()——设定server插口 ...
6.7 共享内存 6.8 信号量 第7章基于socket的进程间通信 7.1系统调用socket() 7.2函数sys—socket()——创建插口 7.3函数sys—bind()——指定插口地址 7.4函数sys—listen()——设定server插口 7.5函数sys—accept...
6.7 共享内存 6.8 信号量 《LINUX内核源代码情景分析(下册)》图书目录如下: -------------------------------------------------------------------------------- 第 7章 基于socket的进程间通信 7.1 系统...
6.7 共享内存 6.8 信号量 《LINUX内核源代码情景分析(下册)》图书目录如下: -------------------------------------------------------------------------------- 第7章 基于socket的进程间通信 7.1 系统...
Linux的内存管理 408 mmap设备操作 418 执行直接I/O访问 429 直接内存访问 435 快速参考 453 第十六章 块设备驱动程序 458 注册 459 块设备操作 464 请求处理 468 其他一些细节 484 快速参考 487 第十七...
因为 struct 文件对于 linux 内核是全局的。 所以 binder 驱动程序可以通过 fget 获取文件,并使用新的 fd 将文件映射到 anthoer 进程。 API target_fd_install。 2.mmap 3.读或写共享内存4.关闭
4.3.6 共享内存 121 4.3.7 信号 124 4.4 Linux下的线程 127 4.4.1 多线程编程实例 127 4.4.2 Linux下线程创建函数pthread_create() 129 4.4.3 线程的结束函数pthread_join()和pthread_exit() 129 4.4.4 ...
V4L2支持两种方式来采集图像:内存映射(mmap)和直接读取方式(read)。V4L2在include/linux/video.h文件下定义了一些重要的数据结构,在采集图像的过程中,就是通过对这些数据的操作来获得最终的图像数据。Linux系统V4...