記錄18 s3c2440移植uboot

2021-06-27 03:14:44 字數 4000 閱讀 5422

1.解壓u-boot-1.1.6

,進入u-boot

目錄,修改

makefile:

在 

smdk2410_config :       unconfig

@$(mkconfig) $(@:_config=) arm arm920t smdk2410 null s3c24x0

加上

tx2440_config :    unconfig

@$(mkconfig) $(@:_config=) arm arm920t tx2440 null s3c24x0

2.在第128行:指定交叉編譯器

ifeq ($(arch),arm)

cross_compile = arm-linux-

3.在board目錄下,新建自己的開發板目錄tx2440,可以把smdk2410目錄更名為tx2440,把檔案smdk2410.c改為tx2440.c。修改該目錄下的makefile,把smdk2410.o改為tx2440.o。

cobjs  := tx2440.o flash.o

4.然後將board目錄下其它所有資料夾全部刪除,只留tx2440

5.在include/configs目錄下建立板子的配置標頭檔案,把smdk2410.h改名為tx2440.h,再把所有的檔案全部刪除,只留tx2440.h

6.測試能否編譯成功:

執行  

make tx2440_config

如果出現  make: execvp: …………/mkconfig:  它代表使用許可權不夠

可用 chmod 764 mkconfig 

命令加上檔案的執行許可權。

然後再make,成功後可會出現「 configuring for tx2440 board.....」

修改 sdram 配置:

7.在board/tx2440/lowlevel_init.s中,

把 #define b6_bwscon   (dw32)

位寬設為( dw

32 ) 位

把 #define b4_bwscon   (dw16)

位寬設為( dw16 ) 位

根據hclk設定sdram 的重新整理引數,主要是refcnt暫存器,開發板hclk為100m

將 #define refcnt   0x1113

改為#define refcnt  0x4f4

增加對s3c2440的支援:

2440的時鐘計算公式、nand操作和2410不太一樣。

對於2440開發板,將fclk設為400mhz,分頻比為fclk:hclk:pclk=1:4:8。

8.修改board/tx2440/tx2440.c中的board_init函式

/* s3c2440: mpll,upll = (2*m * fin) / (p * 2^s)

* m = m (the value for divider m)+ 8, p = p (the value for divider p) + 2

*/#define s3c2440_mpll_400mhz ((0x7f<<12)|(0x02<<4)|(0x01))

#define s3c2440_upll_48mhz ((0x38<<12)|(0x02<<4)|(0x02))

#define s3c2440_clkdiv 0x05 /* fclk:hclk:pclk = 1:4:8 */

/* s3c2410: mpll,upll = (m * fin) / (p * 2^s)

* m = m (the value for divider m)+ 8, p = p (the value for divider p) + 2

*/#define s3c2410_mpll_200mhz ((0x5c<<12)|(0x04<<4)|(0x00))

#define s3c2410_upll_48mhz ((0x28<<12)|(0x01<<4)|(0x02))

#define s3c2410_clkdiv 0x03 /* fclk:hclk:pclk = 1:2:4 */

int board_init (void)

else

/* adress of boot parameters */

gd->bd->bi_boot_params = 0x30000100;

icache_enable();

dcache_enable();

return 0;

}

9.在cpu/arm920t/s3c24x0/speed.c

中修改:

在程式開頭增加一行 「 declare_global_data_ptr; 

」,這樣才可以使用gd變數

修改get_pllclk函式:

static ulong get_pllclk(int pllreg)

修改get_hclk, get_pclk:

/* for s3c2440 */

#define s3c2440_clkdivn_pdivn (1<<0)

#define s3c2440_clkdivn_hdivn_mask (3<<1)

#define s3c2440_clkdivn_hdivn_1 (0<<1)

#define s3c2440_clkdivn_hdivn_2 (1<<1)

#define s3c2440_clkdivn_hdivn_4_8 (2<<1)

#define s3c2440_clkdivn_hdivn_3_6 (3<<1)

#define s3c2440_clkdivn_uclk (1<<3)

#define s3c2440_camdivn_camclk_mask (0xf<<0)

#define s3c2440_camdivn_camclk_sel (1<<4)

#define s3c2440_camdivn_hclk3_half (1<<8)

#define s3c2440_camdivn_hclk4_half (1<<9)

#define s3c2440_camdivn_dvsen (1<<12)

/* return hclk frequency */

ulong get_hclk(void)

return get_fclk() / hdiv;

}} /* return pclk frequency */

ulong get_pclk(void)

return get_fclk() / hdiv / ((clkdiv & s3c2440_clkdivn_pdivn)? 2:1);

}

}

重新執行 

make tx2440_config
make all

生成u-boot.bin,由於還沒有增加nand flash的支援,所以可燒入nor flash中執行

在make all時會出現錯誤:沒有camdivn

這個要在include/s3c24x0.h中定義, 在129行s3c24x0_clock_power結構體中增加:

s3c24x0_reg32    camdivn;    /* for s3c2440*/

nand flash的支援的修改過程還是很麻煩的,所以的參考其他資料

S3C2440 Linux驅動移植 NAND驅動

開發板 tq2440 核心 linux 2.6.32 pc os ubuntu 11.04 本文將對nand驅動的移植進行簡單介紹。其中,將對nand控制器所需要的引數進行詳細說明。開啟檔案arch arm plat s3c24xx common smdk.c,修改mtd partition結構體陣...

RTEMS在S3C2440上的移植 (1)

學習rtems這款rtos到入門實在是不容易,且這款系統效能等各方面都可以與vxworks媲美,棄之可惜故而又想把學過的只是撿起來。以前由於課題的需要,曾經在pc104上移植過這款系統。但是由於官方支援力度較大,提供了可以使用的交叉編譯工具鏈,因此在x86系列的硬體平台上移植rtems相對比較方便。...

求教 s3c2440問題

趙老師您好,我把您的程式新增到我的程式中去了,下面是主要 1 main函式 int main void a a b rgpbdat liushui delay 20 liushui liushui 0xffe 2 pwm初始化 void pwm init void 3 定時器中斷 static vo...