回忆第一期

这是第一篇正式的内容。

在第一期中,使用的是韦老师的uboot,内核,文件系统,于是我遇到的第一个问题就是如何烧写。韦老师的视频是基于jz2440讲解的,同时提供了mini2440和tq2440的代码,最后我在淘宝买了mini2440。买的时候想的很简单,觉得随便在网下就可以下载到mini2440的相关资料,也正是因为这个想法,使我浪费了大概一个星期的时间。

韦老师的视频时间很早,大概是09年吧,那个时候烧写工具还比较单一,也比较麻烦。我只凭着韦老师的视频,和我在网上随便下载的光盘资料,发现怎么都没有办法完成烧写。首先是mini2440里nor flash里烧写的程序有点怪,没有办法通过dnw进行交互。于是我想到可能是有人修改了nor flash里的bootloader(准确来说是supervivi)。所以面临的一个问题就是使用jtag重新烧写uboot。可配套的jtag是并口,我使用的笔记本并没有并口,于是我把我家的老电脑搬了出来,结果却无法识别出cpu,就这样,我又换了好几个同学家的电脑,均以失败告终。后来在网上查了很多资料,又问了淘宝卖家,抱着试一试的态度下载了他给的最新版开发光盘。里面的使用手册很清楚的告诉我,他们已经淘汰了dnw,开发板里的bootloader有配套的最新烧写工具,傻瓜式操作。。。不管怎么说吧,烧写uboot终于成功了。可接下来又遇到了一个问题,就是烧写内核。每次显示烧写内核成功但是读取的时候总是读取不到内核,提示nand坏块太多。我也是各种查资料未果,后来自己猜测,可能是烧写的位置不对:原版的bootloader是supervivi,而韦老师的bootloader是uboot,但我使用的是原厂的烧写软件,可能是分区不匹配导致内核无法读取!于是我在uboot源码中找到了分区:

static structmtd_partition smdk_default_nand_part[] = {

         [0] = {

        .name  = "bootloader",

        .size  = 0x00040000,

        .offset   = 0,

         },

         [1] = {

        .name  = "params",

        .offset = MTDPART_OFS_APPEND,

        .size  = 0x00020000,

         },

         [2] = {

        .name  = "kernel",

        .offset = MTDPART_OFS_APPEND,

        .size  = 0x00200000,

         },

         [3] = {

        .name  = "root",

        .offset = MTDPART_OFS_APPEND,

        .size  = MTDPART_SIZ_FULL,

         }

};

在supervivi中找到分区:

static structmtd_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, //

         }

};

果然不匹配!想来一定是烧写内核都是从0地址开始的,所以uboot才烧写成功了,而内核就不行了。

搞定好内核之后,又设置了网络文件系统,算是全都解决了。

再补充一个,由于笔记本没有串口,所以没办法直接和板子相连打印调试信息。我这里有以前学习uboot使用的imx280时买的usb转ttl和串口转ttl,所以我想着这样连接usbàttlà串口àmini2440可惜想法很丰满,最后却没有实现功能,也不知道是什么原因。所以我单独在网上买了一条usb转串口线,才解决问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值