1 块设备驱动流程主要步骤
这里写下大概步骤
//注册块设备
register_blkdev()
...
//分配并初始化请求队列
xxx.queue = blk_init_queue(a(xx),xx)
...
//分配及注册gendisk结构体
xxx.gendisk->major = xxx.major; // 主设备号
xxx.gendisk->first_minor = 0; // 起始次设备号
xxx.gendisk->fops = &xxx; // 操作函数
xxx.gendisk->private_data = &ramdisk; // 私有数据
xxx.gendisk->queue = xxx.queue; // 请求队列
xxx.gendisk->disk_name, test=...; // 名字
...
add_disk(xxx.gendisk);
...
//编写请求队列里的相关函数
a(xx)
...
这样在add_disk操作后就注册了一个块设备驱动,运行后在驱动目录下(/dev/...)下就可以看到相关的设备了。
2 和MMC子系统的关系
上面的请求队列里的函数就是将进行具体读写操作的函数。肯定是要涉及到一些具体设备的读写协议和寄存器编写的。
块设备是一类设备,包括sd卡,emmc之类的设备。它们的读写协议有很多相近的地方,所以把它们独立提取出来。方便编写。所以MMC子系统是在普通块设备驱动之上继续封装开发的子系统。
处理顺序如下:
mmc子系统首先根据实际电路的芯片注册一些函数,当检测到实际设备存在时,再进行块设备驱动进行注册。
领取专属 10元无门槛券
私享最新 技术干货