您尚未登录。

楼主 #1 2018-09-07 21:15:46

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,285
积分: 9197

mtdparts中的mtd-id为什么常是spi32766.0? 【转】

转载自: https://blog.csdn.net/dreamflyliwei9/article/details/79294269

嵌入式开发一个常见的任务是要调通新的设备,前期有许多工作,比如调通uboot,添加flash驱动支持,配置MTD分区,调通网络等等。其中MTD分区信息多通过cmdline的形式传递给内核,有两种途径,一是通过uboot参数传递,二是内核配置CONFIG_CMDLINE参数。
在cmdline中,MTD分区信息有固定的格式,如下:

mtdparts=<mtddef>[;<mtddef]
<mtddef>  := <mtd-id>:<partdef>[,<partdef>]
<partdef> := <size>[@<offset>][<name>][ro][lk]
<mtd-id>  := unique name used in mapping driver/device (mtd->name)
<size>    := standard linux memsize OR "-" to denote all remaining space
             size is automatically truncated at end of device
             if specified or truncated size is 0 the part is skipped
<offset>  := standard linux memsize
             if omitted the part will immediately follow the previous part
             or 0 if the first part
<name>    := '(' NAME ')'

举一个例子,mtdparts=spi32766.0:256K(uboot),2M(kernel),6M(rootfs).-(rootfsdata)
这其中mtd-id=spi32766.0,我接触过的多个项目均是采用这一个mtd-id,为什么是这个值?32766是怎么得来的?和flash芯片有关系吗?下面来分析。

1、32766=0x7FFE,起初觉得应该和flash型号有关系,但搜索flash驱动代码,没有发现两者有关联,并且使用不同flash芯片的设备均采用这一值,说明它与flash没有关系。
2、那么就分析代码,首先要知道内核中哪个变量代表了mtd-id,这里我不准备按照代码执行顺序来分析,而是按照我思考问题的方式来分析。既然mtdparts是cmdline参数,那我首先要看cmdline的解析函数。

static int parse_cmdline_partitions(struct mtd_info *master,
                    struct mtd_partition **pparts,
                    struct mtd_part_parser_data *data)
{
    ...
    const char *mtd_id = master->name;//mtd-id是由matser->name定义的
    ...
    for (part = partitions; part; part = part->next) {
        if ((!mtd_id) || (!strcmp(part->mtd_id, mtd_id)))
            break;
    } //去匹配cmdline中的mtd-id
    ...
}





离线

楼主 #2 2018-09-07 21:15:55

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,285
积分: 9197

Re: mtdparts中的mtd-id为什么常是spi32766.0? 【转】

占位





离线

楼主 #3 2018-09-07 21:15:58

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,285
积分: 9197

Re: mtdparts中的mtd-id为什么常是spi32766.0? 【转】

占位





离线

楼主 #4 2018-09-07 21:16:01

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,285
积分: 9197

Re: mtdparts中的mtd-id为什么常是spi32766.0? 【转】

占位





离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn