Chinaunix首页 | 论坛 | 博客
  • 博客访问: 151164
  • 博文数量: 18
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 222
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-24 22:24
个人简介

电子民工

文章存档

2011年(1)

2009年(16)

2008年(1)

我的朋友

分类: LINUX

2009-06-28 16:51:11

前面已经分别移植了内核,根文件系统,移植时,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) |
给主人留下些什么吧!~~