Chinaunix首页 | 论坛 | 博客
  • 博客访问: 203191
  • 博文数量: 33
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1277
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-03 10:03
个人简介

现于杭州电子科技大学攻读硕士学位

文章分类

全部博文(33)

文章存档

2013年(33)

我的朋友

分类: LINUX

2013-09-07 20:19:17

/********************************************************************************************
  参考 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");    /*模块别名*/

阅读(2110) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~