前段时间买了块友善之臂的nano2410的板子,一直都跑的是vivi,但是为了移植2.6内核,决定先把uboot移植过来,这就开始了我的痛苦之旅……
1.这快板子没有nor flash,只有32M的NAND FLASH,所以要先找一个支持NAND FLASH的U-BOOT,点击下载
2.make smdk2410_defconfig
3.针对nano2410的板子修改一些文件
(1)board/smdk2410/config.mk
找到
TEXT_BASE = 0x33F80000
改成
TEXT_BASE = 0x31F80000
(2)board/smdk2410/lowlevel_init.S
找到
#define B6_BWSCON (DW32)
改成
#define B6_BWSCON (DW16)
上面两处修改都是针对nano2410的ram的
(3)common/cmd_boot.c
这个文件修改的地方比较多,主要是要能用go命令直接引导内核,这个问题困扰了我很长时间,
在网上找了好多文章,都说可以用bootm启动内核,但无论我怎么改都不行,只有直接这样改
才行。还希望有高手帮我解释一下.
--- u-boot-1.1.4-nand/common/cmd_boot.c 2007-06-30 08:42:08.000000000 +0800
+++ u-boot-nano-zj/common/cmd_boot.c 2007-06-29 11:34:05.000000000 +0800
@@ -28,9 +28,9 @@
#include <command.h>
#include <net.h>
-#if defined(CONFIG_I386)
+//#if defined(CONFIG_I386)
DECLARE_GLOBAL_DATA_PTR;
-#endif
+//#endif
void call_linux(long a0, long a1, long a2)
{
@@ -77,6 +77,7 @@
static void setup_linux_param(ulong param_base)
{
struct param_struct *params = (struct param_struct *)param_base;
+
char *linux_cmd;
//linux_cmd = "noinitrd root=/dev/mtdblock/2 init=/linuxrc console=ttyS0";
@@ -89,11 +90,12 @@
/* set linux command line */
memcpy(params->commandline, linux_cmd, strlen(linux_cmd) + 1);
}
+
int do_go (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
ulong addr, rc;
int rcode = 0;
-
+ struct param_struct *params = gd->bd->bi_boot_params;
if (argc < 2) {
printf ("Usage:\n%s\n", cmdtp->usage);
return 1;
@@ -117,8 +119,12 @@
argv[0] = (char *)gd;
#endif
#if !defined(CONFIG_NIOS)
- rc = ((ulong (*)(int, char *[]))addr) (--argc, &argv[1]);
-#else
+ //rc = ((ulong (*)(int, char *[]))addr) (--argc, &argv[1]);
+
+params->u1.s.page_size = 4096;
+memcpy(params->commandline, CONFIG_BOOTARGS, strlen(CONFIG_BOOTARGS) + 1);
+rc = ((ulong (*)(int, char *[]))addr) (0,gd->bd->bi_arch_number);
+
/*
* Nios function pointers are address >> 1
*/
@@ -146,3 +152,24 @@
"reset - Perform RESET of the CPU\n",
NULL
);
(3)include/configs/smdk2410.h
找到
#define CFG_MEMTEST_END 0x33F00000 /* 63 MB in DRAM */
#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */
#define CONFIG_MTD_NAND_VERIFY_WRITE 1
#define STACK_BASE 0x33f00000
#define UBOOT_RAM_BASE 0x33f80000
改成
#define CFG_MEMTEST_END 0x31F00000 /* 31 MB in DRAM */
#define PHYS_SDRAM_1_SIZE 0x02000000 /* 32 mb
//#define CONFIG_MTD_NAND_VERIFY_WRITE 1//注释这一行
# define STACK_BASE 0x31f00000
#define UBOOT_RAM_BASE 0x31f80000
4.可以开始编译了,我用的是2.95.3的编译器编译的,在编译过程中可能会有些错误,如果是提示.srec什么的出错,就修改example/Mackfile,
把%.srec: %
改成%.srec: %.o
ok,可以下载到板上看看效果了!