友善mini2440:uboot和内核的移植

来源:互联网 发布:在哪里买淘宝小号 编辑:程序博客网 时间:2024/05/16 01:38

今天一起床就在研究怎么解决cannotget the kernel和乱码的问题

工具:minitools 、Jlink、superboot 、uboot.bin 、uImage

环境:tftp已经搭建好

所用开发板:友善之臂mini2440

一直在尝试各种bootloaderkernel的搭配却从没有认真静下心来仔细研究整个启动过程

 

本文博客地址:http://blog.csdn.net/b2997215859/article/details/47389499

转载须注明转载地址

首先先了解一下nand的分区(mini2440)

第二个分区的起点应该是40000,表上写的是错的


 

具体可以到内核里面去查路径为/arch/arm/mach-s3c2440/mach-mini2440.c

打开可以找到如下代码

源代码如下

  1. static struct mtd_partition friendly_arm_default_nand_part[]= {
  1.          [0]= {
  2.                    .name = "supervivi",
  3.                    .size = 0x00040000,
  4.                    .offset = 0,
  5.          },
  6.          [1]= {
  7.                    .name = "param",
  8.                    .offset = 0x00040000,
  9.                    .size = 0x00020000,
  10.          },
  11.          [2]= {
  12.                    .name = "Kernel",
  13.                    .offset = 0x00060000,
  14.                    .size = 0x00500000,
  15.          },
  16.          [3]= {
  17.                    .name = "root",
  18.                    .offset = 0x00560000,
  19.                    .size = 1024 * 1024 * 1024, //
  20.          },
  21.          [4]= {
  22.                    .name = "nand",
  23.                    .offset = 0x00000000,
  24.                    .size = 1024 * 1024 * 1024, //
  25.          }
  1. };

 

 

 

然后我们通过Jlinksuperboot烧录到norflash里面因为我需要minitoolsuboot.bin烧入nandflash。(当然在这里也可以将通过别的方式将uboot.bin烧入nandflash,限于我手上的资源和之前掉过的各种坑在这里采用的这种方法)。

正如上述那样superboot烧入norflash之后就可以愉快的将uboot.bin通过minitools烧入nandflash里面然后从nandflash启动在倒计时的时候回车即会进入smdk2410的菜单输入命令printenv打印环境变量可以看到其中有一行如下mtdparts=mtdparts=mini2440-0:256k(u-boot),128k(params),5m(kernel),-(rootfs)

这一行显示了分区的参数,u-boot,可以看出分区的参数和内核里面分区是一致的故在此不做改动

 

搭好tftp网络环境之前已经搭过在此不再赘述网上也有很多教程仔细研究一下即可搭好注意硬件是否通畅

 

下面下载uImage到内存然后将内存的内容写入到uImage分区里面命令如下

tftp 0x30008000 uImage

nand erase 0x40000 0x20000

nand write 0x30008000 0x40000 0x20000

之所以不去写uboot.bin,是因为uboot.bin已经在nand分区里面了

 

再进行文件系统的移植文件系统的移植暂时还没弄好等待下次有时间再去研究一下这次的移植出了点问题首先是img文件太大超过了64M(内存大小),故用tftp下载的时候无法显示文件大小如果在范围内的话下载完毕会显示hex十六进制的大小),然后我换用了友善光盘里提供的最小的系统rootfs_rtm_qt4,尝试了一下可以下载完毕并显示大小然后将其移动到第三个分区

执行的命令是

tftp 0x30008000 rootfs_rtm_qt4

nand erase 0x560000 4000000

nand write 30008000 560000 x(x是上面提到的下载完毕提示的大小

然后重启却只能到内核到文件系统的过程中卡在了一个地方所以只能用minitool将文件系统烧入并且可以重新启动过段时间再来研究一下文件系统的移植今晚暂时到这里。hhhhhh。



不过至少解决了uboot不能支持友善内核的问题,而且不会有乱码哦。

在这里提一下,网上也有说,可以用uboot生成的mkimage工具给zImage加个0x40大小的头生成zImage.img,我试了一下,但是uboot并没有成功识别这个zImage.img,=。=,,,,故在此没有用zImage.img。

而且之前乱码是因为bootloader的原因,用的光盘里带的uboot.bin和supervivi和superboot都出现了乱码,最后发现用自己编译的uboot并不会乱码,所以感觉友善略坑,之前还在网上各种改CRT的参数,各种坑。不过总算是学习啦。

1 0
原创粉丝点击