主题 : 移植linux系统到QQ2440V3之四(如何设置MTD分区和烧录NAND FLASH自启动)
有钱安装正版,没钱使用原版;远离论坛糙版;不买地摊盗版。
级别: 七朵秋菊
UID: 32943
精华: 0
发帖: 10160
威望: 21387 点
无痕币: 2623 WHB
贡献值: 0 点
在线时间: 5047(时)
注册时间: 2008-05-26
最后登录: 2022-04-11

0 移植linux系统到QQ2440V3之四(如何设置MTD分区和烧录NAND FLASH自启动)

前面已经分别移植了内核,根文件系统,移植时,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)对各种文件系统的用法和区别在以后使用中慢慢体会了
Total 0.038205(s) query 3, Time now is:05-22 03:57, Gzip enabled 粤ICP备07514325号-1
Powered by PHPWind v7.3.2 Certificate Code © 2003-13 秋无痕论坛