易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux下把kernel空间映射到用户进程空间(mmap实现)

 在mmap函数里,使用remap_pfn_range
函数。代码如下。注意要设置一下vma->vm_pgoff为你要map的io空间的物理地址对应的页。
arm  IO/ 内存统一编址  所以
#define io_remap_pfn_range(vma,from,pfn,size,prot) \
                remap_pfn_range(vma, from, pfn, size, prot)
vm_start, vm_end  在系统调用时算好了,应该时找个空闲得空间,然后根据size算出vm_end,
static int filter_mmap(struct file *filp, struct vm_area_struct *vma)
{
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
vma->vm_pgoff = ( (u32)map_start >> PAGE_SHIFT);
if (remap_pfn_range
(vma,
vma->vm_start,
vma->vm_pgoff,
vma->vm_end-vma->vm_start,
vma->vm_page_prot))
return -EAGAIN;
return 0;
}
map 过程 :
用户空间map(start,offset, len , fd ,...)   start 映射到的用户空间地址,0就是自己去找吧,offset 文件的偏移。 
old_mmap(struct mmap_arg_struct __user *arg)      // arch/arm/kernel/sys_arm.c
   |
do_mmap2(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT);
   |
do_mmap_pgoff(file, addr, len, prot, flags, pgoff);   //   mm/mmap.c
可能合并VMA
否则新分配一个VMA
然后
error = file->f_op->mmap(file, vma);
就调用了驱动里的mmap     
这时候vma->vm_pgoff = pgoff    (这个pgoff就是map(offset, len , fd ,...)  中的 offset ,当然经过处理了,PAGE_SHIFT移来移去的)


相关文档:

Linux操作系统文件系统基础知识


一 、Linux文件结构
  文件结构是文件存放在磁盘等存贮设备上的组织方法。主要体现在对文件和目录的组织上。
  目录提供了管理文件的一个方便而有效的途径。
  Linux使用标准的目录结构,在安装的时候,安装程序就已经为用户创建了文件系统和完整而固定的目录组成形式,并指定了每个目录的作用和其中的文件类型 ......

在Linux上基于源地址路由实现电信网通双线

想要通过普通的静态策略路由来实现电信网通双线基本上是不可能的,因为那将需要维护相当大的一个IP段的数据库,而且还需要随时更新才能保证效果。
后来听前辈们说,可以采用基于源地址路由的方式来处理,让进来的数据,从哪个IP进来就从哪个IP返回。
下面就是一个在生产中得到了实际应用的脚本:
====================== ......

Socket编程:由Linux向Windows移植问题


转自:http://www.cic.tsinghua.edu.cn/jdx/book1/CHAPTER3.htm
 
在源文件开始增加#include <winsock.h>语句。
调用WSAStartup()函数初始化Windows Sockets DLL,并在结束时调用WSACleanup()函数通知Windows Sockets DLL释放资源。
将套接字的类型为int改为SOCKET。
获取、设置错误码不要使用全局变量er ......

linux驱动之mmap实例

// Linux Device Driver Template/Skeleton with mmap
// Kernel Module
#include <linux/module.h>
#include <linux/init.h>
#include <linux/version.h>
#include <linux/errno.h>
#include <linux/fs.h>
#include <linux/mm.h>
#include <linux/interrupt.h>
#inclu ......

Veritas Linux Cluster

Get Redhat Enterprise 3.0 from:
Your local RedHat rep�
Get Veritas’ VCS and VM products from:
ftp://ftp.veritas.com/pub/products/fst_ha.lxrt2.2.redhatlinux.tar.gz
ftp://ftp.veritas.com/pub/products/fst_ha.lxrt2.2MP1.redhatlinux.tar.gz
You will need a temporary key to complete this ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号