星期四, 一月 17, 2008

使U-BOOT正确引导linux内核

1、为了能使得U-BOOT正确引导linux内核。必须传递合适的参数给内核。
修改include/configs/zj2410.h如下:
/************************************************************
* RTC
************************************************************/
#define CONFIG_RTC_S 24X0 1
/* allow to overwrite serial and ethaddr */
#define CONFIG_ENV_OVERWRITE
#define CONFIG_BAUDRATE 115200
/************************************************************/
/* My Add */
/* enable passing of ATAGs */#define CONFIG_CMDLINE_TAG 1
#define CONFIG_SETUP_MEMORY_TAGS 1
#define CONFIG_INITRD_TAG 1
/***********************************************************
* Command definition
***********************************************************/
#define CONFIG_COMMANDS \
(CONFIG_CMD_DFL | \
CFG_CMD_CACHE | \
CFG_CMD_NAND | \
/*CFG_CMD_EEPROM |*/ \
/*CFG_CMD_I |*/ \
/*CFG_CMD_USB |*/ \
CFG_CMD_REGINFO | \
CFG_CMD_DATE | \
CFG_CMD_ELF)
2、为了能稳定正确引导linux内核,得修改UBOOT的2410CPU频率。
smdk2410的U-BOOT原来运行频率是 ,在这个频率我已开始能正确引导内核,但是后来突然就不能引导了,
总是死在下面这个地方:
Uncompressing Linux....................................................... done, booting the kernel.
按照网上的说法,内核中,在\arch\arm\mach_s 2410\s 2410.c 中
fclk = s 2410_get_pll(MPLLCON, xtal); //读出来的fclk结果和bootloader的频率不一致。
既然不能用 ,VIVI的 能跑得好好的,那我把U-BOOT的频率改成 , 2.6.20 .3的内核和阳初光盘的2.4.18的内核都能正确稳定地引导了。
修改board/yangchu2410/smdk2410.c文件如下:
#define FCLK_SPEED 1
#if FCLK_SPEED==0 /* Fout = 203MHz, Fin = 12MHz for Audio */
#define M_MDIV 0xC3
#define M_PDIV 0x4
#define M_SDIV 0x1
#elif FCLK_SPEED==1 /* Fout = 202.8MHz */
//#define M_MDIV 0xA1
//#define M_PDIV 0x3
//#define M_SDIV 0x1
#define M_MDIV 0x /* Fout = 200MHz */
#define M_PDIV 0x4
#define M_SDIV 0x0
#endif
好了,编译烧写U-BOOT到NAND FLASH,通过setenv 设置bootargs,引导内核时就可以将bootargs传递给内核了。
注意:
1、 对于U-BOOT而言,启动内核时候使用bootm命令才能传递内核参数,使用go命令是不传递内核参数的。
2、 bootm命令引导的只能是用U-BOOT的mkimage工具做过的内核映像,所以要引导阳初光盘带的内核映像,必须用其工具转换一下,至于这个工具怎么用,到U-BOOT的tools目录下找这个工具去吧,./mkimage --help 或者网上找找资料看下就知道了。^_^。

0 意見: