谁有“零拷贝”技术有资料,最好有实例或是现成的代码!

szclm 2004-04-16 09:58:39
如题
...全文
47 5 打赏 收藏 转发到动态 举报
写回复
用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有研究.这种东西还想要源码,那别人怎么吃饭啊.

4,434

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧