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...