针对于这个问题,网上有很多原因:U-BOOT传给内核的id出错等原因,
仔细检查之后,我最后找到的原因是时钟分频设置错误(设置错了的情况下u-boot操作外设竟然也能成功!)
arch/arm/cpu/arm920t/start.S文件中
# if defined(CONFIG_S3C2400)
# define pWTCON 0x15300000
# define INTMSK 0x14400008 /* Interrupt-Controller base addresses */
# define CLKDIVN 0x14800014 /* clock divisor register */
#else
# define pWTCON 0x53000000
# define INTMSK 0x4A000008 /* Interrupt-Controller base addresses */
# define INTSUBMSK 0x4A00001C
# define CLKDIVN 0x4C000014 /* clock divisor register */
# endif
ldr r0, =pWTCON
mov r1, #0x0
str r1, [r0]
/*
* mask all IRQs by setting all bits in the INTMR - default
*/
mov r1, #0xffffffff
ldr r0, =INTMSK
str r1, [r0]
# if defined(CONFIG_S3C2410)
ldr r1, =0x3ff
ldr r0, =INTSUBMSK
str r1, [r0]
# endif
#define CLK_CTL_BASE 0x4c000014
#define CLKDIVNAA 0x05// FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1
/* 2. 设置运行时钟 */
ldr r0, =CLK_CTL_BASE
ldr r1, =CLKDIVNAA //原先未定义CLKDIVNAA宏,使用了原始代码中的CLKDIVN,导致时钟设置错误
//mov r1, #0x05
str r1, [r0]
CLKDIVN寄存器各位的含义如下