讓串口能正常輸出打印信息,添加jz2440中S3C2440片上系統的支持。
## 一、匯編文件修改,這部分主要集中修改修改cpu/arm920t/start.S文件。
1、打開/cpu/arm920t/start.S,刪除AT91RM9200使用的LED代碼,117、118行,關閉LED代碼。
~~~
- start_code:
/*
* set the cpu to SVC32 mode
*/
mrsr0,cpsr
bicr0,r0,#0x1f
orrr0,r0,#0xd3
msrcpsr,r0
?/*bl coloured_LED_init
bl red_LED_on*/ ? ? //這是LED燈初始化將其屏蔽掉,因為我們jz2440上的LED資源與SMDK2410開發板的不一致
~~~
2.找到下面的語句,定位到該位置,修改相應部位,即增加紅色部分
~~~
#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)?|| defined(CONFIG_S3C2440)??
mov ?r1, #0xffffffff
ldr ???r0, =INTMSK
strr1, [r0]
# if defined(CONFIG_S3C2440)
ldrr1, =0x7fff ? //這里是屏蔽中斷,S3C440用到了15位,所以把值設置成0x7fff
ldrr0, =INTSUBMSK
strr1, [r0]
# endif ???
# if defined(CONFIG_S3C2440)
# ?define MPLLCON ? ? ? ?0x4C000004?
# ?define UPLLCON ? ? ? ?0x4C000008
?ldrr0, =CLKDIVN
movr1, #5 ? ? ? ? ? ? ? ?//?FCLK:HCLK:PCLK = 1:4:8?
strr1, [r0]
? ? ? ?ldr ? r0, =MPLLCON ? ? //寫MPLL使pll生效,405MHz,(127<<12)+(2<<4)+(1)
? ? ? ?ldr ? r1, =0x7F021
? ? ? ?str ? ?r1, [r0]
? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ?ldr ? r0, =UPLLCON ? ?//USB時鐘48MHz ? ? ? (56<<12)+(2<<4)+(2)
? ? ? ?ldr ? r1, =0x038022
? ? ? ?str ? ?r1, [r0]
?# else
? ? ? ?/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 120 MHz ! */
ldr? ?r0, =CLKDIVN
? ? ? ??mov ? ?r1, #3? ? ?
str? ?r1, [r0]
? ???# endif
#endif?/* CONFIG_S3C2400 || CONFIG_S3C2410 */
/*
* we do sys-critical inits only at reboot,
* not when booting from ram!
*/
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
blcpu_init_crit
#endif
~~~
3 打開 board/samsung/ok2440v3/ok2440v3.c
?將下面一段去掉:
~~~
?#define FCLK_SPEED 1
?#ifFCLK_SPEED==0??????????????/* Fout = 203MHz, Fin = 12MHz for Audio */
?#define M_MDIV? 0xC3
?#define M_PDIV? 0x4
?#define M_SDIV? 0x1
?#elifFCLK_SPEED==1????????????/* Fout = 202.8MHz */
?#define M_MDIV? 0xA1
?#define M_PDIV? 0x3
?#define M_SDIV? 0x1
?#endif
?#define USB_CLOCK 1
?#if USB_CLOCK==0
?#define U_M_MDIV??????? 0xA1 ? ? ?
?#define U_M_PDIV??????? 0x3
?#define U_M_SDIV??????? 0x1
?#elif USB_CLOCK==1
?#define U_M_MDIV??????? 0x48
?#define U_M_PDIV??????? 0x3
?#define U_M_SDIV??????? 0x2
?#endif
~~~
用下面一段替換:
~~~
#define M_MDIV 0x7f
#define M_PDIV 0x2
#define M_SDIV 0x1
#define U_M_MDIV 0x38
#define U_M_PDIV 0x2 ? //因為FL2440的晶振為12M,在芯片手冊可以查到這些值,使得CPU頻率為405M,USB時鐘頻率為48M.
#define U_M_SDIV 0x2
~~~
4 打開cpu/arm920t/s3c24x0/speed.c;修改(根據設置的分頻系數FCLK:HCLK:PCLK?=?1:4:8修改獲取時鐘頻率的函數):
~~~
static ulong get_PLLCLK(int pllreg)
{
? ? S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
? ? ulong r, m, p, s;
? ? if (pllreg == MPLL)
r = clk_power->MPLLCON;
? ? else if (pllreg == UPLL)
r = clk_power->UPLLCON;
? ? else
hang();
? ? m = ((r & 0xFF000) >> 12) + 8;
? ? p = ((r & 0x003F0) >> 4) + 2;
? ? s = r & 0x3;
# if defined(CONFIG_S3C2440)
if (pllreg == MPLL)
{
return((CONFIG_SYS_CLK_FREQ * m * 2) / (p << s));
? ? ? ? ?}
# endif
? ? return((CONFIG_SYS_CLK_FREQ * m) / (p << s));
}
~~~
~~~
/* return HCLK frequency */
ulong get_HCLK(void)
{
? ? S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
# if defined(CONFIG_S3C2440)
return(get_FCLK()/4);
# endif
? ? return((clk_power->CLKDIVN & 0x2) ? get_FCLK()/2 : get_FCLK());
}
~~~
這樣,時鐘就設置好了,保存,重新生成u-boot.bin,下載到開發板運行,就可以看到串口打印信息了
如果我們在include/configs/fl2440.h文件中添加
~~~
#define? CONFIG_SKIP_LOWLEVEL_INIT???? 1 //用來支持uboot在內存中直接運行
~~~
然后再編譯出u-boot.bin,這時的鏡像文件就可以通過J-Link下載到內存0x33f80000處運行。
在board/asmsung/fl2440/fl2440.c添加如下兩個宏定義用來自動補齊命令
~~~
#define CONFIG_CMDLINE_EDITING ? 1 ?
#define CONFIG_AUTO_COMPLETE ? ? 1 /*tab COMPLETE*/?
~~~
- 前言
- FL2440的u-boot-2010.09移植(一)
- FL2440的u-boot-2010.09移植(二)
- FL2440的U-boot-2009.08移植(三)支持Nor FLASH
- FL2440的U-boot-2009.08移植(四) 支持DM900網卡
- FL2440的U-boot-2009.08移植(五)uboot架構中NAND Flash驅動修改
- FL2440如何利用JLINK燒寫U-boot到NAND Flash中
- uboot中的快捷菜單的制作說明
- env_relocate 函數深入分析
- U-boot mkimage指定Linux內核地址時的兩種方式
- 實現u-boot對yaffs/yaffs2文件系統下載的支持