mtd 分区一般采用3种方式实现

1、内核写死  mtd_partition

2、u-boot 传参

为了使kernel能够解析mtdparts信息,我们需要将内核中的Device Drivers -> Memory Technology Device (MTD) support ->Command line partition table parsing选项开启

3、dts 传参

1296的实现方式是u-boot传参

linux 调用 parse_mtd_partitions (注意part_probes参数)和 add_mtd_partitions实现

具体代码如下:linux-4.4.18/drivers/mtd$ vi chips/rtk_sfc.c  

static const char * const part_probes[] = { "cmdlinepart", "RedBoot", NULL };

#ifdef CONFIG_MTD_CMDLINE_PARTS
    printk("[%s]descriptor size 0x%x\n",__FUNCTION__,(unsigned int)descriptor.size);
    nr_parts = parse_mtd_partitions(&descriptor, part_probes, &parts, 0);
#endif

    if(nr_parts <= 0) {
        printk(KERN_NOTICE "Rtk SFC: using single partition\n");
        if(add_mtd_device(&descriptor)) {
            printk(KERN_WARNING "Rtk SFC: (for SST/SPANSION/MXIC/WINBOND SPI-Flash) Failed to register new device\n");
            return -EAGAIN;
        }
    }
    else {
         printk(KERN_NOTICE "Rtk SFC: using dynamic partition\n");
         add_mtd_partitions(&descriptor, parts, nr_parts);
    }

另外,发现rtd1296会多一个disc分区,原来是他修改了add_mtd_partitions函数,把整个设备作为一个完整的分区添加了。

代码如下:

linux-4.4.18/drivers/mtd$ vi mtdpart.c

add_mtd_partitions函数最后:

//#ifdef CONFIG_MTD_NAND_DISC
#if defined(CONFIG_ARCH_RTD129X) || defined(CONFIG_ARCH_RTD119X)
        struct mtd_partition partDISC = {0};

        // The name that represents the whole MTD Flash device
        partDISC.name = "disc";
        partDISC.size = master->size;
        partDISC.offset = 0;
        slave = allocate_partition(master, &partDISC, nbparts, 0);
        if (IS_ERR(slave))
                return PTR_ERR(slave);

        mutex_lock(&mtd_partitions_mutex);
        list_add(&slave->list, &mtd_partitions);
        mutex_unlock(&mtd_partitions_mutex);

        add_mtd_device(&slave->mtd);
#endif

rtd1296 mtd 设备驱动分析的更多相关文章

  1. MTD设备驱动

    MTD(memory technology device):内存技术设备 是linux用于描述ROM,NAND,NOR等内存设备的子系统的抽象 MTD设备可以按块读写也可以按字节读写,也就是说MTD设 ...

  2. Linux下 USB设备驱动分析(原创)

    之前做过STM32的usb HID复合设备,闲来看看linux下USB设备驱动是怎么一回事, 参考资料基于韦东山JZ2440开发板,以下,有错误欢迎指出. 1.准备知识 1.1USB相关概念: USB ...

  3. framebuffer设备驱动分析

    一.设备驱动相关文件 1.1. 驱动框架相关文件 1.1.1. drivers/video/fbmem.c a. 创建graphics类.注册FB的字符设备驱动 fbmem_init(void) { ...

  4. linux PMBus总线及设备驱动分析

    PMBus协议规范介绍 PMBus是一套对电源进行配置.控制和监控的通讯协议标准.其最新版本为1.3,该规范还在不断演进中,比如新标准中新增的zone PMBus.AVSBus等特性.在其官网上有详细 ...

  5. LInux设备驱动分析—— kmalloc和kzalloc函数

    今晚在研究EVM5728开发板上面Linux系统的IIC设备驱动程序,偶然之间看到驱动程序中有一处使用了kzalloc函数,本人之前都是使用Linux内核提供的kmalloc / kfree函数来给设 ...

  6. 23.Linux-块设备驱动(详解)

    通过上节的块设备驱动分析,本节便通过内存来模拟块设备驱动  参考内核自带的块设备驱动程序: drivers/block /xd.c drivers/block /z2ram.c 1.本节需要的结构体如 ...

  7. Linux块设备驱动(二) _MTD驱动及其用户空间编程

    MTD(Memory Technology Device)即常说的Flash等使用存储芯片的存储设备,MTD子系统对应的是块设备驱动框架中的设备驱动层,可以说,MTD就是针对Flash设备设计的标准化 ...

  8. Linux设备驱动故障定位指引与实例

    Linux设备驱动故障定位指引 Linux设备驱动种类繁多,涉及的知识点多,想写一个通用的故障定位方法指引,是个难度颇大且不容易做好的工作.限于笔者的经验,难以避免存在疏漏之处,欢迎大家留言指正补充. ...

  9. Linux设备驱动框架设计

    引子 Linux操作系统的一大优势就是支持数以万计的芯片设备,大大小小的芯片厂商工程师都在积极地向Linux kernel提交设备驱动代码.能让这个目标得以实现,这背后隐藏着一个看不见的技术优势:Li ...

随机推荐

  1. 并发和多线程-八面玲珑的synchronized

    上篇<并发和多线程-说说面试常考平时少用的volatile>主要介绍的是volatile的可见性.原子性等特性,同时也通过一些实例简单与synchronized做了对比. 相比较volat ...

  2. docker镜像、容器以及命令操作

    docker image docker image是一个极度精简版的Linux程序运行环境,官网的java镜像包括的东西更少,除非是镜像叠加方式的如centos+java7 docker image是 ...

  3. 【转】SAP BW 顾问靠手 — SAP中的例程

    什么是例程(Routine)? 例程就是我们可以自己定义的程序代码.通过程序代码来完成我们的需求,因为业务是千变万化,如果想让产品能跟随上业务的脚步,就必须要有非常灵活的功能来补充.大家都知道软件产品 ...

  4. 【Spring源码分析】Bean加载流程概览(转)

    转载自:https://www.cnblogs.com/xrq730/p/6285358.html 代码入口 之前写文章都会啰啰嗦嗦一大堆再开始,进入[Spring源码分析]这个板块就直接切入正题了. ...

  5. 推荐几个Windows工具软件: HDDB - Everything的替代品

    主页: http://hddb.xp-zed.com/index.html 简单地说,HDDB 是NTFS磁盘的文件搜索工具,它最开始是模仿 Everything 的,但解决了 Everything ...

  6. Java、Linux、Win 快速生成指定大小的空文件

    Linux dd 命令: dd if=/dev/zero of=<fileName> bs=<一次复制的大小> count=<复制的次数> 生成 50 MB 的空文 ...

  7. AtomicLong.lazySet 是如何工作的?

    原文:http://www.quora.com/Java-programming-language/How-does-AtomicLong-lazySet-work Jackson Davis说:为一 ...

  8. CentOS 配置集群机器之间SSH免密码登录

    SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层和传输层基础上的安全协议.SSH 是目前较可靠,专为远 ...

  9. CLOS架构是啥?

    有多少种技术能够在六十五年后依旧能够熠熠生辉,在IT的基础架构中扮演着重要角色?CLOS架构应该算是一项.Clos架构,诞生于1952年,是由由贝尔实验室一位叫Charles Clos的人提出的.CL ...

  10. 内存溢出OutOfMemory

    https://blog.csdn.net/hzy38324/article/details/76719105 https://blog.csdn.net/u010833547/article/det ...