移植前的準備
獲取并解壓源碼
SAMSUNG公司于2017年初停止了對S3C2410系列CPU的官方u-boot支持(可在最新版u-boot源碼中打開doc/README.scrapyard,搜索關鍵字S3C2440查看相關說明)。從http://ftp.denx.de/pub/u-boot/下載支持S3C2410處理器的最后一版官方u-boot源碼u-boot-2016.11.tar.bz2,放到宿主機的/opt/u-boot/下。
解壓源代碼并進入根目錄:
tar jxvf u-boot-2016.11.tar.bz2
cd u-boot-2016.11/
指定交叉編譯器
gedit Makefile
找到:
# set default to nothing for native builds
ifeq ($(HOSTARCH),$(ARCH))
CROSS_COMPILE ?=
endif
在下方新插入一行:
CROSS_COMPILE ?=arm-linux-
創建板卡支持文件
(1)創建板卡支持文件夾
拷貝官方smdk2410文件夾進行修改:
cp -rf board/samsung/smdk2410/ board/samsung/tq2440
(2)修改板卡硬件初始化文件
gedit board/samsung/tq2440/lowlevel_init.S
修改s3c2410.S為tq2440.S,修改SMDK2410為TQ2440。
(3)修改板卡高級初始化文件
重命名該文件夾下的smdk2410.c為tq2440.c:
mv board/samsung/tq2440/smdk2410.c board/samsung/tq2440/tq2440.c
編輯該文件:
gedit board/samsung/tq2440/tq2440.c
替換所有SMDK2410為TQ2440,并添加編譯選項。
gedit board/samsung/tq2440/Makefile
修改smdk2410.o為tq2440.o
(4)修改板卡配置文件
編輯該文件:
gedit board/samsung/tq2440/Kconfig
內容為:
if TARGET_TQ2440
config SYS_BOARD
default "tq2440"
config SYS_VENDOR
default "samsung"
config SYS_SOC
default "s3c24x0"
config SYS_CONFIG_NAME
default "tq2440"
endif
(5)添加板卡支持文件信息
gedit arch/arm/Kconfig
找到
config TARGET_SMDK2410
bool "Support smdk2410"
select CPU_ARM920T
在下方插入:
config TARGET_TQ2440
bool "Support tq2440"
select CPU_ARM920T
找到:
source "board/samsung/smdk2410/Kconfig"
在下方插入:
source "board/samsung/tq2440/Kconfig"
(6)修改板卡支持維護信息
gedit board/samsung/tq2440/MAINTAINERS
修改內容為:
TQ2440 BOARD
M: Lion <41979748@qq.com>
S: Maintained
F: board/samsung/tq2440/
F: include/configs/tq2440.h
F: configs/tq2440_defconfig
(7)添加板卡識別信息
gedit arch/arm/include/asm/mach-types.h
找到:
#define MACH_TYPE_SMDK2410 193
在下方插入:
#define MACH_TYPE_TQ2440 168
找到:
#ifdef CONFIG_ARCH_SMDK2410
# ifdef machine_arch_type
# undef machine_arch_type
# define machine_arch_type __machine_arch_type
# else
# define machine_arch_type MACH_TYPE_SMDK2410
# endif
# define machine_is_smdk2410() (machine_arch_type == MACH_TYPE_SMDK2410)
#else
# define machine_is_smdk2410() (0)
#endif
在下面插入一段:
#ifdef CONFIG_ARCH_TQ2440
# ifdef machine_arch_type
# undef machine_arch_type
# define machine_arch_type __machine_arch_type
# else
# define machine_arch_type MACH_TYPE_TQ2440
# endif
# define machine_is_tq2440() (machine_arch_type == MACH_TYPE_TQ2440)
#else
# define machine_is_tq2440() (0)
#endif
創建板卡配置頭文件
cp include/configs/smdk2410.h include/configs/tq2440.h
編輯該文件:
gedit include/configs/tq2440.h
替換S3C2410為S3C2440,替換SMDK2410為TQ2440
創建NAND Flash驅動文件
cp drivers/mtd/nand/s3c2410_nand.c drivers/mtd/nand/s3c2440_nand.c
編輯該文件:
gedit drivers/mtd/nand/s3c2440_nand.c
添加編譯選項:
gedit drivers/mtd/nand/Makefile
找到:
obj-$(CONFIG_NAND_S3C2410) += s3c2410_nand.o
在下方插入一行:
obj-$(CONFIG_NAND_S3C2440) += s3c2440_nand.o
創建默認編譯配置文件
創建tq2440開發板默認配置文件:
cp configs/smdk2410_defconfig configs/tq2440_defconfig
編輯該文件:
gedit configs/tq2440_defconfig
修改開發板目標:
替換CONFIG_TARGET_SMDK2410=y為CONFIG_TARGET_TQ2440=y;
修改命令行前綴:
替換CONFIG_SYS_PROMPT="SMDK2410 # "為CONFIG_SYS_PROMPT="TQ2440 # ";
測試編譯環境
(1)清理環境并重新編譯
make distclean
make tq2440_defconfig
make
編譯失敗,并提示” Not enough room for program headers, try linking with -N”錯誤:
錯誤信息:
arm-linux-ld.bfd: u-boot: Not enough room for program headers, try linking with -N
arm-linux-ld.bfd: final link failed: Bad value
Makefile:1209: recipe for target 'u-boot' failed
make: *** [u-boot] Error 1
(2)根據網上資料,修改頂層配置文件:
gedit Makefile
找到:
LDFLAGS_u-boot += $(LDFLAGS_FINAL)
在下面插入:
# Avoid 'Not enough room for program headers' error on binutils 2.28 onwards
LDFLAGS_u-boot += $(call ld-option, --no-dynamic-linker)
(3)重新編譯
make
在根目錄下生成了u-boot.bin文件,但提示“Error: You must add new CONFIG options using Kconfig”錯誤
錯誤信息:
Error: You must add new CONFIG options using Kconfig
The following new ad-hoc CONFIG options were detected:
CONFIG_NAND_S3C2440
CONFIG_SYS_S3C2440_NAND_HWECC
CONFIG_TQ2440
Please add these via Kconfig instead. Find a suitable Kconfig
file and add a 'config' or 'menuconfig' option.
Makefile:827: recipe for target 'all' failed
make: *** [all] Error 1
這一個錯誤產生的原因是修改了配置頭文件中的默認宏定義而導致配置檢查無法通過,如果根據消息提示手工在whitelist.txt文件中添加相應宏,由于不知道whitelist.txt文件中的排序規則,仍舊可能報錯。
(4)解決白名單校驗不通過問題
根據網上資料來看,目前切實有效的解決辦法是關閉該校驗功能。
gedit Makefile
找到:
$(srctree)/scripts/check-config.sh u-boot.cfg
$(srctree)/scripts/config_whitelist.txt ${srctree} 1>&2
在開頭位置使用#屏蔽這兩行:
# $(srctree)/scripts/check-config.sh u-boot.cfg
# $(srctree)/scripts/config_whitelist.txt ${srctree} 1>&2
創建自動編譯批處理腳本
(1)編寫自動編譯腳本
gedit auto_build.sh
添加如下內容:
#!/bin/bash
echo "Clean Configuration File..."
make distclean
echo "Clean Obj..."
make clean
echo "Load Configuration File..."
make tq2440_defconfig
echo "make..."
make CROSS_COMPILE=arm-linux-
echo "Copy bins to TFTP Folder...."
cp /opt/u-boot/u-boot-2016.11/u-boot.bin /opt/TFTP/u-boot.bin
cp /opt/u-boot/u-boot-2016.11/spl/u-boot-spl.bin /opt/TFTP/u-boot-spl.bin
(2)為自動編譯腳本文件添加執行權限
sudo chmod +X auto_build.sh
(3)修改自動編譯腳本文件所有者
sudo chown -R tq2440:root /opt/u-boot/u-boot-2016.11/auto_build.sh
(4)執行自動編譯腳本
bash ./auto_build.sh
編譯成功:
小結
至此,我們完成了u-boot-2016.11移植到TQ2440開發板的前期準備工作。
修改芯片初始化代碼
修改屏蔽中斷代碼
gedit arch/arm/cpu/arm920t/start.S
找到:
# if defined(CONFIG_S3C2410)
ldr r1, =0x3ff
ldr r0, =INTSUBMSK
str r1, [r0]
# endif
在下面為S3C2440芯片添加:
# if defined(CONFIG_S3C2440)
ldr r1, =0x7ff
ldr r0, =INTSUBMSK
str r1, [r0]
# endif
修改時鐘初始化代碼
(1)修改芯片時鐘初始化代碼
gedit arch/arm/cpu/arm920t/start.S
找到:
/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 120 MHz ! */
ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]
替換為:
#if defined(CONFIG_S3C2440)
#define CLK_CTL_BASE 0x4C000000
#define MDIV_405 0x7f<<12
#define PSDIV_405 0x21
/* FCLK:HCLK:PCLK = 1:4:8 */
/* default FCLK is 405 MHz ! */
ldr r0, =CLKDIVN
mov r1, #5
str r1, [r0]
/* set asynchronous bus mod */
mrc p15, 0, r1, c1, c0, 0
orr r1, r1, #0xc0000000
mcr p15, 0, r1, c1, c0, 0
/* MPLL is 405 MHz ! */
mov r1, #CLK_CTL_BASE
mov r2, #MDIV_405
add r2, r2, #PSDIV_405
str r2, [r1, #0x04]
#else
/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 120 MHz ! */
ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]
#endif /* CONFIG_S3C2440 */
(2)修改板卡時鐘初始化代碼
gedit board/samsung/tq2440/tq2440.c
添加一個新的FCLK配置模式,找到:
#define FCLK_SPEED 1
修改為:
#if !defined(CONFIG_S3C2440)
#define FCLK_SPEED 1
#else
#define FCLK_SPEED 2
#endif /* CONFIG_S3C2440 */
找到對應的配置項:
#if (FCLK_SPEED == 0) /* Fout = 203MHz, Fin = 12MHz for Audio */
#define M_MDIV 0xC3
#define M_PDIV 0x4
#define M_SDIV 0x1
#elif (FCLK_SPEED == 1) /* Fout = 202.8MHz */
#define M_MDIV 0xA1
#define M_PDIV 0x3
#define M_SDIV 0x1
#endif
添加配置模式為2的分支選項:
#if (FCLK_SPEED == 0) /* Fout = 203MHz, Fin = 12MHz for Audio */
#define M_MDIV 0xC3
#define M_PDIV 0x4
#define M_SDIV 0x1
#elif (FCLK_SPEED == 1) /* Fout = 202.8MHz */
#define M_MDIV 0xA1
#define M_PDIV 0x3
#define M_SDIV 0x1
#elif (FCLK_SPEED == 2) /* Fout = 405Hz */
#define M_MDIV 0x7f
#define M_PDIV 0x2
#define M_SDIV 0x1
#endif
添加一個新的UCLK配置模式,找到:
#define USB_CLOCK 1
替換為:
#if !defined(CONFIG_S3C2440)
#define USB_CLOCK 1
#else
#define USB_CLOCK 2
#endif /* CONFIG_S3C2440 */
找到對應的配置項:
#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
添加配置模式為2的分支選項:
#if (USB_CLOCK == 0)
#define U_M_MDIV 0xA1
上一篇:S5PV210開發板刷機(SD卡uboot、串口+USB-OTG刷機方法)
下一篇:Ubuntu11.10使用TFTP協議傳輸文件到TQ210開發板學習筆記-1
推薦閱讀
史海拾趣
隨著電子技術的不斷進步和廣泛應用,CTS敏銳地捕捉到了電子元器件和傳感器市場的巨大潛力。于是,公司開始逐步轉型,將業務重心轉向這些領域。通過不斷的研發和創新,CTS成功設計并生產出一系列高性能的電子元器件和傳感器產品,贏得了市場的廣泛認可。
英特爾(Intel)的成立與發展與微處理器的發明密不可分。在20世紀70年代初,英特爾的工程師們開始研發一種能夠將計算機的中央處理器(CPU)集成到單一芯片上的技術。經過數年的努力,他們成功推出了世界上第一款微處理器——Intel 4004。這一創新不僅改變了計算機行業,也為英特爾的崛起奠定了堅實基礎。
隨著技術的不斷進步,Dynastream公司意識到要想在競爭激烈的市場中立足,必須不斷創新。因此,公司加大了研發投入,致力于提高產品的性能和穩定性。經過數年的努力,Dynastream成功推出了一款具有革命性意義的產品——一款高精度、低功耗的個人監視傳感器。這一產品的推出,不僅讓Dynastream在市場上樹立了良好的口碑,也為公司未來的發展奠定了堅實的基礎。
在擴大產品線的同時,DLK公司也積極拓展國內外市場。通過參加各種行業展會、建立營銷網絡、加強客戶服務等方式,DLK公司成功將產品銷往全球多個國家和地區。在品牌建設方面,DLK公司注重產品質量和服務質量的提升,積極塑造企業形象和品牌形象。通過多年的努力,DLK已經成為了國內外知名的連接器品牌之一。
為了進一步提升市場競爭力,GStek積極尋求與產業鏈上下游企業的戰略合作。公司與知名功率元件供應商NIKO-SEM微電子集團建立了長期穩定的合作關系,共同推動電源管理技術的創新與發展。此外,GStek還積極整合產業鏈資源,優化供應鏈管理,確保產品質量的穩定性和供貨的及時性。這些措施不僅提升了GStek的綜合競爭力,也為其未來的發展奠定了堅實的基礎。
隨著公司實力的增強和市場份額的擴大,華瓷開始將目光投向國際市場。公司積極參加國際陶瓷及電子行業的展會,與國際同行交流學習,同時大力推廣自身的品牌和產品。通過多年的努力,華瓷的陶瓷材料在國際市場上獲得了廣泛的認可,成功打入歐洲、北美等高端市場。
編寫程序記錄分、時,同時把時、分、秒的顯示信息全部顯示在七段數碼管上;編寫程序能夠處理按鍵,要求識別出不同的按鍵以便采取進一步的處理措施;編寫程序能夠記錄年、月、日;通過按鍵能夠分別顯示年、月、日和時、分、秒要求能夠用按鍵初始化當 ...… 查看全部問答∨ |
|
rSRCPND=(1<<8) ; rINTPND=(1<<8); pISR_TICK=(int)isr_tick; rRTCCON=1<<0; rINTMOD=0; rTICNT=(127<<0)+(1<<7); rINTMSK=~BIT_TICK;//+(0<<30); 高手幫 ...… 查看全部問答∨ |
電腦經常會出現這種情況,磁盤上的文件系統結構已損壞,不能使用。 請在卷 C: 上運 行 chkdsk 實用程序。然后運行 chkdsk 又經常死機,一強行重啟就進不了系統了,只 能重裝了,這種情況經常出想,不知道有人能給些好的建議嗎? … 查看全部問答∨ |
版主你好,請問fsmc功能的地址總線復用是不是就對nor而言的,那個8位數據寬度設置是不是對nor是無效的,只能是16位或者32位。復用的時候模式是不是選擇D模式… 查看全部問答∨ |
|
花費800元,感動女友,驚艷網友都說大學畢業是校園愛情的一道坎,很多戀人由于畢業分隔兩地,不能見面就很容易分手。最近有一個大四學生為避免這個愛情魔咒,專門為女友自制了一臺平板電腦,可以每天視頻聊天。女友曬出這臺電腦的照片,引來了無數 ...… 查看全部問答∨ |
用STM32F107+ DM9161AEP 做一個基于LWip的數據接收與發送 要用到哪些知識啊 ? 為什么我用了神舟四號的例程,在主函數里面聲明了 api.h 卻不能用里面的函數呢? 還有有沒有流程圖說說 ...… 查看全部問答∨ |
在繪制PCB過程中,有的元器件看不到怎么辦? 在繪制PCB板過程中,有些元器件可能因為起初擺放位置時考慮不周,導致后來部分元器件超出視圖范圍不能夠在PCB圖中看到。我們可以將元器件全部選中,然后將全部元器件一次移動或進行 ...… 查看全部問答∨ |