关于块设备与nand flash的初步小结

本文介绍了块设备驱动的框架,从应用程序读写到硬件的调用过程,重点讲解了块设备驱动中的gendisk结构体和相关注册、反注册函数。同时,详细讨论了NAND Flash的硬件特性,包括其接口信号、时序参数配置,以及S3C2440中对NAND Flash的操作寄存器。此外,还提到了NAND Flash驱动的基本结构体及初始化过程。
摘要由CSDN通过智能技术生成

块设备驱动的框架:

调用过程自上而下为:应用程序读写文件—>虚拟文件系统(ext3, yaffs2, jffs2)—>由ll_rw_block函数转换成扇区的读写—>块设备驱动程序—>读写硬件

块设备驱动程序提供一个队列,将读操作和写操作放入队列内,并且在队列中优化读写顺序使得读写占用时间减小(这就是为什么有时候读的数据可能并不是真正从磁盘上读来的而是cache中),设备驱动另外必要的功能就是要注册设备。原理上字符设备也同样可以对字盘读写,只是少了块设备驱动那样的电梯调度算法。

块设备驱动中重要的数据结构:

struct gendisk:可使用函数alloc_disk分配;

一个简单的块设备驱动需要给以下结构体内的值进行赋值:

struct gendisk {
/* major, first_minor and minors are input parameters only,
* don't use directly.  Use disk_devt() and disk_max_parts().
*/

…………

struct request_queue *queue;//使用blk_init_queue函数设置队列,队列中包括读写的操作

int major; /* major number of driver *///使用register_blkdev注册到一个主设备号

int first_minor;

int minors;                     /* maximum number of minors, =1 for
                                         * disks that can't be partitioned. */

char disk_name[DISK_NAME_LEN];/* name of major driver */

struct block_device_operations *fops;
struct hd_struct part0;//使用set_capacity函数设置有多少个扇区

…………
};

最后注册gendisk,使用函数:add_disk函数。

对以上相关的结构体进行反注册的函数有:unregister_blkdev(major, "blockdisk");del_gendisk(block_disk);put_disk(block_disk);blk_cleanup_queue(block_queue);

关于调试块设备的相关命令:

mkdosfs&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值