这段时间想弄懂mmc驱动的读写原理,一直在goldfish的驱动代码中乱撞。某天突然灵光一闪,要从文件系统开始分析。眼前一篇豁然开朗。跟踪过程记录如下:
首先是file的读操作。因为sd卡是fat32文件系统,找到fat32的file_operations:
const struct file_operations fat_file_operations = {
.llseek = generic_file_llseek,
.read = do_sync_read,
.write = do_sync_write,
.aio_read = generic_file_aio_read,
.aio_write = generic_file_aio_write,
.mmap = generic_file_mmap,
……
}
read操作先调用do_sync_read,然后在do_sync_read中调用generic_file_aio_read。
generic_file_aio_read中先判断是否可以direct to BIO。如果不能,进入读取页面的循环,这个循环中主要的函数是:
do_generic_file_read(filp, ppos, &desc, file_read_actor);
这个函数也是读文件主要的操作函数。
进入do