⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 resource.c.txt

📁 linux内核学习笔记 希望想看的人可以很快下载到
💻 TXT
字号:
any problems, send email to netxiong@263.net

相关文件:
	/include/linux/ioport.h


**************************基本数据结构**********************************************
系统已经预先定义好了一些资源的根节点。

struct resource ioport_resource = { "PCI IO", 0x0000, IO_SPACE_LIMIT, IORESOURCE_IO };
	#pci I/O地址范围是0x0000---0xffff,
	//这是所有的ioport的地址范围,所有的io资源分配都在这个范围内,他是所有io资源的父资源

struct resource iomem_resource = { "PCI mem", 0x00000000, 0xffffffff, IORESOURCE_MEM }
	//同上

************************************************************************************



***********************************基本函数*****************************************
(1):int __check_region(struct resource *parent, unsigned long start, unsigned long n)
	#res = __request_region(parent, start, n, "check-region");	
		调用request_region先申请一个区域,返回0成功,否则失败。
	# release_resource(res);
	  kfree(res);		//将申请成功的resource删除,并释放内存,
	#return 0;

(3):struct resource * __request_region(struct resource *parent, unsigned long start,
					 unsigned long n, const char *name)
	#申请一个资源区域,如果成功,返回一个新的资源节点,否则返回null。
	#struct resource *res = kmalloc(sizeof(*res), GFP_KERNEL);//首先生成一个节点。
	#对节点的内容进行填充。
	#进入一个无限循环
		#conflict = __request_resource(parent, res);
		#如果不冲突的画,申请成功。返回res.
		#如果冲突,但conflict不是父节点的话,继续进行下一轮申请。
		#否则申请失败。
	
(2):static struct resource * __request_resource(struct resource *root, struct resource *new)
	#进行检查,如果new的start和end不再root的资源范围之内,返回root。
	#取得root的child节点的指针。
	#进入一个死循环。
		如果new的资源范围比child的还小,将new链入到树状结构中去。返回null。
		否则循环检查child的sibling节点。如果资源范围有重叠,把重叠的节点作为conflit返回。
		
************************************************************************************


********************************资源图***********************************************
在linux中,资源(包括端口,内存等)都使用一个树状结构进行表示的。进行端口请求等工作的时候首先要进行资源的请求。资源数如下所示:

              resource(0)
		child
		  |	
		  |	
	      resouce(A)
		sibling-------------->resource(B)
		start----end		sibling------------------>resource(C)
		parent			start----end		    sibling----------->
		child			parent			    start----end	
 		  |			child			    parent	
		  |			
 		resource(D)		
		   sibling------------->resource(E)
		   start----end           sibling------------->resource (G)
		   parent                 start----end
		   child        	  parent
					  child
		   		            |
				            |
					 resource(F)
资源分配的顺序如下
	例如资源的范围是0----10,则可能的非配情况如下
		0(0-----10)总资源
		A(0-----5)	B(6---7)    C(8---9)
		D(0-----2)	E(2---4)    G(4---5)	
				F(2---3)
总之,孩子节点的资源范围一定在父节点的范围之内,兄弟节点的资源范围一定比自己的范围大。
*************************************************************************************










⌨️ 快捷键说明

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