rv1126-rv1109-mtd-uboot加载分析

本文详细描述了MTD(MemoryTechnologyDevice)启动流程中的节点生成、驱动注册及读写函数的交互,涉及yaffs驱动、核心层和设备层的具体实现。同时提到了rkflash在MTD设备注册中的应用。
摘要由CSDN通过智能技术生成

1.MTD启动流程:

1.1生成MTD节点

arch/arm/dts/rv1126-u-boot.dtsi

        spi_nand: flash@0 {
                u-boot,dm-spl;
                compatible = "spi-nand";
                reg = <0>;
                spi-tx-bus-width = <1>;
                spi-rx-bus-width = <4>;
                spi-max-frequency = <96000000>;
        };
DTS-> compatible = "spi-nand";
    ->spinand_probe
        ->mtd_device_register
            ->mtd_device_parse_register
                ->add_mtd_partitions
                    ->add_mtd_device
                        ->dev_set_name(&mtd->dev, "mtd%d", i);
                        ->device_create(&mtd_class, mtd->dev.parent, MTD_DEVT(i) + 1, NULL,"mtd%dro", i);


               

===================================================================

1.2,生成节点后注册读写函数;

驱动层核心层设备层
驱动函数core硬件函数

==============================例1:=====================================

驱动层:yaffs

核心层:

设备层:(硬件相关)

总结:

                                yaffs驱动层:
                                    ->yaffs_mtd_drv_install //注册驱动读写函数等
                                        ->yaffs_mtd_write //驱动的写函数    
                                        ->yaffs_mtd_read  //驱动的读函数\
                                            ->mtd_read_oob //核心层的读函数
核心层:
->mtd_read_oob //核心层的读函数
    ->mtd->_read_oob //mtd就是核心结构体
        ->到达设备层读函数
                                    设备层:
                                    ->spinand_init//设备初始化的时候设置了_read_oob
                                        ->mtd->_read_oob = spinand_mtd_read;    
                                            ->spinand_read_page//设备的读操作

==============================例2:uboot==================================

设备层:

 核心层:

驱动层:

======================================================================

 这里分析一下ID获取这些

//设备层:
->spinand_init
    ->spinand_detect
        ->spinand_id_detect
            ->spinand_manufacturer_match
                ->spinand_manufacturers[i];//这个是数组
                    ->xtx_spinand_table//这个就是存放ID这些参数

 

=========================================================================

mtd烧录工具,是uboot工具,调用后会谈到do_mtd函数

 核心是:do_mtd

直接去干 核心层的读函数:mtd_read_oob

=========================================================================

rk自己一套的rkflash,预留; 

compatible = "rockchip,sfc";
    ->rksfc_probe
        ->rkflash_dev_init
            ->sfc_nand_mtd_init
                ->mtd_device_register
                    ->mtd_device_parse_register
=========================核心层=========================
                        ->add_mtd_partitions
                            ->add_mtd_device
                                ->dev_set_name(&mtd->dev, "mtd%d", i);//生成节点

 

核心层

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旋风旋风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值