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) { }
可以看到为空什么都没有干
分类:
linux - 0.11
, 操作系统
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)