您的位置 首页 电源

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

结合:移植最新uboot的总结参考:u-boot20120401移植到mini2440u-boot-20120401流程以及移植说明:从新制作一个单板:复制u-boot-2012

结合:移植最新uboot的总结

参阅:u-boot2012.04.01移植到mini2440
u-boot-2012.04.01流程以及移植阐明
从头制造一个单板:
仿制u-boot-2012.04.01/board/samsung目录下的:smdk2410文件夹为smdk2440
仿制u-boot-2012.04.01/include/configs目录下的:smdk2410.h文件为smdk2440.h
在u-boot-2012.04.01/boards.cfg文件下仿制65行,修正boards.cfg:
模仿
smdk2410 arm arm920t samsung s3c24x0
添加:
smdk2440 arm arm920t samsung s3c24x0
然后从头装备一下:make smdk2440_config
然后从头编译一下:make
1、设置管理形式:
//
// set the cpu to SVC32 mode
//
mrs r0, cpsr
bic r0, r0, #0x1f
orr r0, r0, #0xd3
msr cpsr, r0
2、关看门狗:
// turn off the watchdog //
# if defined(CONFIG_S3C2400)
# define pWTCON 0x15300000
# define INTMSK 0x14400008 // Interrupt-Controller base addresses //
# define CLKDIVN 0x14800014 // clock divisor register //
#else
# define pWTCON 0x53000000
# define INTMSK 0x4A000008 // Interrupt-Controller base addresses //
# define INTSUBMSK 0x4A00001C
# define CLKDIVN 0x4C000014 // clock divisor register //
# endif
ldr r0, =pWTCON
mov r1, #0x0
str r1, [r0]
3、屏蔽中止:
//
// mask all IRQs by setting all bits in the INTMR – default
//
mov r1, #0xffffffff
ldr r0, =INTMSK
str r1, [r0]
# if defined(CONFIG_S3C2410)
ldr r1, =0x3ff
ldr r0, =INTSUBMSK
str r1, [r0]
# endif
4、设置时钟:
//先屏蔽体系原有的时钟设置-修正board_init_f:
init_sequence
board_early_init_f
// to reduce PLL lock time, adjust the LOCKTIME register //
//writel(0xFFFFFF, &clk_power->locktime);
// configure MPLL //
//writel((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV,
// &clk_power->mpllcon);
#define S3C2440_MPLL_200MHZ ((0x5c<<12)|(0x01<<4)|(0x02))
#define S3C2440_MPLL_400MHZ ((0x5c<<12)|(0x01<<4)|(0x01))
// 设置时钟 //
ldr r0, =0x4c000014
mov r1, #0x05
str r1, [r0]
// 假如HDIVN非0,CPU的总线形式应该从“fast bus mode”变为“asynchronous bus mode” //
mrc p15, 0, r1, c1, c0, 0 // 读出操控寄存器 //
orr r1, r1, #0xc0000000 // 设置为“asynchronous bus mode” //
mcr p15, 0, r1, c1, c0, 0 // 写入操控寄存器 //
ldr r0, =0x4c000004
ldr r1, =S3C2440_MPLL_400MHZ
str r1, [r0]
// 发动ICACHE //
mrc p15, 0, r0, c1, c0, 0 @ read control reg
orr r0, r0, #(1<<12)
mcr p15, 0, r0, c1, c0, 0 @ write it back
5、设置SDRAM:
bl cpu_init_crit
………..
bl lowlevel_init
修正lowlevel_init中为:
.long 0x22011110 //BWSCON
.long 0x00000700 //BANKCON0
.long 0x00000700 //BANKCON1
.long 0x00000700 //BANKCON2
.long 0x00000700 //BANKCON3
.long 0x00000740 //BANKCON4
.long 0x00000700 //BANKCON5
.long 0x00018005 //BANKCON6
.long 0x00018005 //BANKCON7
.long 00x008C04F4 //REFRESH
.long 00x000000B1 //BANKSIZE
.long 00×00000030 //MRSRB6
.long 00×00000030 //MRSRB7
6、初始化nand flash、重定位、清楚BSS段:
bl nand_init_ll
参阅”毕业班第1课”的start.S, init.c(nand flash初始化、读写等操作)来修正代码
把init.c放入board/samsung/smdk2440目录,修正init.c文件主要是加上static,
修正u-boot链接地址CONFIG_SYS_TEXT_BASE为0x33f00000,u-boot.bin文件太大,0x33f80000不行放
//修正u-boot-2012.04.01\u-boot-2012.04.01\board\samsung\smdk2440\Makefile:
COBJS := smdk2410.o init.o //COBJS表明C文件生成的.o文件
//修正链接脚本,把start.S, init.c, lowlevel.S等文件放在最前面
//(u-boot-2012.04.01\u-boot-2012.04.01\arch\arm\cpu\u-boot.lds):
添加:board/samsung/smdk2440/libsmdk2440.o (.text)
{
__image_copy_start = .;
CPUDIR/start.o (.text)
board/samsung/smdk2440/libsmdk2440.o (.text)
*(.text)
}
bl copy_code_to_sdram_ll //重定位
bl clear_bss_ll //铲除BSS
留意:具体代码参阅下面修正处。
7、u-boot发动第二阶段:给内核传递参数
call_board_init_f:
ldr r0,=0x00000000
bl board_init_f
ldr r1, _TEXT_BASE
bl board_init_r
……….
修正board_init_f:
//addr -= gd->mon_len;
//addr &= ~(4096 – 1);
addr = CONFIG_SYS_TEXT_BASE;
//addr = _TEXT_BASE;不必函数核算得到的地址,强制设置u-boot的链接地址为0x33f00000
修正board_init_f, 把relocate_code去掉
//修正include/common.h文件中board_init_f的回来值是unsigned int
回来:return (unsigned int)id;
给board_init_r函数运用,并设置board_init_r函数第二个参数:意图地址为_TEXT_BASE,即CONFIG_SYS_TEXT_BASE
u-boot发动时SP指向SDRAM的刚开端低地址方位,在代码重定位今后要从头设置栈指针SP,更改栈指针SP:
在汇编start.S里添加:
.globl base_sp
base_sp:
.long 0
在函数board_init_f里调用时加上extern long base_sp;声明即可作为变量运用,最终把:
base_sp = addr_sp;即可
修正后:
ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)
bic sp, sp, #7 // 8-byte alignment for ABI compliance //
bl nand_init_ll
mov r0, #0
//ldr r1, =_start
ldr r1, _TEXT_BASE
//ldr r2, =__bss_start
//sub r2, r2, r1
ldr r2, _bss_start_ofs
bl copy_code_to_sdram_ll //重定位
bl clear_bss_ll //铲除BSS
ldr pc, =call_board_init_f //跳到SDRAM中运转call_board_init_f
// Set stackpointer in internal RAM to call board_init_f //
call_board_init_f:
ldr r0,=0x00000000
bl board_init_f
//unsigned int的值存在r0里, 正好给board_init_r
ldr r1, _TEXT_BASE
ldr sp, base_sp //从头设置栈
// 调用第2阶段的代码
bl board_init_r
留意:上面三段代码为其他手动添加,由于u-boot源码中的:
#ifdef CONFIG_NAND_SPL
ldr r0, _nand_boot_ofs
mov pc, r0
_nand_boot_ofs:
.word nand_boot
#else
ldr r0, _board_init_r_ofs
adr r1, _start
add lr, r0, r1
add lr, lr, r9
mov r0, r5
mov r1, r6
mov pc, lr
_board_init_r_ofs:
.word board_init_r – _start
#endif
这段代码便是为了完结调用board_init_r的功用,故省掉这一步直接跳曩昔运转。
8、跳到SDRAM中运转call_board_init_f
ldr pc, =call_board_init_f
9、乱码,检查串口波特率的设置,发现在get_HCLK里没有界说CONFIG_S3C2440
①更改get_HCLK里没有界说CONFIG_S3C2440
board_init_f
init_sequence
serial_init
serial_init_dev
_serial_setbrg
get_PCLK
get_HCLK
处理办法:include/configs/smdk2440.h: 去掉CONFIG_S3C2410
#define CONFIG_S3C2440
在smdk2440.h
#ifdef CONFIG_CMD_NAND
#define CONFIG_NAND_S3C2410
解决办法:暂时去掉如下行
//#define CONFIG_CMD_NAND
再次编译,呈现过错:
fs/yaffs2/libyaffs2.o: In function `yaffs_StartUp:
/home/share/jz2440/source/u-boot/u-boot-2012.04.01/fs/yaffs2/yaffscfg.c:210: undefined reference to `nand_info
解决办法:将#define CONFIG_YAFFS2注释掉
10、去除编译条件pie,在(u-boot-2012.04.01/u-boot-2012.04.01/arch/arm/config.mk)
# LDFLAGS_u-boot += -pie
11、修正代码支撑Nor Flash
在board_init_r函数中:
flash_size = flash_init();
if (flash_size > 0) {
# ifdef CONFIG_SYS_FLASH_CHECKSUM
char *s = getenv(“flashchecksum”);
print_size(flash_size, “”);
//
// Compute and print flash CRC if flashchecksum is set to y
//
// NOTE: Maybe we should add some WATCHDOG_RESET()? XXX
//
if (s && (*s == y)) {
printf(” CRC: X”, crc32(0,
(const unsigned char *) CONFIG_SYS_FLASH_BASE,
flash_size));
}
putc(\n);
# else // !CONFIG_SYS_FLASH_CHECKSUM //
print_size(flash_size, “\n”);
# endif // CONFIG_SYS_FLASH_CHECKSUM //
}
else {
puts(failed);
hang();
}
#endif
上面代码在nand flash发动时nor flash是没有办法拜访的,flash_init之后没有找到nor flash,故打印失利,程序卡死在hang();
修正:当程序找不到nor flash的时分持续运转:
//puts(failed);
//hang();
剖析:flash_init函数,能够翻开下面函数中的调试开关:
if (!flash_detect_legacy(cfi_flash_bank_addr(i), i))
flash_get_size(cfi_flash_bank_addr(i), i);
#define DEBUG 1
#define debug 1
调试开关翻开今后能够依据打印信息查找:可知在数组jedec_table中短少nor flash对应的数组,对应添加一项:
static const struct amd_flash_info jedec_table[] = {
// JZ2440v2运用的MT29LV160DB */
{
.mfr_id = (u16)MX_MANUFACT, // 厂家ID
.dev_id = 0X2249, // 设备ID
.name = “MXIC MT29LV160DB”,
.uaddr = { // NOR flash看到解锁地址
[1] = MTD_UADDR_0x0555_0x02AA // x16
},
.DevSize = SIZE_2MiB, // 总巨细
.CmdSet = P_ID_AMD_STD,
.NumEraseRegions= 4,
.regions = {
ERASEINFO(16*1024, 1),
ERASEINFO(8*1024, 2),
ERASEINFO(32*1024, 1),
ERASEINFO(64*1024, 31),
}
},
编译后测验,发现提示flash扇区太多,能够查找后修正CONFIG_SYS_MAX_FLASH_SECT为:128
12、修正代码支撑Nand Flash
u-boot现已能够Nand发动,可是并不表明u-boot发动今后能够对Nand Flash进行读写操作。
修正:
include/configs/smdk2440.h: #define CONFIG_CMD_NAND
把drivers/mtd/nand/s3c2410_nand.c仿制为s3c2440_nand.c,
一起修正Makefile文件,添加:
COBJS-$(CONFIG_NAND_S3C2440) += s3c2440_nand.o
//#define CONFIG_S3C2410 // specifically a SAMSUNG S3C2410 SoC //
#define CONFIG_S3C2440 // specifically a SAMSUNG S3C2410 SoC //
#ifdef CONFIG_CMD_NAND
#ifdef CONFIG_S3C2410
#define CONFIG_NAND_S3C2410
#define CONFIG_SYS_S3C2410_NAND_HWECC
#else
#define CONFIG_NAND_S3C2440
#define CONFIG_SYS_S3C2440_NAND_HWECC
#endif
#define CONFIG_SYS_MAX_NAND_DEVICE 1
#define CONFIG_SYS_NAND_BASE 0x4E000000
#endif
剖析源码:
bl board_init_r
nand_init(); // go init the NAND //
nand_init_chip(i);
if (board_nand_init(nand)) //调用nand_init初始化nand flash
修正:
a、删去:
#ifdef CONFIG_S3C2410_NAND_HWECC
#endif
之间关于ECC的代码。
b、board_nand_init:
struct s3c2440_nand *nand_reg = s3c2440_get_base_nand();
writel(readl(&clk_power->clkcon) | (1 << 4), &clk_power->clkcon);//使能nand flash操控器
………..
#if 0
cfg = S3C2410_NFCONF_EN;
cfg |= S3C2410_NFCONF_TACLS(tacls – 1);
cfg |= S3C2410_NFCONF_TWRPH0(twrph0 – 1);
cfg |= S3C2410_NFCONF_TWRPH1(twrph1 – 1);
#endif
// 初始化时序 //
cfg = ((tacls-1)<<12)|((twrph0-1)<<8)|((twrph1-1)<<4);
writel(cfg, &nand_reg->nfconf);
// 使能NAND Flash操控器, 初始化ECC, 制止片选 //
writel((1<<4)|(1<<1)|(1<<0), &nand_reg->nfcont);
………..
nand->select_chip = s3c2440_nand_select;
// hwcontrol always must be implemented //
nand->cmd_ctrl = s3c2440_hwcontrol;
nand->dev_ready = s3c2440_dev_ready;
c、s3c2440_hwcontrol:
// ctrl : 表明做什么, 选中芯片/撤销选中, 发指令仍是发地址
//
// dat : 指令值或地址值
static void s3c2440_hwcontrol(struct mtd_info *mtd, int dat, unsigned int ctrl)
{
struct s3c2440_nand *nand = s3c2440_get_base_nand();
if (ctrl & NAND_CLE)
{
// 发指令 //
writeb(dat, &nand->nfcmd);
}
else if(ctrl & NAND_ALE)
{
// 发地址 //
writeb(dat, &nand->nfaddr);
}
}
d、添加函数s3c2440_nand_select:
static void s3c2440_nand_select(struct mtd_info *mtd, int chipnr)
{
struct s3c2440_nand *nand = s3c2440_get_base_nand();
switch (chipnr) {
case -1: // 撤销选中 //
nand->nfcont |= (1<<1);
break;
case 0: // 选中 //
nand->nfcont &= ~(1<<1);
break;
default:
BUG();
}
}
e、s3c2440_dev_ready:
struct s3c2440_nand *nand = s3c2440_get_base_nand();
f、修正一切的s3c2410_nand为s3c2440_nand;
留意USB烧写办法:
1、由于没有裁剪的u-boot到达500K,可是咱们自带的u-boot烧写分区没有这么大,所以不能运用u-boot来烧写u-boot,只能运用u-boot里的指令来烧写:
烧写到nand flash:
usb 1 30000000
用DNW发送文件曩昔
nand erase 0 80000
nand write 30000000 0 80000
把开关拨到nand重启有输出,阐明现在支撑了nand发动
烧写到nor flash:
usb 1 30000000 //1表明一向等候
用DNW发送文件曩昔
protect off all //免除norflash写保护
erase 0 7FFFF //擦除从0到0x7FFFF共0x80000个字节
cp.b 30000000 0 80000 //从内存0x30000000开端烧写程序到norflash的0地址去,烧写0X80000个字节
2、新烧写到nor flash的u-boot不支撑USB烧写,能够运用以下指令,用WINS自带的超级终端下载烧写,ymodem形式:
loady 32000000 //此刻运转的是老的u-boot,栈指针在0x30000000,故不能下载到0x30000000
protect off all
erase 0 7ffff
cp.b 32000000 0 80000
reset
3、修正好网卡后能够用tftp下载内核:
set ipaddr 192.168.48.100
set ethaddr 00:0c:29:4d:e4:f4
到这儿先要在xp翻开tptp服务器,服务器ip为192.168.48.103
set serverip 192.168.48.103
tftp 30000000 uImage
bootm 30000000
4、用tftp下载u-boot到nor flash,相同能够用tftp下载u-boot到nand flash:
set ipaddr 192.168.48.100
set ethaddr 00:0c:29:4d:e4:f4
到这儿先要在xp翻开tptp服务器,服务器ip为192.168.48.103
set serverip 192.168.48.103
tftp 30000000 u-boot.bin
protect off all //免除norflash写保护
erase 0 3FFFF //新裁剪的u-boot只要200k,擦除从0到0x3FFFF共0x40000个字节
cp.b 30000000 0 40000
reset
5、烧写内核:
内核打印出来的分区信息
地址: 巨细:
0x00000000-0x00040000 : “bootloader”
0x00040000-0x00060000 : “params”
0x00060000-0x00260000 : “kernel”
0x00260000-0x10000000 : “root”
nand erase 60000 200000
nand write 30000000 60000 200000
tftp 30000000 uImage
nand erase.part kernel
nand write 30000000 kernel
或:tftp 30000000 uImage;nand erase.part kernel;nand write 30000000 kernel
6、烧写200K的u-boot
烧写到nand flash:
tftp 30000000 u-boot.bin
nand erase 0 40000
nand write 30000000 0 40000
或:tftp 30000000 u-boot.bin;nand erase 0 40000;nand write 30000000 0 40000
把开关拨到nand重启有输出,阐明现在支撑了nand发动
留意:nor flash发动的u-boot既能够烧写nor flash自身也能够烧写nand flash,可是假如是nand flash发动的话就没办法操作nor flash,由于nand flash发动的时分0地址对应片内内存,无法拜访nor flash;
运用tftp东西下载时,文件不能在中文途径下,不然下载的时分找不到文件导致下载失利。
烧写文件时文件实践的巨细能够在文件下载完结后看到,或则用:$filesize,老版其他要带括号,即$(filesize)
指令行设置bootcmd:set bootcmd nand read 30000000 kernel;bootm 30000000
13、修正代码支撑DM9000网卡:
DM9000源码在drivers/net目录下面,检查其Makefile文件,能够知道只要装备CONFIG_DRIVER_DM9000才干支撑DM9000
在装备文件:/include/configs/smdk2440.h文件内找到CONFIG_CS8900,去掉,添加CONFIG_DRIVER_DM9000
在编译,依据过错找找原因,发现没有界说DM9000_DATA,查找DM9000_DATA参阅其他源码界说:
#define CONFIG_DRIVER_DM9000
#define CONFIG_DM9000_BASE 0x20000000
#define DM9000_IO CONFIG_DM9000_BASE
#define DM9000_DATA CONFIG_DM9000_BASE + 4
设置内存操控器位宽等发送数据时序参数:
.long 0x22011110 //BWSCON
.long 0x00000700 //BANKCON0
.long 0x00000700 //BANKCON1
.long 0x00000700 //BANKCON2
.long 0x00000700 //BANKCON3
.long 0x00000740 //BANKCON4 ,修正这儿
编译烧写:依据提示找到board.c里边的初始化函数调用的依然是CS8900初始化函数:
eth_initialize(gd->bd);
if (board_eth_init != __def_eth_init)
#ifdef CONFIG_CMD_NET
int board_eth_init(bd_t *bis)
{
int rc = 0;
#ifdef CONFIG_CS8900
rc = cs8900_initialize(0, CONFIG_CS8900_BASE);
#endif
return rc;
}
#endif
故添加:
#ifdef CONFIG_DRIVER_DM9000
rc = dm9000_initialize(bis);
#endif
在编译烧写测验,设置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;
b、
ops.mode = MTD_OOB_RAW;
c、
在drivers\mtd\nand\Nand_util.c文件中把:
if (!need_skip && !(flags & WITH_DROP_FFS)) {
改为
if (!need_skip && !(flags & WITH_DROP_FFS) && !(flags & WITH_YAFFS_OOB)) {
d、烧写:
更新nor flash里的UBOOT:
tftp 30000000 u-boot.bin; protect off all; erase 0 3ffff; cp.b 30000000 0 40000
reset
烧写YAFFS:
tftp 30000000 fs_mini_mdev.yaffs2
nand erase.part rootfs
nand write.yaffs 30000000 260000 889bc0 //0x00260000是往哪烧写,889bc0是文件实践的巨细,
//这两个参数不能用rootfs替代,由于实践巨细必定比rootfs分区小,
//直接用rootfs分区会把不相干的东西都烧写进去。
或:tftp 30000000 fs_mini_mdev.yaffs2;nand erase.part rootfs;nand write.yaffs 30000000 260000 889bc0
set bootargs console=ttySAC0 root=/dev/mtdblock3
//yaffs文件体系不必指定rootfstype=yaffs,它会主动去找,去匹配。
set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 //添加串口波特率设置
//set bootargs console=ttySAC0 root=/dev/mtdblock3 rootfstype=yaffs
//set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=yaffs //添加串口波特率设置
boot
17、制造补丁:
make distclean
rm u-boot.dis
cd ..
mv u-boot-2012.04.01 u-boot-2012.04.01_100ask
tar xjf u-boot-2012.04.01.tar.bz2
diff –help
diff -urN u-boot-2012.04.01 u-boot-2012.04.01_100ask > u-boot-2012.04.01_100ask_colin.patch
diff -urN u-boot-2012.04.01 u-boot-2012.04.01_100ask > u-boot-2012.04.01_100ask.patch
怎样用这个补丁:
cd u-boot-2012.04.01
patch -p1 < ../u-boot-2012.04.01_100ask_colin.patch
make smdk2440_config
make
最重要的一点:
修正NFS.C里边的#define NFS_TIMEOUT (10*2000UL)

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/263432.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部