高通的4028芯片。
板子是:IPQ40xx/AP-DK01.1-C2
Uboot可能见到128Mflash
linux系统只看到64M ,见下图的mtd8
看到uboot代码,bootipq命令的过程
先配置一些环境变量
setenv bootargs 'ubi.mtd=rootfs root=mtd:ubi_rootfs rootfstype=squashfs rootwait'
setenv fsbootargs 'ubi.mtd=rootfs root=mtd:ubi_rootfs rootfstype=squashfs'
setenv mtddevname fs
setenv mtddevnum 0
setenv mtdids 'nand1=nand1'
setenv mtdparts 'mtdparts=nand1:0x4000000@0x0(fs),'
setenv partition 'nand1,0'
然后更新设备树。
最后把kernel读到84000000,再使用bootm启动它。
nand device 1
ubi part fs && ubi read 0x84000000 kernel
bootm 0x84000000#config@ap.dk01.1-c2
手动启动以上操作,并修改其中的一些参数,不起作用。
而后想到一个老办法,使用bootargs从uboot给linux传入mtdparts=的参数。
在uboot命令此参数,setenv bootargs 'mtdparts=spi0.0:256k(SBL1),128k(MIBIB),384k(QSEE),64k(CDT),64k(DDRPARAMS),64k(APPSBLENV),512k(APPSBL),64k(ART);spi0.1:64m@0x0(rootfs),64m(ext) ubi.mtd=rootfs ubi.mtd=ext'
然后bootipq.
这样linux系统就可以识别出后64M nand flash了。
还有一种方式:
setenv bootargs 'mtdparts=spi0.0:256k(SBL1),128k(MIBIB),384k(QSEE),64k(CDT),64k(DDRPARAMS),64k(APPSBLENV),512k(APPSBL),64k(ART);spi0.1:128m@0x0(rootfs)'
在linux系统如下:
root@OpenWrt:/# cat /proc/mtd
dev: size erasesize name
mtd0: 00040000 00010000 "SBL1"
mtd1: 00020000 00010000 "MIBIB"
mtd2: 00060000 00010000 "QSEE"
mtd3: 00010000 00010000 "CDT"
mtd4: 00010000 00010000 "DDRPARAMS"
mtd5: 00010000 00010000 "APPSBLENV"
mtd6: 00080000 00010000 "APPSBL"
mtd7: 00010000 00010000 "ART"
mtd8: 08000000 00020000 "rootfs"
mtd9: 003ff000 0001f000 "kernel"
然后使用命令:
ubimkvol /dev/ubi0 --maxavsize -N rootfs_ext
mount -t ubifs ubi0_3 /mnt
这样用户就可以以ubi文件系统的方式使用后面的64M了。