分类: LINUX
2011-09-04 23:08:40
需要注意的是增加UBI的支持之后uboot会增大100多KB,在NAND中启动,有可能需要修改
//copy U-Boot to RAM
ldr r0, =TEXT_BASE //传递给C代码的第一个参数:u-boot在RAM中的起始地址
mov r1, #0x0 //传递给C代码的第二个参数:Nand Flash的起始地址
mov r2, #0x50000 //传递给C代码的第三个参数:u-boot的长度大小(320KB)
bl nand_read_ll //此处调用C代码中读Nand的函数,现在还没有要自己编写实现
如果uboot传给nand_read_ll 的uboot的参数小于uboot的长度的话,uboot跑不起来,移植的时候被这个问题搞得很郁闷。
另外还有一个地方就是编译的时要求CONFIG_SYS_MALLOC_LEN大于等于512KB,下面两个没有要求我也给改了。
#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE+ 512*1024)
如果没改的话会报错。
这个时候就可以make 了,如果顺利的话会编译出uboot-bin在根目录下。
到这里uboot的UBI移植完成了。
下载文件系统到flash
使用默认的分区对nand进行分区:mtdpart default
1)擦除root分区 nand erase root
2)对root分区进行ubi格式化 ubi part root
AM3517_SHAW # ubi part root
Creating 1 MTD partitions on "nand0":
0x000000780000-0x000010000000 : "mtd=4"
UBI: attaching mtd1 to ubi0
UBI: physical eraseblock size: 131072 bytes (128 KiB)
UBI: logical eraseblock size: 129024 bytes
UBI: smallest flash I/O unit: 2048
UBI: sub-page size: 512
UBI: VID header offset: 512 (aligned 512)
UBI: data offset: 2048
UBI: empty MTD device detected
UBI: create volume table (copy #1)
UBI: create volume table (copy #2)
UBI: attached mtd1 to ubi0
UBI: MTD device name: "mtd=4"
UBI: MTD device size: 248 MiB
UBI: number of good PEBs: 1984
UBI: number of bad PEBs: 4
UBI: max. allowed volumes: 128
UBI: wear-leveling threshold: 4096
UBI: number of internal volumes: 1
UBI: number of user volumes: 0
UBI: available PEBs: 1961
UBI: total number of reserved PEBs: 23
UBI: number of PEBs reserved for bad PEB handling: 19
UBI: max/mean erase counter: 1/0
Volume "rootfs" found at volume id 0
Cannot start volume update
exit not allowed from main input shell.