UBOOT1.3.1到S3C2440移植心得

来源:互联网 发布:mtbf计算软件 编辑:程序博客网 时间:2024/06/04 19:57

                                      UBOOT1.3.1到S3C2440移植心得

  硬件:UTU2440-F的板子.S3C2440+NANDFLASH(K9F1208U0M)+64M SDRAM +CS8900
  自己移植1.3.3一直没有成功,于是网上发现tekkaman大侠已经移植了1.3.1,就拿来主义,
测试基本ok。又修改了一些简单东西,同时对UBOOT的一些以前不理解的东西也加深了理解。
现在主要把自己对UBOOT的一些学习心得记录一下。
    不敢贪功,移植是tekkaman大侠做的(tekkman.cublog.cn),具体下载我这里就不提供了,
总之安装他的方法一定可以显示串口,其他也基本没有什么问题。我把我的过程记录一下:
    1.编译后,默认是DM9000的网卡,所以无法用TFTP,我又重新编译了CS8900的,就没有
采用并口烧写了(那家伙真是太慢了),采用loadb指令,通过串口下载,但是烧写到nand之后
启动不了,怀疑是网卡驱动问题,又反复查了不少资料,知道了网卡的片选对应地址是0x19000000
并没有错啊,最后采用了直接并口烧写一次,之后串口显示正常。恭喜一下。

    2.通过网卡下载内核后执行不了。通tftp 0x30008000 uImage;bootm一直执行死机,不解
是何种原因,开始是显示R1(机器代码为0x12000000)问题,后来就死机。怀疑内核问题,以为
要采用新的mkimage,更换新的UBOOT下面的mkimage,仍然不行,后来偶然采用
tftp 0x32000000 uImage;bootm 0x32000000 竟然ok。
具体原因和bootm的应用请参考《U-BOOT下使用bootm引导内核方法》
http://www.cnitblog.com/luofuchong/archive/2007/01/12/21834.html
 
    3.以前买开发板自带了一个UBOOT,也没有仔细看关于UBOOT的nandflash的分区情况。现在
要引导linux,把linux烧写到一个位置之后,竟然不知道UBOOT在哪里设定分区,记得VIVI是有
设定的。又查了半天,据说UBOOT没有这个设定,仔细看,好像也确实这样。终于明白,其实
可以通过Linux内核和UBOOT中间约定一下就可以了。
如:我的Linux中的分区如下:
struct mtd_partition bit_default_nand_part[] = {
[0] = {
.name = "bootloader",
.offset = 0x00000000, //其实UBOOT区域为:0---0x40000,0x40000---0x60000为参数区域。
.size = 0x00060000,
},
[1] = {
.name = "kernel",
.offset = 0x00060000,
.size = 0x00200000,
},
[2] = {
.name = "root",
.offset = 0x00260000,
.size = 0x03d90000, //0x03d9c000// 03ff0000后面有坏块
}
};
所以我烧录的时候,就把kernel烧写到0x60000开始的位置,把root烧写到0x260000的位置就可以了。
但是如何自动让Linux启动呢,目前还不知道。
这时候先讲一下CONFIG_BOOTARGS,CONFIG_BOOTCOMMAND.
CONFIG_BOOTARGS是在启动Linux的时候传递给Linux内核的启动参数,如果没有的话,Linux就会用他自己的
默认参数。

CONFIG_BOOTCOMMAND是UBOOT自动启动的时候执行的命令,大部分是BOOTM,不过如果想启动在nandflash中
的Linux,要先把Linux内核读出来,然后执行bootm就可以。于是我采用如下配置:
#define CONFIG_BOOTARGS        "noinitrd root=/dev/mtdblock2 rootfstype=cramfs console=ttySAC0,115200"
#define CONFIG_BOOTCOMMAND    "nand read 0x32000000 0x60000 0x200000;bootm 0x32000000"

同时我定义了以下3个参数:
install-k=tftp 0x30008000 uImage;nand erase 0x60000 0x200000;nand write 0x30008000 0x60000 0x200000
install-b=tftp 0x30008000 u-boot.bin;nand erase 0x0 0x40000;nand  write 0x30008000 0x0 0x40000
install-f=tftp 0x30008000 filesystem;nand erase 0x260000;nand write 0x30008000 0x260000 0
更新的话,直接run install-k就可以更新内核了,其他也如此。

文章来源:http://blog.chinaunix.net/u1/49088/showart_1074139.html