当前位置:  技术问答>linux和unix

有没有做过linux nor flash驱动,128MB的nor flash就要映射128MB的虚拟空间么?nand flash就可以映射4k。。

    来源: 互联网  发布时间:2016-08-16

    本文导语:  nand flash是必须始终保存虚拟映射,nor呢?内核怎么支持的啊? | 你说ioremap 128M的内存不算大么?系统就1G内存 --------------------------- 确实挺大的,内...

nand flash是必须始终保存虚拟映射,nor呢?内核怎么支持的啊?

|
你说ioremap 128M的内存不算大么?系统就1G内存
---------------------------
确实挺大的,内核空间的虚拟地址空间就1G
不过嵌入式设备里一般也没有超过1G的物理设备需要映射

至于超过了1G怎么办就不知道了,据说malloc可以申请到1G,我很郁闷


好像在驱动加载前后/proc/meminfo里面的mapped值没有变化,这个可以解释下么?
--------------------
挂载文件系统之后增加了,访问其中的文件又增加了,大概是不用就不真的绑定


|
物理地址都舍得给128m
虚拟地址倒舍不得了?

这是一个s3c2410 上的nor 驱动,nor物理地址 0x0 开始,2m大

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

#ifdef CONFIG_MTD_PARTITIONS
#include 
#endif




#define WINDOW_ADDR 0x0000000      /* NOR FLASH物理地址 */

#define WINDOW_SIZE 0x0200000         /* NOR FLASH大小 */

#define BUSWIDTH    2

/* 探测的接口类型,可以是"cfi_probe", "jedec_probe", "map_rom", NULL }; */

 

#define PROBETYPES { "jedec_probe","amd_flash",  NULL }



#define MSG_PREFIX "S3C2410-NOR:"   /* prefix for our printk()'s */

#define MTDID      "s3c2410-nor"    /* for mtdparts= partitioning */



static struct mtd_info *mymtd;



struct map_info s3c2410nor_map =  // map_info

{

  .name = "NOR flash on S3C2410",

  .size = WINDOW_SIZE,

  .bankwidth = BUSWIDTH,

  .phys = WINDOW_ADDR,

};



#ifdef CONFIG_MTD_PARTITIONS

  /* MTD分区信息  */

  static struct mtd_partition static_partitions[] =

  {

    {

      .name = "BootLoader", .size = 0x040000, .offset = 0x0  //bootloader存放的区域

    } ,

    {

      .name = "jffs2", .size = 0x0100000, .offset = 0x40000 //内核映像存放的区域

    },


   

  };

#endif



static int mtd_parts_nb = 0;

static struct mtd_partition *mtd_parts = 0;



int __init init_s3c2410nor(void)

{

  static const char *rom_probe_types[] = PROBETYPES;

  const char **type;

  const char *part_type = 0;

printk("add by lht.............n");


printk(KERN_NOTICE MSG_PREFIX "0x%08x at 0x%08xn", WINDOW_SIZE, WINDOW_ADDR);

  s3c2410nor_map.virt = (unsigned long)ioremap(WINDOW_ADDR, WINDOW_SIZE);//物理->虚拟地址



  if (!s3c2410nor_map.virt)

  {

    printk(MSG_PREFIX "failed to ioremapn");

    return  - EIO;

  }



  simple_map_init(&s3c2410nor_map);



  mymtd = 0;

  type = rom_probe_types;

  for (; !mymtd &&  *type; type++)

  {
       

    mymtd = do_map_probe(*type, &s3c2410nor_map);//探测NOR FLASH

  }

  if (mymtd)

  {
        

    mymtd->owner = THIS_MODULE; 



        mtd_parts = static_partitions;

        mtd_parts_nb = ARRAY_SIZE(static_partitions);

        part_type = "static";
          

    add_mtd_device(mymtd);

    if (mtd_parts_nb == 0)

      printk(KERN_NOTICE MSG_PREFIX "no partition info availablen");

    else

    {

      printk(KERN_NOTICE MSG_PREFIX "using %s partition definitionn",

        part_type);

      add_mtd_partitions(mymtd, mtd_parts, mtd_parts_nb);//添加分区信息

    }

    return 0;

  }



  iounmap((void*)s3c2410nor_map.virt);

  return  - ENXIO;

}



static void __exit cleanup_s3c2410nor(void)

{

  if (mymtd)

  {

    del_mtd_partitions(mymtd);  //删除分区

    del_mtd_device(mymtd);   //删除设备

    map_destroy(mymtd);     

  }

  if (s3c2410nor_map.virt)

  {

    iounmap((void*)s3c2410nor_map.virt);

    s3c2410nor_map.virt = 0;

  }

}


module_init(init_s3c2410nor);
module_exit(cleanup_s3c2410nor);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("farsihgt lht");
MODULE_DESCRIPTION("Generic configurable MTD map driver");


|
nor flash本来就有地址线,本来就占有128M的空间,映射128M的虚拟空间很正常阿  

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • [AIX]有没有办法查到有没有用户执行了Kill命令
  • linux里有没有象vc那样的IDe啊,有没有类库什么的呢
  • 有没有用过 JCE 的朋友,生成x.509证书,有没有免费算法,用哪家的比较好,给出示例代码!
  • 请问jsp有没方法判断窗口有没有框架???
  • 有没有哪位知道linux下有没有什么可视聊天的工具
  • 请问:编译内核时,make bzimage命令后,提示没有这个规则,这有没有影响呀?
  • 有没有搞错,JSP精华版数据全部没有了。
  • 我想在VMware上装FreeBSD,有没有人这样做过?有什么问题没有?
  • 我重装了winme,却进不了Linux了,而我现在又没有Linux光盘,也没有Linux启动盘,还有没有办法?
  • Qt中有没有类似VB中winsock和timer的控件呀,我好像没有找到.
  • 转 请大家讨论一下,现在我们开发J2EE的Application Server还有没有机会,这里有没有这种人才? (愿意给300分)
  • 有没有用过ejb,又开始学com的,如果有,介绍一下经验?没有,则给个理由(如果你有时需要用DNA)?
  • java中有没有destructor的东东,好像一般的class里都没有嘛,难道不要手工做这些事情,全部交给gc处理吗?
  • 在linux redhat6.0中,进入x_window,请问系统有没有自带的c编译器,比如gcc;如果没有,那里可以下载并安装?
  • JAVA中没有宏,那编程和调试起来不是很麻烦吗?有没有一些折中办法?
  • SCJP有没有用
  • InstallShield 有没有linux版本的?
  • 有没有玩的转LINUX源码的高手?
  • 谁知道现在有没有Linux下的搜索引擎?
  • 谁知道现在有没有Linux下的搜索引擎??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3