JZ2440开发板运行环境搭建

u-boot移植

NAND Flash空间分配:

256M空间分区如下:

SMDK2410 # mtdpart

device nand0 <jz2440-0>, # parts = 4
 #: name                size            offset          mask_flags
 0: u-boot              0x00040000      0x00000000      0
 1: params              0x00020000      0x00040000      0
 2: kernel              0x02d00000      0x00060000      0
 3: rootfs              0x0d2a0000      0x02d60000      0

active partition: nand0,0 - (u-boot) 0x00040000 @ 0x00000000

defaults:
mtdids  : nand0=jz2440-0
mtdparts: mtdparts=jz2440-0:256k(u-boot),128k(params),45m(kernel),-(rootfs)

进行如此分区的原因:

  ①、256M的Flash中,0x00260000~0x02b80000共41M空间为坏块区。保持u-boot和params区域空间不变,坏块前预留给内核的空间为2M,而本次编译内核大小为2.78M。为此将内核空间进行拓展,预留空间大小为45M,除去坏块41M,可用空间为4M。

  ②、后期将扩大u-boot区域,使u-boot和params占用坏块前位置,坏块作为保留区存放,而后放置内核和文件系统。

问题定位过程:

  按照预留4M内核空间的方案将uImage写入NAND Flash时出现如下错误:

Creating 4 MTD partitions on "NAND":
0x000000000000-0x000000040000 : "U-boot"
0x000000040000-0x000000060000 : "params"
0x000000060000-0x000000460000 : "kernel"
0x000000460000-0x000010000000 : "rootfs"

NAND read: device 0 offset 0x60000, size 0x400000
Skipping bad block 0x00260000
..........
..........
Skipping bad block 0x02b80000 4194304 bytes read: OK ## Booting kernel from Legacy Image at 30000000 ... Image Name: Linux-4.4.15-g7d0cfbc-dirty Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 2852712 Bytes = 2.7 MiB Load Address: 30008000 Entry Point: 30008000 Verifying Checksum ... Bad Data CRC ERROR: can't get kernel image! SMDK2410 #

  而通过tftp将uImage传输到内存的0x30000000位置时可以正常启动,排除内核问题。错误信息中已经将内核头部读取出来,而在进行crc校验时出错,将问题定位到内核写入时出错,通过Skipping发现坏块区已经超过kernel分区。考虑到当前内核区域只有2M空间可用,而内核文件却有2.7M,因此定位可能是由于内核文件的后边部分未写完整,因此进行空间修改,之后问题解决。

编译执行过程:

1、采用打补丁方式,进入u-boot-2012.04.01目录,执行“patch -p1 < ../u-boot-2012.04.01_100ask.patch”,将制作好的补丁打到当前U-boot。

2、执行“make smdk2440_config”配置U-BOOT。

3、执行“make”编译U-BOOT。

5、使用openJTAG进行烧录,烧录完成之后执行“mtdpart”可以看到相应的分区信息。

6、通过“tftp 30000000 uImage”传输内核镜像到内存地址0x30000000,然后执行“nand erase.part kernel”擦除内核镜像空间,最后执行“nand write 30000000 kernel”将内核文件写入NAND Flash空间。

7、通过“tftp 30000000 rootfs.jiffs2”传输文件系统到地址0x30000000,然后执行“nand erase.part rootfs”擦除文件系统镜像空间,最后执行“nand write.jffs2 30000000 d2a0000  $filesize”将该文件写入到NAND Flash空间。

kernel移植

 

posted @ 2020-02-21 20:21  心缘-因缘  阅读(352)  评论(0)    收藏  举报