wait_queue_head_t wait_q;
init_waitqueue_head(&wait_q);
erase.callback=erase_callback;//erase_callback为擦除完成后,自动调用的函数的指针
erase.addr=0;//偏移地址为0的块,要保证块地址对齐
erase.len=512*32;//擦除是以块为单位的,512*32为一个块的大小
erase.priv=(u_long)&wait_q;
set_current_state(TASK_INTERRUPTIBLE);
add_wait_queue(&wait_q,&wait);
(*(mtd_table[4]->erase)) (mtd_table[4],&erase);//调用mtd_info的擦除成员函数
schedule();//进行进程调度
remove_wait_queue(&wait_q,&wait);//移出等待队列
static void erase_callback(struct erase_info *done){
wait_queue_head_t *wait_q=(wait_queue_head_t *done->priv);
wake_up(wait_q);//唤醒等待队列
}
从以上的几个程序片段可以看出,通过mtd_info结构体对Nandflash的操作是非常方便的。
5 结语
在嵌入式设备的开发中,数据存储是一个非常重要的模块,对Flash的读写需求也变得非常平常。虽然是基于s3c2410cpu的,但在其他的平台下,同样具有借鉴意义,希望对读者有所帮助。
|