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
  • 相关阅读:
    vsftpd原理与搭建
    vsftpd的日志格式
    ftp内置命令
    tcp_tw_reuse、tcp_tw_recycle和tcp_timestamps
    http_code 499、500、502、503、504
    mtr命令网络诊断
    tracert——Windows路由追踪
    linux GPT分区及扩容
    Linux磁盘扩容
    linux磁盘分区、挂载
  • 原文地址:https://www.cnblogs.com/kent-hu/p/8419952.html
Copyright © 2011-2022 走看看