Chinaunix首页 | 论坛 | 博客
  • 博客访问: 93214
  • 博文数量: 38
  • 博客积分: 1640
  • 博客等级: 上尉
  • 技术积分: 415
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-25 08:02
文章分类

全部博文(38)

文章存档

2011年(5)

2010年(19)

2009年(14)

我的朋友

分类: LINUX

2009-10-23 14:28:37

友善的mini2440用户往往要碰到这个问题:
将光盘中的uboot1.1.6按用户手册的方法下到nand flash中,
希望从nand flash启动,然后按uboot的menu提示烧写内核到板子上,启动内核。
往往会出错,
重启... 嘿嘿,发现已经烧的u-boot不见了,啥都启不动了~~~
今在论坛上看到很多帖子讨论此事,
综合前辈们的意见,终于使uboot在板子启动内核了。
先是改了uboot1.1.6两个地方:
1.将/include/configs/open24x0.h的56行:
#define MTDPARTS_DEFAULT "mtdparts=nandflash0:2m@0(kernel)," \
                            "8m(jffs2)," \
                            "-(yaffs)"
改为:
#define MTDPARTS_DEFAULT "mtdparts=nandflash0:256k@0(bootloader),2m(kernel)," \
                            "8m(jffs2)," \
                            "-(yaffs)"
原因是没分好区,烧内核时烧在uboot的地址上将其覆盖了。
2.将/board/open24x0/Open24x0.c的65行:
else
    {
        /* arch number of SMDK2440-Board */
        gd->bd->bi_arch_number = MACH_TYPE_S3C2440;
    }
改为:
else
    {
        /* arch number of SMDK2440-Board */
        gd->bd->bi_arch_number = 782;
    }
将机器Id改为782;这是因为友善提供的内核中的机器ID是782,这要与bootload中相同。
改好后重新编译uboot1.1.6
make Open24x0_config
make
编完后通过Supervivi烧进nand flash中。
接下来因为友善给的内核镜像是zImage而uboot支持的格式是uImage
因此要自己编一个uImage的内核。
首先要make menuconfig一下,
关于make menuconfig这里要说一下,因为本人的交叉编译环境是ubuntu7.10
首先得先安装两个包:
apt-get install libncurses
apt-get install libncurses5-dev
就没有问题了。
按用户手册make menuconfig完毕
编译之前还要做几个事情。
将编好的uboot1.1.6的/tools里的mkimage拷到/usr/bin目录下
还要打个补丁,友善给的uboot1.1.6中arch/arm/boot/Makefile屏蔽掉了uImage的编译
补丁下面给出。
拷在顶层,
输入命令:
patch -p1 OK,可以编译内核了!
make uImage
等一段时间,在arch/arm/boot/下找到 uImage
从nand flash启动...
按menu提示烧入uImage和根文件。
从此就能从nand flash 启动uboot啦 ...
启动开始会有3秒时间,if按任意键进uboot菜单;else启动内核。

补丁代码:
(建立一个名为uImage.patch的文件复制过去)

Index: kernel-2.6.13/arch/arm/Makefile
===================================================================
--- kernel-2.6.13.orig/arch/arm/Makefile 2008-11-06 21:26:52.000000000 +0800
+++ kernel-2.6.13/arch/arm/Makefile 2008-11-06 21:27:27.000000000 +0800
@@ -184,7 +184,7 @@
# Convert bzImage to zImage
bzImage: zImage

-zImage Image xipImage bootpImage aesopk: vmlinux
+zImage Image xipImage bootpImage aesopk uImage: vmlinux
  $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@

zinstall install: vmlinux
Index: kernel-2.6.13/arch/arm/boot/Makefile
===================================================================
--- kernel-2.6.13.orig/arch/arm/boot/Makefile 2008-11-06 21:27:35.000000000 +0800
+++ kernel-2.6.13/arch/arm/boot/Makefile 2008-11-06 21:28:57.000000000 +0800
@@ -25,7 +25,7 @@
export ZRELADDR INITRD_PHYS PARAMS_PHYS

# ghcstop fix
-targets := Image zImage xipImage bootpImage aesopk
+targets := Image zImage xipImage bootpImage aesopk uImage

ifeq ($(CONFIG_XIP_KERNEL),y)

@@ -57,21 +57,21 @@

endif

-#quiet_cmd_uimage = UIMAGE  $@
-#      cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \
-#     -C none -a $(ZRELADDR) -e $(ZRELADDR) \
-#     -n 'Linux-$(KERNELRELEASE)' -d $< $@
-
quiet_cmd_uimage = UIMAGE  $@
       cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \
-     -C gzip -a $(ZRELADDR) -e $(ZRELADDR) \
+     -C none -a $(ZRELADDR) -e $(ZRELADDR) \
      -n 'Linux-$(KERNELRELEASE)' -d $< $@

+#quiet_cmd_uimage = UIMAGE  $@
+#      cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \
+#     -C gzip -a $(ZRELADDR) -e $(ZRELADDR) \
+#     -n 'Linux-$(KERNELRELEASE)' -d $< $@

-#$(obj)/uImage: $(obj)/zImage FORCE
-# $(call if_changed,uimage)
+
+$(obj)/uImage: $(obj)/zImage FORCE
+ $(call if_changed,uimage)
# @cp -f arch/arm/boot/uImage /korea-dokdo/tftpboot/aesopk  # jdh added
-# @echo '  Image $@ is ready'
+ @echo '  Image $@ is ready'

#ghcstop fix
$(obj)/Image.gz: $(obj)/Image FORCE
阅读(814) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~