前面已经分别移植了内核,根文件系统,移植时,QQ2440单板上使用了一块64M的nand flash,在内核里的MTD分区如下
Nor Flash:存放u-boot-1.1.6
Nand Flash:0x100000~0x300000 存放linux-2.6.22.6(1Mib~3MiB )
0x300000~0xb00000 存放fs_mini.jffs2 (3Mib~11MiB )
0xb00000~0x4000000 存放fs_mini.yaffs (11Mib~64MiB)
nand flash前面1MiB没有使用,是因为里面有坏块,我开始在这里老是不能启动,所以没有用这一段存储区
1.内核烧写:
系统上电后,进入u-boot命令窗口后进行如下烧写步骤
HB2440 # tftp 0x32000000 uImage
HB2440 # nand erase 0x100000 0x200000
HB2440 # nand write 0x32000000 0x100000 0x200000
HB2440 # set bootcmd 'nand read 0x32000000 0x100000 0x200000;bootm 0x32000000'
HB2440 # saveenv
Saving Environment to Flash...
Un-Protected 1 sectors
Erasing Flash...Erasing sector 18 ... ok.
Erased 1 sectors
Writing to Flash... done
Protected 1 sectors
HB2440 # reset
... ...
TCP cubic registered
NET: Registered protocol family 1
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
VFS: Mounted root (jffs2 filesystem).
Freeing init memory: 144K
Warning: unable to open an initial console.
Kernel panic - not syncing: No init found. Try passing init= option to kernel.
出现的问题,是因为没有烧录根文件系统,kernel没有找到第一个init的启动,下面烧录yaffs文件系统
2.烧录根文件系统
进入u-boot命令窗口,执行下面烧写步骤
HB2440 # tftp 0x30000000 fs_mini.yaffs
HB2440 # nand erase 0xb00000 0x3500000
HB2440 # nand write 0x30000000 0xb00000 0x3500000
HB2440 # set bootargs 'noinitrd console=ttySAC0 root=/dev/mtdblock2 rootfstype=yaffs'
HB2440 # saveenv
HB2440 # reset
yaffs: dev is 32505858 name is "mtdblock2"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.2, "mtdblock2"
VFS: Mounted root (yaffs filesystem).
Freeing init memory: 144K
Warning: unable to open an initial console.
Kernel panic - not syncing: No init found. Try passing init= option to kernel.
现在还没有找到解决这个问题的办法,先烧录jffs2文件镜像后,使用jffs2为根文件系统,网上有人说这个问题使用在其他文件系统里面挂载的办法
3.烧录jffs2文件镜像
进入u-boot命令窗口,烧写方式同上
HB2440 # tftp 0x30000000 fs_mini.jffs2
HB2440 # nand erase 0x300000 0x800000
HB2440 # nand write 0x30000000 0x300000 0x800000
HB2440 # set bootargs 'noinitrd console=ttySAC0 root=/dev/mtdblock1 rootfstype=jffs2'
HB2440 # saveenv
HB2440 # reset
tmpfs: No value for mount option 'defaults'
mount: mounting tmpfs on /tmp failed: Invalid argument
yaffs: dev is 32505858 name is "mtdblock2"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.2, "mtdblock2"
*********************************************
* *
* Jack Wu ShenZhen 2440 Rootfs(tftp) 2009.6 *
* Love A.R.M + Linux !! Love Money Come On *
* *
*********************************************
Please press Enter to activate this console.
starting pid 782, tty '/dev/ttySAC0': '/bin/sh'
# ls
bin etc lib mnt root sys usr
dev home linuxrc proc sbin tmp
# cd /dev/
# ls
console mtdblock0 mtdblock1 mtdblock2 null ttySAC0
# cd /tmp/
# ls
lost+found
#
到这里,我们可以看到根文件系统jffs2能正常启动了,并且在/tmp目录下,我们挂载了yaffs文件系统,不知道显示的lost+found是否正常。。。
系统移植部分归纳与感想
这几个周的摸索与思考,终于看到了根文件系统启动是什么样子了,在移植过程中,主要遇到了一下几个问题,花的时间特别多,不过还是解决了
1)nand flash坏块问题,在移植内核一节,我直接在SDRAM中可以看到内核启动,但烧录到nand就出现
了'Verifying Checksum ... Bad Data CRC',后来跳过有坏块的一段烧录内核就可以正常使
用nand了,但网上找了好久,都没有找到解决办法,呵呵,遇到这种问题还正的自己多琢磨
2)按照上面的步骤烧录yaffs文件系统到nand并设自启动为yaffs的根文件系统,就出现了上面的
'Warning: unable to open an initial console.
Kernel panic - not syncing: No init found. Try passing init= option to
kernel.'
后来只有放弃了,使用jffs2为根文件系统,就可以正常,但这里有个问题一直没有搞懂,我的根文件
系统都是同一个文件,只是使用了不用的工具mkyaffsimage和mkfs生成不同的文件镜像,但yaffs就
会出现上面的问题,这个问题只有后面慢慢解决了。。。
3)对各种文件系统的用法和区别在以后使用中慢慢体会了
阅读(2665) | 评论(0) | 转发(0) |