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

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

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

        run_command("mtdparts default",);
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\r\n");
run_command("mtdparts default", );
}
#endif

添加mtdparts引起的问题的更多相关文章

  1. u-boot中添加mtdparts支持以及Linux的分区设置

    简介 作者:彭东林 邮箱:pengdonglin137@163.com u-boot版本:u-boot-2015.04 Linux版本:Linux-3.14 硬件平台:tq2440, 内存:64M   ...

  2. 移植u-boot-1.1.6之mtdparts分区

    和u-boot高版本不同,mtdparts命令没有cmd_mtdparts这么一个单独的文件来实现. 不过,搜索uboot可以在cmd_jffs2.c里面看到如下代码: U_BOOT_CMD( mtd ...

  3. 嵌入式 uboot以及kernel添加看门狗临时记录(个人记录未整理乱)

    Uboot_Kernerl_Add_Watch_Dog: U-Boot 2010.06 (Nov 01 2013 - 15:28:44) DRAM:  128 MiBCheck spi flash c ...

  4. 向openwrt 源码添加ap143支持

    借鉴地址:http://www.pppei.net/blog/post/536 1.向文件 \target\linux\ar71xx\generic\profiles\atheros.mk 中添加ap ...

  5. Hi3531添加16GByte(128Gbit) NAND Flash支持

    0.板子上已有Nor Flash了,添加的Nand Flash型号为MT29F128G08CJABAWP,进系统挂接NAND作为一个分区 1.修改uboot u-boot-2010.06/driver ...

  6. OpenWrt启动过程分析+添加自启动脚本【转】

    一.OpenWrt启动过程分析 转自: http://www.eehello.com/?post=107 总结一下OpenWrt的启动流程:1.CFE->2.linux->3./etc/p ...

  7. uboot 传递的参数 mtdparts

    启动uboot后,在重新烧写程序之前,查看传递给内核的参数时(命令为: printenv),看到如下内容: bootargs=console=ttyS0,115200 mtdparts=spi0.0: ...

  8. .Net Core MVC 网站开发(Ninesky) 2.4、添加栏目与异步方法

    在2.3中完成依赖注入后,这次主要实现栏目的添加功能.按照前面思路栏目有三种类型,常规栏目即可以添加子栏目也可以选择是否添加内容,内容又可以分文章或其他类型,所以还要添加一个模块功能.这次主要实现栏目 ...

  9. C#给PDF文档添加文本和图片页眉

    页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...

随机推荐

  1. HDU 4010 Query on The Trees(动态树)

    题意 给定一棵 \(n\) 个节点的树,每个点有点权.完成 \(m\) 个操作,操作四两种,连接 \((x,y)\) :提 \(x\) 为根,并断 \(y\) 与它的父节点:增加路径 \((x,y)\ ...

  2. Learning-Python【10】:函数初识

    一.什么是函数 函数就是代码的一种组织形式,是指将一组语句的集合通过一个名字(函数名)封装起来,要想指向这个函数,只需要调用其函数名即可 函数分为两大类:内置函数 和 自定义函数 二.为何要用函数 减 ...

  3. The Guideline of Setting Up Samba Server on linux(Ubuntu)

    The Guideline of Setting Up Samba Server on linux(Ubuntu) From terminate command window, install the ...

  4. 【IOS】#import和#include有什么区别,@class呢,#import<>跟#import ""有什么区别?

    1.#import是object-c导入头文件的关键字,#include是C/c++导入头文件的关键字,使用#import导入头文件会自动只导入一次,不会重复导入. 2.@class是告诉编译器某个类 ...

  5. 【Core】.NET Core 部署( Docker + CentOS)

    CentOS 下 Docker安装 使用脚本安装 Docker (1)安装docker  sudo yum install docker (2)启动docker systemctl  start do ...

  6. Rancher2.0中邮件通知的设置

    1-邮件通知的设置-中国电信189邮箱 2-2-邮件通知的设置-腾讯免费企业邮箱 **说明:网易163邮箱.QQ邮箱没有设置成功,可能是因为邮箱设置得太安全的缘故.   参考链接: 中国电信189邮箱 ...

  7. 快速测试方法——JUnit

    特点:写一个类,里面可以执行多个方法. 在一个方法上面添加@Test,选中方法名,右键run,即可执行当前方法 import org.junit.Test; //注:测试方法要求:不能有返回值,不能有 ...

  8. jquery将表单序列化

    在工作中经常要将表单数据通过ajax提交,所以需要将表单序列化为json对象. 已经有大神提供了,以前一直百度,现在决定抄过来收藏一下,方便以后自己用,尊重原创,文章转载自:http://www.cn ...

  9. SpringBoot之依赖注入DI

    相关注解: @Component @Service @Controller @Repository --------------------------------------------- @Inj ...

  10. DP爬台阶问题

    1. 初级爬台阶 - 求最短步数 LC - 70 一次可以迈1-2个台阶,因此最短步数与前两个台阶有关. Initial state: 第一阶:1步 : 第二阶:1步 deduction functi ...