linux-0.11分析:init文件 main.c的第三个初始化函数blk_dev_init()第六篇随笔

3、第三个初始化函数,blk_dev_init()

参考 [github这个博主的 厉害][ https://github.com/sunym1993/flash-linux0.11-talk ]

kernel文件 -> blk_drv文件 -> l_rw_blk.c
void blk_dev_init(void)
{
	int i;

	for (i=0 ; i<NR_REQUEST ; i++) {		//#define NR_REQUEST	32
		request[i].dev = -1;
		request[i].next = NULL;
	}
}

这可以看出非常的短;而且就是在给request这个数值的dev和next元素赋值;数组长度为32

dev = 1; next = null

看看request这个结构体吧:

kernel文件 -> blk_drv文件 -> blk.h
struct request {
	int dev;		/* -1 if no request */
	int cmd;		/* READ or WRITE */
	int errors;
	unsigned long sector;
	unsigned long nr_sectors;
	char * buffer;
	struct task_struct * waiting;
	struct buffer_head * bh;
	struct request * next;
};

可以大致看出前6个属性是基本属性,后面3个是结构体;一个是本身,其他2个是task_struct、buffer_head

属性 作用
dev 表示设备号,-1 就表示空闲。
cmd 表示命令,其实就是 READ 还是 WRITE,也就表示本次操作是读还是写。
errors 表示操作时产生的错误次数。
sector 表示起始扇区。
nr_sectors 表示扇区数。
buffer 表示数据缓冲区,也就是读盘之后的数据放在内存中的什么位置。
waiting 是个 task_struct 结构,这可以表示一个进程,也就表示是哪个进程发起了这个请求。
bh 是缓冲区头指针,这个后面讲完缓冲区就懂了,因为这个 request 是需要与缓冲区挂钩的。
next 指向了下一个请求项。

request 结构可以完整描述一个读盘操作 ;通过dev来表示是否在工作,cmd表示是读还是写,errors表示读或写过程中发生的错误,sector表示磁盘的开始扇区位置,nr_sectors表示扇区数目,buffer就是读取磁盘后放到内存的那个位置,next表示下一个request结构体。

4、第四个初始化函数,chr_dev_init()

void chr_dev_init(void)
{
}

可以看到为空什么都没有干

posted @ 2022-08-08 13:43  水三丫  阅读(108)  评论(0编辑  收藏  举报