前两天在移植Linux的过程中,当程序运行到init/main.c中的start_kernel()时,调用printk,死活不能通过串口输出,且有输出时,是乱码, 如下:
通过修改mach-smdk2440.c中的函数smdk2440_map_io(),将
s3c24xx_init_clocks(16934400)修改
为
s3c24xx_init_clocks(12000000).终于能够有输出了:
....
done, booting the kernel.
in start_kernel
Linux version 2.6.22.5 (root@localhost.localdomain) (gcc version 3.4.5) #69 PRE7CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
Machine: SMDK2440
Memory policy: ECC disabled, Data cache writeback
CPU S3C2440A (id 0x32440001)
S3C244X: core 400.000 MHz, memory 100.000 MHz, peripheral 50.000 MHz
S3C24XX Clocks, (c) 2004 Simtec Electronics
CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on
CPU0: D VIVT write-back cache
....
这是因为根据原理图,
晶振的频率是12MHz, 这是需要修改s3c24xx_init_clocks(12000000)的缘故。
虽然有输出了,但是离移植(并且是板级移植,呵呵)完成还有好一段路。