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)
{
}
可以看到为空什么都没有干