微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > u-boot-2012.04.01流程以及移植说明

u-boot-2012.04.01流程以及移植说明

时间:11-21 来源:互联网 点击:

编译烧写测试,设置ipaddr,ethaddr参数,设置完成以后ping,但此时设置参数不要保存,因为参数的保存地址没有设置,测试可以用TFTP工具来下载内核

14、易用性修改/裁剪系统:

搜索u-boot启动信息中的CRC报警:“using default environment”即可找到在common/Env_common.c中有默认环境变量数组:default_environment[],其中bootargs=CONFIG_BOOTARGS、bootcmd=CONFIG_BOOTCOMMAND为传给内核的启动参数,要手动在在配置文件:/include/configs/smdk2440.h文件中定义一下:

#define CONFIG_BOOTARGS "console=ttySAC0 root=/dev/mtdblock3" //表示文件系统在3分区

#define CONFIG_BOOTCOMMAND "nand read 30000000 kernel;bootm 30000000" //规划好分区,知道内核存在nand flash哪里之后才可以设置,u-boot根据这条命令启动内核

bootdelay:倒数计时时间长度。

ethaddr:可以在这设置

ipaddr:可以在这设置

#define CONFIG_ETHADDR 00:0c:29:4d:e4:f4

裁剪:

修改配置文件:/include/configs/smdk2440.h

从头看那些是不需要的。

屏蔽:CONFIG_USB_OHCI-----CONFIG_DOS_PARTITION

CONFIG_CMD_DATE

CONFIG_CMD_DHCP

CONFIG_RTC...

BOOTP

CONFIG_CMD_USB

file system都不要

编译u-boot文件变成200k,从新划分区,可以参照来的u-boot的分区,老的分区可以启动内核查看内核启动信息或则:

mtd //u-boot中使用mtd命令可以查看u-boot分区

想知道需要定义哪些宏可以搜索"saveenv",知道在/common/Env_nand.c中可以查看其Makefile就知道要定义哪个宏了。

#if 0

//nor flash环境变量设置

#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x070000)

#define CONFIG_ENV_IS_IN_FLASH

#define CONFIG_ENV_SIZE 0x10000

#define CONFIG_ENV_OVERWRITE

#else

//nand flash环境变量设置

#define CONFIG_ENV_IS_IN_NAND

#define CONFIG_ENV_OFFSET 0x00040000

#define CONFIG_ENV_SIZE 0x20000

#define CONFIG_ENV_RANGE CONFIG_ENV_SIZE

#endif

增加mtd命令:

搜索“mtdparts”,参考示例定义下面的宏分区

cmd_mtdparts.c里,可以根据common的Makefile判断需要定义哪个宏开关,同时要手工添加执行mtdparts_init,如下:

#define CONFIG_CMD_MTDPARTS

#define CONFIG_MTD_DEVICE

#define MTDIDS_DEFAULT "nand0=jz2440-0" // 那一个设备 //

#define MTDPARTS_DEFAULT "mtdparts=jz2440-0:256k(u-boot)," \

"128k(params)," \

"2m(kernel)," \

"-(rootfs)"

在board.c里面:

main_loop前面初始化:run_command("mtdparts default", 0); //要执行:mtdparts default

mtdparts_init();

15、烧写JFFS2:

tftp 30000000 fs_mini_mdev.jffs2

nand erase.part rootfs

nand write.jffs2 30000000 0x00260000 5b89a8 //0x00260000是往哪烧写,5b89a8是文件实际的大小,

//这两个参数不能用rootfs代替,因为实际大小肯定比rootfs分区小,

//直接用rootfs分区会把不相干的东西都烧写进去。

或:tftp 30000000 fs_mini_mdev.jffs2;nand erase.part rootfs;nand write.jffs2 30000000 0x00260000 5b89a8

set bootargs console=ttySAC0 root=/dev/mtdblock3 rootfstype=jffs2

set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2 //增加串口波特率设置

boot

16、烧写YAFFS:

烧写后发现出错(nand write.yaffs 30000000 260000 889bc0):

NAND write: device 0 offset 0x260000, size 0x889bc0

Unknown nand command suffix .yaffs.

由于nand命令对应cmd_nand.c文件,可知出错语句处宏CONFIG_CMD_NAND_YAFFS没有定义

修改配置文件:/include/configs/smdk2440.h增加:

#define CONFIG_CMD_NAND_YAFFS

再烧写u-boot.bin来启动内核发现启动不起来,提示:

VFS: Mounted root (yaffs2 filesystem).

Freeing init memory: 140K

Warning: unable to open an initial console.

Kernel panic - not syncing: No init found. Try passing init= option to kernel.

挂载成功但是缺少文件,可以用:

nand dump 260000

指令查看烧写数据,和fs_mini_mdev.yaffs2里的二进制文件作比较,看看源文件和烧写地址数据是否一致。

修改:drivers/mtd/nand/Nand_util.c

nand_write_skip_bad函数:

a、

rval = nand->write_oob(nand, offset, &ops);

if(rval) //原为:if(!rval)

break;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top