移植u-boot-1.1.6之mtdparts分区

发布者:中华古风最新更新时间:2023-10-12 来源: elecfans关键字:移植  u-boot 手机看文章 扫描二维码
随时随地手机看文章

和u-boot高版本不同,mtdparts命令没有cmd_mtdparts这么一个单独的文件来实现。


不过,搜索uboot可以在cmd_jffs2.c里面看到如下代码:


 1 U_BOOT_CMD(

 2     mtdparts,    6,    0,    do_jffs2_mtdparts,

 3     "mtdparts- define flash/nand partitionsn",

 4     "n"

 5     "    - list partition tablen"

 6     "mtdparts delalln"

 7     "    - delete all partitionsn"

 8     "mtdparts del part-idn"

 9     "    - delete partition (e.g. part-id = nand0,1)n"

10     "mtdparts add

11         

12 

13         ...


可知mtdpart命令是在do_jffs2_mtdparts函数里面实现的。


再看do_jffs2_mtdparts函数:


int do_jffs2_mtdparts(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])

{

    if (argc == 2) {                   //这里先检测参数的个数,注意,我们通常使用mtdpart命令时是不带参数,下面会在这里做修改

        if (strcmp(argv[1], "default") == 0) {

            setenv("mtdids", (char *)mtdids_default);  //mtdids使用mtdids_default

            setenv("mtdparts", (char *)mtdparts_default);  //mtdparts使用mtdparts,以上两个默认配置都是在配置文件里面实现的,如smdk2410.h

            setenv("partition", NULL);


            mtdparts_init();

            return 0;

        } else if (strcmp(argv[1], "delall") == 0) {

            /* this may be the first run, initialize lists if needed */

            mtdparts_init();


            setenv("mtdparts", NULL);


            /* devices_init() calls current_save() */

            return devices_init();

        }

    }


        ...


此外,在cmd_jffs2.c文件的开头,注意有几个宏定义:


#include


#if (CONFIG_COMMANDS & CFG_CMD_JFFS2)


#include


#if (CONFIG_COMMANDS & CFG_CMD_NAND)

#ifdef CFG_NAND_LEGACY

#include

#else /* !CFG_NAND_LEGACY */



#ifdef CONFIG_JFFS2_CMDLINE

/* default values for mtdids and mtdparts variables */

#if defined(MTDIDS_DEFAULT)

static const char *const mtdids_default = MTDIDS_DEFAULT;

#else

#warning "MTDIDS_DEFAULT not defined!"

static const char *const mtdids_default = NULL;

#endif


还有


static int part_validate_nand(struct mtdids *id, struct part_info *part)

{

#if defined(CONFIG_JFFS2_NAND) && (CONFIG_COMMANDS & CFG_CMD_NAND)

    /* info for NAND chips */

    nand_info_t *nand;

这里需要定义三个宏还有默认配置:


#define CONFIG_JFFS2_CMDLINE 1

#define CONFIG_JFFS2_NAND    1


#define MTDIDS_DEFAULT "nand0=nandflash0"

#define MTDPARTS_DEFAULT "mtdparts=nandflash0:256k@0(bootloader),"

                            "128k(params),"

                            "2m(kernel),"

                            "-(root)"


1 #define CONFIG_COMMANDS  

2                         CFG_CMD_JFFS2    |


以上,编译通过后,并不能立刻启动内核,注意此时的启动参数:


#define CONFIG_BOOTCOMMAND "nand read.jffs2 0x30007FC0 kernel; bootm 0x30007FC0"  //因为kernel还没有被识别


这里应该改成:


#define CONFIG_BOOTCOMMAND "nand read.jffs2 0x30007FC0 0x60000 0x200000; bootm 0x30007FC0"


//这里是内核已经被烧写到Nand里面去了,然后使用nand read命令读到sdram的30007fc0地址处,内核在nand里面的地址是0x60000,大小是2M


这里还是不能使用mtdpart命令,原因是上面提到过mtdpart参数的问题


因为我们不使用参数,那么:


 1 if (argc == 2) {

 2         if (strcmp(argv[1], "default") == 0) {

 3             setenv("mtdids", (char *)mtdids_default);

 4             setenv("mtdparts", (char *)mtdparts_default);

 5             setenv("partition", NULL);

 6 

 7             mtdparts_init();

 8             return 0;

 9         } else if (strcmp(argv[1], "delall") == 0) {

10             /* this may be the first run, initialize lists if needed */

11             mtdparts_init();

12 

13             setenv("mtdparts", NULL);

14 

15             /* devices_init() calls current_save() */

16             return devices_init();

17         }

18     }

19 

20     /* make sure we are in sync with env variables */

21     if (mtdparts_init() != 0)

22         return 1;

23 

24     if (argc == 1) {

25         list_partitions();

26         return 0;

27     }


那么,以下四个函数没有执行:


setenv("mtdids", (char *)mtdids_default);

setenv("mtdparts", (char *)mtdparts_default);

setenv("partition", NULL);


mtdparts_init();  //其中,主要是这个没有被执行


处理措施:有两种


第一个,把参数解析那个去掉,直接执行mtdparts_init()函数,代码如下:


 1 int do_jffs2_mtdparts(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])

 2 {

 3                 //by Flinn

 4         setenv("mtdids", (char *)mtdids_default);

 5         setenv("mtdparts", (char *)mtdparts_default);

 6         setenv("partition", NULL);

 7 

 8         mtdparts_init();

 9     if (argc == 2) {

10         if (strcmp(argv[1], "default") == 0) {

11             //setenv("mtdids", (char *)mtdids_default);

12             //setenv("mtdparts", (char *)mtdparts_default);

13             //setenv("partition", NULL);

14 

15             //mtdparts_init();

16             return 0;

17         } else if (strcmp(argv[1], "delall") == 0) {

18             /* this may be the first run, initialize lists if needed */

19             mtdparts_init();

20 

21             setenv("mtdparts", NULL);

22 

23             /* devices_init() calls current_save() */

24             return devices_init();

25         }

26     }    


第二种,如韦东山所做,在main.c的main_loop函数里面添加:


 1 #ifdef CONFIG_JFFS2_CMDLINE

 2     extern int mtdparts_init(void);  //先执行init函数

 3     if (!getenv("mtdparts"))

 4     {

 5         run_command("mtdparts default", 0);  //再调用默认配置

 6     }

 7     else

 8     {

 9         mtdparts_init();

10     }

11 #endif


以上两种办法都是可以的。


关键字:移植  u-boot 引用地址:移植u-boot-1.1.6之mtdparts分区

上一篇:移植u-boot-1.1.6之NOR的支持
下一篇:在EVC环境下开发实现电梯缓冲器复位时间测试系统的应用方案

推荐阅读最新更新时间:2024-11-12 18:47

Mini2440移植qt-extended4.4.3
因为项目需求,前段时间在Mini2440上移植了qt-extended4.4.3,现将移植过程简单的说下,希望对做相关的工作的朋友有帮助。 一、开发环境 上位机: Fedora 9.0 交叉编译器版本:arm-linux-gcc4.4.3(友善之臂提供,在此说明下:arm-linux-gcc4.4.3或arm-linux-gcc4.4.2是支持arm9的,建议在arm9上移植不要使用友善之臂提供的arm-linux-gcc4.5(支持的是arm11的)); 网络文件系统目录:/opt/root_nfs/root_qtopia(大家根据自己的情况而定) 开发板LCD版本:w35 开发板bootloader:u-boo
[单片机]
Mini2440<font color='red'>移植</font>qt-extended4.4.3
U-Boot-2009-03移植笔记(第二阶段移植准备)
在U-Boot-2009-03移植笔记(从Nandflash启动二)中,我们移植好了Nandflash的读驱动,并且将U-boot从nandflash中搬运到了sdram,接下来的工作,就是沿着u-boot的执行主线,继续往下修改代码。 测试代码是否正确执行到第二阶段 U-BOOT的启动,分为两个阶段,第一个阶段是在cpu/arm920t/start.S中的汇编代码,主要工作是设置CPU工作模式、关看门狗、禁中断、初始化内存、代码搬运,初始化堆栈,清BSS段,然后跳转到start_armboot函数执行,这个start_armboot在lib_arm/board.c中,我们在这个start_armboot函数的一开始,点亮
[单片机]
基于Tiny 6410的内核移植 (NAND FLASH 、UBIFS篇)
一、环境 1、开发板 Tiny6410 NAND: 2G RAM: 256M MLC 2、操作系统 Ubuntu10 3、交叉工具编译链 arm-linux-gcc-4.5.1 二、下载内核源码包 linux-2.6.38 三、解压内核 tar –jxvf linux-2.6.38.tar.bz2 我解压的的路径是: 四、NAND FLASH移植 1、修改Makefile vim Makefile 将约191行改为: ARCH ? = arm CROSS_COMPILE ? = arm-linux- 2、cp arch/arm/configs/s3c6400_defconfig .config
[单片机]
基于S3C2440的U-BOOT的start.S分析
在了解了ARM相关的汇编指令后,同时结合网上各位大虾的提点开始阅读u-boot的启动代码,现将分析过程记录如下 可执行文件及内存映射 我们可以把可执行文件分为2种情况:存放态和运行态 1.存放态:可执行文件经过烧到存储介质上(flash或磁盘)的分布,此时可执行文件通常有2部分组成,代码段和数据段,代码段又分为可执行代码段 (.text)和只读数据段(.rodata),数据段可以分为初始化数据段(.data)和未初始化代码段(.bss),如下: +-------------+----------- | .bss | (ZI) +-------------+-- 数据段 | .data | (RW) +-----------
[单片机]
at91sam9261-ubifs成功移植
based on: linux-3.6.9, 128M Nand, busybox-1.20.2 ubi命令来自busbox。 如下: flash_eraseall /dev/mtd1 ubiattach /dev/ubi_ctrl -m 1 ubimkvol /dev/ubi0 -s 104857600 -N rootfs mount -t ubifs /dev/ubi0_0 /media 由于ubifs自身占用,不可能把128M全部使用,暂时只使用100M=104857600 Bytes。 ~#flash_eraseall /dev/mtd1 Erasing 128 Kibyte @ 7fc0000 -
[单片机]
浅谈分析Arm linux 内核移植及系统初始化的过程一
学习嵌入式ARM linux ,主要想必三个方向发展: 1 、嵌入式linux 应用软件开发 2 、linux 内核的剪裁和移植 3 、嵌入式linux 底层驱动的开发 主 要介绍内核移植过程中涉及文件的分布及其用途,以及简单介绍系统的初始化过程。整个arm linux内核的启动可分为三个阶段:第一阶段主要是进行 cpu和体系结构的检查、cpu本身的初始化以及页表的建立等;第二阶段主要是对系统中的一些基础设施进行初始化;最后则是更高层次的初始化,如根设备和 外部设备的初始化。了解系统的初始化过程,有益于更好地移植内核。 1. 内核移植 2. 涉及文件分布介绍 2.1. 内核移植 2.2. 涉及的头文件 /linux-2.6.1
[单片机]
手机成功模式难移植 小米电视藏隐忧
小米科技在利用网路行销及高规低价策略于智慧手机市场窜红后,近期更进一步以人民币2,999元的超杀价格进军智慧电视市场,试图复制手机产品的成功模式。不过,由于现阶段小米电视内容仍缺乏独特性,恐难吸引消费者持续埋单。 小米科技自2010年4月成立至今不到4年的时间,其智慧型手机以高性价比优势抢进市场,一举挤入全球前二十大智慧型手机品牌大厂,其创新又独树一格的经营方式,再加上销售成绩亮眼,使小米科技成为大中华区受瞩目之新兴企业。 2013年小米科技相继发布「小米盒子」与「小米电视」,正式进军电视市场,期复制小米手机之成功模式,除抢占客厅娱乐中心要角外,未来甚至可望扩展至智慧家庭应用,为小米开创下一波成长动能。 2013年
[手机便携]
详细讲解 移植Uboot到ARMer9开发系统上
首先了解ARMer9开发系统硬件设计上和三星原装SMDK2410之间的区别。让uboot在ARMer9开发系统上跑起来,目前只需要关注如下的硬件区别,解决了下面这个问题,uboot就可以在ARMer9开发系统上正常地从串口输出,进入提示符。很多命令都可以使用,当然有些命令需要做修改。 SMDK2410 : nor flash 是AMD的1M的; ARMer9: 是Intel E28F128J3A, 两片并联,一共32M Bytes. 下载一个uboot-1.1.1.tar.bz2.; tar jxvf uboot-1.1.1.tar.bz2; 在uboot 目录board/smdk2410 下的flash.
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved