第19章Flash设备驱动之NorFlash驱动实例

本文介绍如何为S3C6410平台配置NOR Flash驱动,通过修改板级支持包(BSP)中的平台数据实现。包括设置物理地址、大小、分区信息及总线宽度等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

19.4 NorFlash驱动实例:S3C6410 外围的 NOR Flash 驱动

    针对 S3C2410、S3C6410 等平台,外接 NOR Flash 的情况下,由于该 NOR Flash 直接映射在 CPU 的内存空间上,可以直接使用通用的 drivers/mtd/maps/physmap.c 驱动,在内核配置时应该使能 MTD_PHYSMAP。为了使用 NOR Flash,只需在 BSP 的板文件中添加相应的信息,如 NOR Flash 所在的物理地址和大小、分区信息、总线宽度等,这些信息以platform 资源和数据的形式呈现,如代码清单 19.13。

代码清单 19.13 S3C6410 外围 NOR Flash 的 platform 数据

static struct resource ldd6410_nor_resource = {
         .start = LDD6410_NOR_BASE,
         .end = LDD6410_NOR_BASE + 0x200000 - 1,
         .flags = IORESOURCE_MEM,

 };

static struct mtd_partition ldd6410_mtd_partitions[] = { /* struct mtd_partition 数组*/
             {
                     .name = "System",
                     .size = 0x40000,
                     .offset = 0,
                     .mask_flags = MTD_WRITEABLE, /* force read-only */

             }, 

            {

                     .name = "Data",
                     .size = 0x1C0000,
                     .offset = MTDPART_OFS_APPEND,
             },

 };

static struct physmap_flash_data ldd6410_flash_data = {
             .width = 2,

             .parts = ldd6410_mtd_partitions,

            .nr_parts = ARRAY_SIZE(ldd6410_mtd_partitions),

 };

static struct platform_device ldd6410_device_nor = {
             .name = "physmap-flash",
             .id = 0,
             .dev = {
                     .platform_data = &ldd6410_flash_data,
             },
             .num_resources = 1,
            .resource = &ldd6410_nor_resource,
 };

分析:

    上述代码指定 platform 设备的名称为“physmap-flash”,这和对应 platform 驱动

 drivers/mtd/maps/physmap.c 中定义的名称是一致的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值