串口信息出现乱码第一想到的原因就是波特率是否设置正确,所以先到串口初始化函数中去看看,在新版本的uboot中,串口初始化工作在board_init_f函数中调用serial_init函数完成,现在来演示一下串口乱码原因的追踪过程:
整个追踪过程依赖sourceInsight的追踪功能,追踪到get_HCLK函数中时看到了#ifdef CONFIG_S3C2440,关于S3C2440的宏定义,而在smdk2440.h文件中没有定义这个宏,所以出现乱码,所以在smdk2440.h文件中增加CONFIG_S3C2440,把原来的CONFIG_S3C2410删掉。
include/configs/smdk2440.h/smdk2440.h修改如下:
20 #define CONFIG_S3C24X0 /* This is a SAMSUNG S3C24x0-type SoC */
21 /*#define CONFIG_S3C2410*/ /* specifically a SAMSUNG S3C2410 SoC */
22 /*#define CONFIG_SMDK2410*/ /* on a SAMSUNG SMDK2410 Board */
23 #define CONFIG_S3C2440
24 #define CONFIG_SMDK2440
25 #define CONFIG_SYS_TEXT_BASE 0x30008000
|
这里需要注意一点,在修改smdk2440.h文件的时候,如果要注释一句话必须使用/**/,否者就直接删掉。如果使用//注释的话编译会出现这个错误:
arm-linux-ld:u-boot.lds:1: ignoring invalid character `#' in expression
arm-linux-ld:u-boot.lds:1: syntax error
make: *** [u-boot] Error 1
|
另外,在start.S中关中断时使用的宏开关CONFIG_S3C2410,现在CONFIG_S3C2410没有了,但也要把中断关掉,所以在start.S中做如下修改:
78 # if defined(CONFIG_S3C2410)
79 ldr r1, =0x3ff
80 ldr r0, =INTSUBMSK
81 str r1, [r0]
82 # endif
83
84 # if defined(CONFIG_S3C2440)
85 ldr r1, =0x3ff
86 ldr r0, =INTSUBMSK
87 str r1, [r0]
88 # endif
|
做了上述修改后直接make编译,编译通过。把u-boot.bin和u-boot-spl.bin再次下载到NandFlash中,选择NandFlash启动,这一次就可以看到让人兴奋的u-boot界面了:
在上面的串口信息中我们可以发现u-boot至少还有4个地方还需要继续修改的----NorFlash支持、NandFlash支持、环境变量设置(u-boot在初始化的时候读取不到环境变量就会报警告说bad CRC)、DM9000支持。
下一讲修改uboot支持NorFlash。