zoukankan      html  css  js  c++  java
  • 添加mtdparts引起的问题

    今天在给uboot添加分区,大家都知道添加完之后直接在终端里面mtd会报错:

    SMDK2440 # mtd
    mtdparts variable not set, see 'help mtdparts'
    no partitions defined
    
    defaults:
    mtdids  : nand0=jz2440-0
    mtdparts: mtdparts=jz2440-0:512k(u-boot),128k(params),2m(kernel),-(rootfs)

    需要手动执行mtdparts default之后在执行mtd命令就好了,于是大家几乎都在arch/arm/lib下的board.c中添加:

            run_command("mtdparts default",0);
        for (;;) {
            main_loop();
        }

    然而我在这个地方加了之后怎么都不成功,分析代码执行mtdparts default其实最终就是调用mtdparts_init()函数,于是我换成在这个地方直接执行mtdparts_init()函数,发现还是不凑效,于是一直在分析do_mtdparts命令,发现也没什么需要添加的宏。

    于是想到有可能run_command("mtdparts default",0);这个代码根本就没执行,于是在这个函数前面加了些打印,发现打印也没有,这个函数果然没有执行。

    于是搜索board_init_r函数,发现在common/board_r.c里面也有个board_init_r函数,赶紧做了个测试,发现果然是这样的,board_r.c这个文件里面也有一个init_sequence_r[]数组,其实初始化的时候是在执行这个数组,并非arch/arm/lib/board.c这个文件里的init_sequence[],最终执行的是run_main_loop函数,我在这个函数里面添加run_command("mtdparts default",0);就可以了。

    当然在直接在main_loop函数里面添加如下代码也可以,走哪个分支,最终都会去执行main_loop函数的:

    #ifdef CONFIG_CMD_MTDPARTS
        if (!getenv("mtdparts"))
        {
            puts("mtdparts env not found
    ");
            run_command("mtdparts default", 0);
        }
    #endif
  • 相关阅读:
    淘宝nginx的学习使用,安装及反向代理,负载均衡
    Linux5
    Linux4
    Linux权限相关及yum源的配置
    linux基本命令及python3的环境配置
    使用Guava RateLimiter限流
    Runnable与Callable 区别
    [Kafka] 如何保证消息不丢失
    [多线程] 等待所有任务执行完成
    [Docker] 快速安装mysql
  • 原文地址:https://www.cnblogs.com/kent-hu/p/8419952.html
Copyright © 2011-2022 走看看