友善的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
阅读(840) | 评论(0) | 转发(0) |