mem_user.c

来自「优龙2410linux2.6.8内核源代码」· C语言 代码 · 共 96 行

C
96
字号
/*  * Copyright (C) 2002 Jeff Dike (jdike@karaya.com) * Licensed under the GPL */#include <errno.h>#include <sys/mman.h>#include <sys/ptrace.h>#include "mem_user.h"#include "user.h"#include "os.h"#include "proc_mm.h"void map(int fd, unsigned long virt, unsigned long phys, unsigned long len, 	 int r, int w, int x){	struct proc_mm_op map;	struct mem_region *region;	int prot, n;	prot = (r ? PROT_READ : 0) | (w ? PROT_WRITE : 0) | 		(x ? PROT_EXEC : 0);	region = phys_region(phys);	map = ((struct proc_mm_op) { .op 	= MM_MMAP,				     .u 	= 				     { .mmap	= 				       { .addr 		= virt,					 .len		= len,					 .prot		= prot,					 .flags		= MAP_SHARED | 					                  MAP_FIXED,					 .fd		= region->fd,					 .offset	= phys_offset(phys)				       } } } );	n = os_write_file(fd, &map, sizeof(map));	if(n != sizeof(map)) 		printk("map : /proc/mm map failed, errno = %d\n", errno);}int unmap(int fd, void *addr, int len){	struct proc_mm_op unmap;	int n;	unmap = ((struct proc_mm_op) { .op 	= MM_MUNMAP,				       .u 	= 				       { .munmap	= 					 { .addr 	= (unsigned long) addr,					   .len		= len } } } );	n = os_write_file(fd, &unmap, sizeof(unmap));	if((n != 0) && (n != sizeof(unmap)))		return(-errno);	return(0);}int protect(int fd, unsigned long addr, unsigned long len, int r, int w, 	    int x, int must_succeed){	struct proc_mm_op protect;	int prot, n;	prot = (r ? PROT_READ : 0) | (w ? PROT_WRITE : 0) | 		(x ? PROT_EXEC : 0);	protect = ((struct proc_mm_op) { .op 	= MM_MPROTECT,				       .u 	= 				       { .mprotect	= 					 { .addr 	= (unsigned long) addr,					   .len		= len,					   .prot	= prot } } } );	n = os_write_file(fd, &protect, sizeof(protect));	if((n != 0) && (n != sizeof(protect))){		if(must_succeed)			panic("protect failed, errno = %d", errno);		return(-errno);	}	return(0);}void before_mem_skas(unsigned long unused){}/* * Overrides for Emacs so that we follow Linus's tabbing style. * Emacs will notice this stuff at the end of the file and automatically * adjust the settings for this buffer only.  This must remain at the end * of the file. * --------------------------------------------------------------------------- * Local variables: * c-file-style: "linux" * End: */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?