linux设备驱动案例,(9)linux设备驱动之Flash块设备驱动——NOR Flash驱动实例

/********************************************************************************************

参考 drivers\mtd\maps\physmap.c

********************************************************************************************/

#include #include #include #include #include #include #include #include #include #include #include #include #include

static struct map_info *nor_map_info;

static struct mtd_info *nor_mtd_info;

static struct mtd_partition nor_parts[] = {

[0] = {

.name   = "bootloader_nor",

.size   = 0x00040000,

.offset = 0,

},

[1] = {

.name   = "root_nor",

.offset = MTDPART_OFS_APPEND,

.size   = MTDPART_SIZ_FULL,

}

};

static int __init nor_flash_init(void)

{

/* 1:分配和设置 */

/* 分配 */

nor_map_info=kzalloc(sizeof(struct map_info), GFP_KERNEL);

/* 设置 */

nor_map_info->name       ="Nor_Flash";    /* 名字 */

nor_map_info->size         =0x200000;       /* 大小 */

nor_map_info->phys        =0;                    /* 起始物理地址 */

nor_map_info->bankwidth=2;            /* 16位数据总线,2个字节宽度 */

nor_map_info->virt=ioremap(nor_map_info->phys,nor_map_info->size);    /* 虚拟地址 */

/* 2: 调用函数simple_map_init()来设置了读写等函数  */

simple_map_init(nor_map_info);

/* 3. 使用: 调用NOR FLASH协议层提供的函数来识别 */

nor_mtd_info = do_map_probe("cfi_probe", nor_map_info);   /*   以CFI接口方式调用  该函数探测Flash得到mtd_info */

if (!nor_mtd_info)   /* 如果以CFI接口方式调用不成功,则以JEDEC接口方式调用 */

{

printk("use jedec_probe\n");

nor_mtd_info = do_map_probe("jedec_probe", nor_map_info);

}

if (!nor_mtd_info)   /* 如果以以上两种方式调用均未成功则释放资源 */

{

iounmap(nor_map_info->virt);

kfree(nor_map_info);

return -EIO;

}

/* 4. add_mtd_partitions */

add_mtd_partitions(nor_mtd_info, nor_parts, 2);  /* 注册 */

return 0;

}

static void __exit nor_flash_exit(void)

{

iounmap(nor_map_info->virt);

kfree(nor_map_info);

del_mtd_partitions(nor_mtd_info);

}

module_init(nor_flash_init);

module_exit(nor_flash_exit);

MODULE_AUTHOR("shenchaoping"); /*描述模块作者*/

MODULE_LICENSE("Dual BSD/GPL");/*指定代码使用双重许可证*/

MODULE_VERSION("v1.0");        /*模块版本*/

MODULE_DESCRIPTION("A Nor Flash Operation Module"); /*说明模块用途*/

MODULE_ALIAS("Nor Flash");    /*模块别名*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值