本文共 2187 字,大约阅读时间需要 7 分钟。
硬件: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
转载地址:http://yijhb.baihongyu.com/