Linux块设备驱动之NOR FLASH

简介:
块设备驱动之NOR FLASH和NAND基本没有区别,具体两者功能上区别,做嵌入式开发的朋友们就一定要理解过来,这里牵扯到很多地址的问题,超出本文的范围,有机会我会把整个项目从硬件到应用程序的流程写出来,这是一个费时的过程,我也得慢慢修改和查找相关资料,免得写出来误人子弟。大笑我只是一介菜鸟。
/*
 * 参考 drivers\mtd\maps\physmap.c
 */
 
static struct map_info *s3c_nor_map;
static struct mtd_info *s3c_nor_mtd;


static struct mtd_partition s3c_nor_parts[] = {
[0] = {
        .name   = "bootloader_nor",
        .size   = 0x00040000,
.offset = 0,
},
[1] = {
        .name   = "root_nor",
        .offset = MTDPART_OFS_APPEND,
        .size   = MTDPART_SIZ_FULL,
}
};


static int s3c_nor_init(void)
{
/* 1. 分配map_info结构体 */
s3c_nor_map = kzalloc(sizeof(struct map_info), GFP_KERNEL);;

/* 2. 设置: 物理基地址(phys), 大小(size), 位宽(bankwidth), 虚拟基地址(virt) */
s3c_nor_map->name = "s3c_nor";//名字随便取
s3c_nor_map->phys = 0;//开始地址
s3c_nor_map->size = 0x1000000; /* >= NOR的真正大小 */
s3c_nor_map->bankwidth = 2;//宽度
s3c_nor_map->virt = ioremap(s3c_nor_map->phys, s3c_nor_map->size);//映射成虚拟地址


simple_map_init(s3c_nor_map);//做一些初始化工作

/* 3. 使用: 调用NOR FLASH协议层提供的函数来识别 */
printk("use cfi_probe\n");
s3c_nor_mtd = do_map_probe("cfi_probe", s3c_nor_map);//和NAND 的模型是一样的
if (!s3c_nor_mtd)//选择cfi_probe还是jedec_probe
{
printk("use jedec_probe\n");
s3c_nor_mtd = do_map_probe("jedec_probe", s3c_nor_map);
}


if (!s3c_nor_mtd)//还是不能打开,返回错误
{
iounmap(s3c_nor_map->virt);
kfree(s3c_nor_map);
return -EIO;
}

/* 4. add_mtd_partitions */
add_mtd_partitions(s3c_nor_mtd, s3c_nor_parts, 2);//和NAND一样的


return 0;
}


static void s3c_nor_exit(void)
{
iounmap(s3c_nor_map->virt);
kfree(s3c_nor_map);
}


总结:NOR FLASH和NAND FLASH基本一样,框架只是有一点很小的差异,基地址和位宽


都是构造一个mtd_info结构体,然后自己构造一个自己硬件的结构体,NAND FLASH 是nand_chip
NOR FLASH是map_info,最后这两个结构体最终会被mtd_info调用。


下面随便提一下还可以用内存模拟一个flash,只是需要我们构造一个mtd_info结构体,其他的工作别人已经做好了
/*
 * 参考 drivers\mtd\devices\Mtdram.c//这个代码自己去分析,你会发现和我们以前讲得是一样的
 */
目录
相关文章
|
29天前
|
Linux API 调度
Linux系统驱动跟裸机驱动的区别
Linux系统驱动跟裸机驱动的区别
27 0
|
1月前
|
Linux C语言 SoC
嵌入式linux总线设备驱动模型分析
嵌入式linux总线设备驱动模型分析
32 1
|
28天前
|
存储 缓存 Linux
【Shell 命令集合 磁盘维护 】Linux 设置和查看硬盘驱动器参数 hdparm命令使用教程
【Shell 命令集合 磁盘维护 】Linux 设置和查看硬盘驱动器参数 hdparm命令使用教程
35 0
|
1月前
|
分布式计算 关系型数据库 MySQL
Sqoop【部署 01】CentOS Linux release 7.5 安装配置 sqoop-1.4.7 解决警告并验证(附Sqoop1+Sqoop2最新版安装包+MySQL驱动包资源)
【2月更文挑战第8天】Sqoop CentOS Linux release 7.5 安装配置 sqoop-1.4.7 解决警告并验证(附Sqoop1+Sqoop2最新版安装包+MySQL驱动包资源)
93 1
|
4天前
|
Linux Go
Linux命令Top 100驱动人生! 面试必备
探索Linux命令不再迷茫!本文分10部分详解20个基础命令,带你由浅入深掌握文件、目录管理和文本处理。 [1]: <https://cloud.tencent.com/developer/article/2396114> [2]: <https://pan.quark.cn/s/865a0bbd5720> [3]: <https://yv4kfv1n3j.feishu.cn/docx/MRyxdaqz8ow5RjxyL1ucrvOYnnH>
46 0
|
4天前
|
Linux 内存技术 Perl
【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件
【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件
|
11天前
|
存储 缓存 固态存储
Linux设备全览:从字符到块,揭秘每种设备的秘密
在Linux的世界里,设备是构成系统的基础,它们使得计算机能够与外界互动。Linux设备可以大致分为几种类型,每种类型都有其独特的特性和用途。🌌让我们一起探索这些设备类型及其特性。
|
17天前
|
Linux 内存技术
Linux内核读取spi-nor flash sn
Linux内核读取spi-nor flash sn
13 1
|
17天前
|
Linux
Linux驱动运行灯 Heartbeat
Linux驱动运行灯 Heartbeat
8 0