社区
Linux_Kernel
帖子详情
谁有“零拷贝”技术有资料,最好有实例或是现成的代码!
szclm
2004-04-16 09:58:39
如题
...全文
63
5
打赏
收藏
谁有“零拷贝”技术有资料,最好有实例或是现成的代码!
如题
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qiansen
2004-04-22
打赏
举报
回复
http://www.hacker.com.cn/article/list.asp?id=3370
Microsoft
2004-04-19
打赏
举报
回复
//led_int_chdrv.c
#include <linux/malloc.h>
#include <linux/fs.h>
#include <linux/module.h>
#include <asm/segment.h>
#include <unistd.h>
typedef struct {
unsigned int orig_mod; //IOPMOD Register
unsigned int orig_con; //IOPCON Register
unsigned int orig_dbw; //EXTDBWTH Register
unsigned int count;
} led_demo_driver_t;
#define EXTDBWTH *(unsigned int *)0x3FF3010
#define IOPMOD *(unsigned int *)0x3FF5000
#define IOPCON *(unsigned int *)0x3FF5004
#define LED_CHDRV_MAJOR 111
char LED_INT_CHDRV_NAME[] = "LED_Int_DemoDrv";
void led_delay()
{
unsigned int i;
for(i = 0; i < 500000; ++i) ;
}
void led_interrupt( int irq, void *dev_id, struct pt_regs *regs )
{
led_demo_driver_t *dev = (led_demo_driver_t *)dev_id;
dev->count++;
printk("irq %d dev->PC = %08x \n",irq , dev->count++);//for debug interrupt
}
int led_chdev_open( struct inode *inode, struct file *file )
{
led_demo_driver_t *dev;
int flags;
dev = (led_demo_driver_t *)kmalloc(sizeof(led_demo_driver_t), GFP_KERNEL);
if(dev == NULL)
{
return -ENOMEM;
}
dev->orig_mod = IOPMOD;
dev->orig_con = IOPCON;
dev->orig_dbw = EXTDBWTH;
EXTDBWTH |= 0x0FF00000;
led_delay();
IOPMOD &= 0x7FEFF;
led_delay();
IOPCON &= 0xFFFFFFE0;
led_delay();
IOPCON |= 0x1C; //reference s3c4510 spec. page 12-4 about external irq setting
led_delay();
file->private_data = dev;
led_delay();
dev->count = 0x00;
led_delay();
save_flags_cli(flags);
if( request_irq( 0, led_interrupt, SA_INTERRUPT, "led", dev ))
{
printk("kernel: request_irq error!\n");
}
restore_flags(flags);
return 0;
}
void led_chdev_release( struct inode *inode, struct file *file )
{
led_demo_driver_t *dev = (led_demo_driver_t *)file->private_data;
int flags;
save_flags_cli(flags);
free_irq(0, dev);
if(dev) {
//
IOPMOD = dev->orig_mod;
IOPCON = dev->orig_con;
EXTDBWTH = dev->orig_dbw;
kfree(dev);
}
restore_flags(flags);
}
static struct file_operations led_chdrv_fops = {
NULL, /* lseek */
NULL, /* read */
NULL, /* write */
NULL, /* readdir */
NULL, /* select */
NULL, /* ioctl */
NULL, /* mmap */
led_chdev_open, /* open */
led_chdev_release /* release */
};
int led_init()
{
if( register_chrdev(LED_CHDRV_MAJOR, LED_INT_CHDRV_NAME, &led_chdrv_fops) )
{
printk("kernel: %s: Unable to register character device\n", LED_INT_CHDRV_NAME); return -EIO;
}
return 0;
}
此程式齣自
"嵌入式微電腦繫統實習ARM與LINUX",鄭慕德 編著,全華科技圖書股份有限公司
CoolQ
2004-04-16
打赏
举报
回复
http://www.nsfocus.net/index.php?act=sec_doc&do=view&doc_id=880&keyword=%C1%E3%BF%BD%B1%B4
具体是要作驱动的,一个驱动一个样,所以具体实现不通用。
szclm
2004-04-16
打赏
举报
回复
谢谢~
chairou
2004-04-16
打赏
举报
回复
找COOLQ吧,他对IDS有研究.这种东西还想要源码,那别人怎么吃饭啊.
二十三种设计模式【PDF版】
主要是介绍各种格式流行的软件设计模式,对于程序员的进一步提升起推进作用,有时间可以随便翻翻~~ 23种设计模式汇集 如果你还不了解设计模式是什么的话? 那就先看设计模式引言 ! 学习 GoF 设计模式的重要性 ...
消息队列的网络模型详解:IO多路复用、Reactor模型、
零拷贝
特性RabbitMQKafkaRocketMQPulsar语言ErlangJavaJavaJava网络模型ActorReactorReactorReactorIO多路复用epollepollepoll
零拷贝
无有有有并发模型轻量级进程线程池线程池线程池协议AMQP自定义自定义自定义。
掌握Python中的深拷贝与浅拷贝
技术
在Python中,拷贝是一种创建对象副本的
技术
。拷贝分为浅拷贝和深拷贝,它们在创建副本时的行为不同。浅拷贝(shallow copy)指的是创建一个新对象,但是新对象的元素是原对象元素的引用,而非其值。
如何实现一个深浅拷贝
把深浅拷贝单独作为一讲来专门讲解,是因为在 JavaScript 的编程中经常需要对数据进行复制,什么时候用深拷贝、什么时候用浅拷贝,是开发过程中需要思考的;同时深浅拷贝也是前端面试中比较高频的题目。 因此,深入...
自定义对象深拷贝的几种办法(deepcopy,C#)
4.通过拷贝序列化后的二进制(Binary Serialization) 5.使用XML对象序列化 6.使用拷贝构造函数 7.小结 卸载前面,先来一句装逼文,原文如下: The maturity of a software engineer is determined by many ...
Linux_Kernel
4,465
社区成员
17,462
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章