易截截图软件、单文件、免安装、纯绿色、仅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设备 (转)

5.3.2  设备类型分类
纵览linux/drivers目录,大概还有35个以上的子目录,每个子目录基本上就代表了一种设备驱动,有atm、block、char、misc、input、net、usb、sound、video等。这里只描述在嵌入式系统里面用得最为广泛的3种设备。
1.字符设备(char device)
字符设备是Linux最简单的设备,可以像文件一样访问。 ......

Linux多线程编程

Linux
多线程编程:【
http://fanqiang.chinaunix.net/a4/b8/20010811/0905001105.html

    
Linux
多线程支持
POSIX
线程接口,称为
pthread,
    
pthread_create
用来创建线程,
pthread_join
等待线程结束,函数的原型分别如下:
 
  &nbs ......

linux上安装python服务器相关工具


1、升级系统
yum check-update
yum update
2、安装一些常用的工具
yum install ntp iptraf sysstat screen subversion wget bzip2 nfs-utils vim-common
3、设置每天自动核准时间
# crontab -e
0 * * * * /usr/sbin/ntpdate 210.72.145.44
:wq
4、安装一些开发包
# yum install make gcc gcc-c++ libjpeg-devel ......

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

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

linux 下 用c语言创建mysql数据库笔记(二)

linux 下 用c语言创建mysql数据库笔记(二)
                       
-------两个简单的例子,供参考比较
《例一》
#include <stdio.h>
#include <stdlib.h>
#include
&q ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号