NOR FLASH驱动

1 分析如何写norflash驱动

1.1先来回忆下之前的nandflsh驱动:

nandflsh驱动会放在内核的mtd设备中,而mtd设备知道如何通过命令/地址/数据来操作nandflash,所以我们之前的nandflash驱动只实现了硬件相关的操作(构造mtd_info,nand_chip结构体、启动nand控制器等)。

同样地,norflash驱动也是放在内核的mtd设备中,mtd设备也知道对nor如何来读写擦除,只是不知道norflash的位宽(数据线个数),基地址等,所以我们的norflash驱动同样要实现硬件相关的操作,供给mtd设备调用。

1.2参考内核自带的nor驱动:drivers/mtd/maps/physmap.c

进入它的init函数:
在这里插入图片描述
发现注册了两个platform平台设备驱动,进入physmap_flash结构体中:
在这里插入图片描述
发现3个未定义的变量:

CONFIG_MTD_PHYSMAP_BANKWIDTH: nandflash的字节位宽;

CONFIG_MTD_PHYSMAP_START:nandflash的物理基地址;

CONFIG_MTD_PHYSMAP_LEN: nandflash的容量长度;

这3个变量是通过linux的menuconfig菜单配置出来的,若自己填入值,就不需要用menuconfig菜单配置了。

1.3接下来我们就来配置内核,然后挂载这个内核自带的norflash驱动实验一番

1.4首先make menuconfig,配置上面3个变量,然后设为模块

-> Device Drivers

-> Memory Technology Device (MTD) support

-> Mapping drivers for chip access //进入映射驱动

CFI Flash device in physical memory map //将支持cfi的norflash设置为模块

(0x0) Physical start address of flash mapping // 设置物理基地址
(0x1000000) Physical length of flash mapping // 设置容量长度,必须大于等于自身nor的2MB
(2) Bank width in octets (NEW)    // 设置字节位宽,因为nor为16位,所以等于2

1.5make modules 编译模块

如下图所示,可以看到physmap.c编译成.ko模块了:
在这里插入图片描述

1.6然后放在nfs目录下,启动开发板

如下图所示,insmod后打印了一串信息:
在这里插入图片描述
如下图所示,可以看到创建了2个mtd0字符设备,一个mtd0块设备:
在这里插入图片描述

2.接下来我们便分析physmap.c,如何写出norflash驱动的

其中physmap.c的probe函数如下:

struct physmap_flash_info {
   
       struct mtd_info             *mtd;             //实现对flash的读写擦除等操作
       struct map_info            map;              //存放硬件相关的结构体
       struct resource             *res;
#ifdef CONFIG_MTD_PARTITIONS
       int                 nr_parts;
       struct mtd_partition      *parts;
#endif
};

static const char *rom_probe_types[] = {
    "cfi_probe", "jedec_probe", "map_rom", NULL };    //芯片名称

... ...
static int physmap_flash_probe(struct platform_device *dev)
{
   
       const char **probe_type;
       ... ...
  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值