前兩天在移植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 ([email protected]) (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)的緣故。
雖然有輸出了,但是離移植(並且是板級移植,呵呵)完成還有好一段路。