之前写了一篇,不知道为什么没保存下来,,在此重新改动一下文章。蛋疼。。。
本文博客地址:
http://blog.csdn.net/b2997215859/article/details/47390053
转载需注明
今天一起床就在研究怎么解决cannotget the kernel和乱码的问题
工具:minitools 、Jlink、superboot 、uboot.bin 、uImage
开发板:mini2440
环境:已经搭建好tftp
一直在尝试各种bootloader和kernel的搭配,却从没有认真静下心来仔细研究整个启动过程
首先,先了解一下nand的分区(mini2440)
(第二个分区的起点应该是40000,表上写的是错的)
具体可以到内核里面去查,路径为/arch/arm/mach-s3c2440/mach-mini2440.c
打开,可以找到如下代码
源代码如下:
- static struct mtd_partition friendly_arm_default_nand_part[]= {
- [0]= {
- .name = "supervivi",
- .size = 0x00040000,
- .offset = 0,
- },
- [1]= {
- .name = "param",
- .offset = 0x00040000,
- .size = 0x00020000,
- },
- [2]= {
- .name = "Kernel",
- .offset = 0x00060000,
- .size = 0x00500000,
- },
- [3]= {
- .name = "root",
- .offset = 0x00560000,
- .size = 1024 * 1024 * 1024, //
- },
- [4]= {
- .name = "nand",
- .offset = 0x00000000,
- .size = 1024 * 1024 * 1024, //
- }
- };
然后我们通过Jlink将superboot烧录到norflash里面,因为我需要minitools将uboot.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编译产生的mkimage工具来给zImage加个大小为0x40的头生成zImage.img以让uboot来引导。我试了一下,发现uboot识别不了zImage.img,故在此弃用了zImage.img
不过总算是解决了之前各种引导不了内核和乱码的问题。之前乱码是因为选择的bootloader有问题。光盘里带的supervivi和uboot和superboot都会产生乱码,之前还以为是CRT的问题(网上各种找方法改参数),是不是感觉友善略坑啊,有木有。。。orz。。。。。。
不过总算是学习啦。