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 @   水三丫  阅读(133)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示