UBOOT移植詳細 很全面
將__LIBS := $(subst $(obj),,$(LIBS)) $(subst $(obj),,$(LIBBOARD))
改為__LIBS := $(subst $(obj),,$(LIBBOARD)) $(subst $(obj),,$(LIBS)) 7. 然後說一下跳轉指令。ARM有兩種跳轉方式。 (1)mov pc <跳轉地址〉 這種向程式計數器PC直接寫跳轉地址,能在4GB連續空間內任意跳轉。 (2)通過B BL BLX BX可以完成在當前指令向前或者向後32MB的地址空間的跳轉(為什麼是32MB呢?暫存器是32位的,此時的值是24位有符號數,所以32MB)。 B是最簡單的跳轉指令。要注意的是,跳轉指令的實際值不是絕對地址,而是相對地址——是相對當前PC值的一個偏移量,它的值由彙編器計算得出。 BL非常常用。它在跳轉之前會在暫存器LR(R14)中儲存PC的當前內容。BL的經典用法如下: bl NEXT ; 跳轉到NEXT …… NEXT …… mov pc, lr ; 從子程式返回。 二.開始上機移植:(紅色字型為新增的內容,藍色字型為修改的內容,下同) 給自己的開發板取名為qljt2440。 1. 隨便找個目錄解壓u-boot, $tar –xjvf u-boot-1.3.4.tar.gz2 2. 進入u-boot目錄修改Makefile (你要編譯u-boot那當然少不了配置啦) $cd u-boot-1.3.4 [[email protected] u-boot-1.3.4]$ vim Makefile 修改內容如下: __LIBS := $(subst $(obj),,$(LIBS)) $(subst $(obj),,$(LIBBOARD))
改為 __LIBS := $(subst $(obj),,$(LIBBOARD)) $(subst $(obj),,$(LIBS)) sbc2410x_config: unconfig @$(MKCONFIG) $(@:_config=) arm arm920t sbc2410x NULL s3c24x0 qljt2440_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t qljt2440 qljt s3c24x0 /* 各項的意思如下: qljt2440_config : 這個名字是將來你配置板子時候用到的名字,參見make qljt2440_config命令。 arm: CPU的架構(ARCH) arm920t: CPU的型別(CPU),其對應於cpu/arm920t子目錄。 qljt2440: 開發板的型號(BOARD),對應於board/qljt/qljt2440目錄。 qljt: 開發者/或經銷商(vender)。 s3c24x0: 片上系統(SOC)。 */ 4. 在/board子目錄中建立自己的開發板qljt2440目錄 由於我在上一步板子的開發者/或經銷商(vender)中填了 qljt ,所以開發板qljt2440目錄一定要建在/board子目錄中的qljt目錄下,否則編譯會出錯。 [[email protected] u-boot-1.3.4]$ cd board [[email protected] board]$ mkdir qljt qljt/qljt2440 [[email protected] board]$ cp -arf sbc2410x/* qljt/qljt2440/ [[email protected] board]$ cd qljt/qljt2440/ [[email protected] qljt2440]$ mv sbc2410x.c qljt2440.c [[email protected] qljt2440]$ ls 可以看到下面這些檔案: config.mk flash.c lowlevel_init.s Makefile qljt2440.c u-boot.lds [[email protected] qljt2440]$ vim Makefile COBJS := qljt2440.o flash.o 5. 在 include/configs/ 中建立開發板所需要的配置標頭檔案 [[email protected] qljt2440]$ cd ../../.. [[email protected] u-boot-1.3.4]$ cp include/configs/sbc2410x.h include/configs/qljt2440.h 6. 測試交叉編譯能否成功 (1)配置 [[email protected] u-boot-1.3.4]$ make qljt2440_config Configure for qljt2440 board… (2)測試編譯 [[email protected] u-boot-1.3.4]$ make 詳細資訊如下: 編譯資訊最後兩行: arm-linux-objcopy --gap-fill=0xff -O srec u-boot u-boot.srec arm-linux-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin 到此交叉編譯成功。 三.開始針對自己的開發板移植 1.修改/cpu/arm920t/start.S 1.1 修改暫存器地址定義 #if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
/* turn off the watchdog */
#if defined(CONFIG_S3C2400)
# define pWTCON 0x15300000
# define INTMSK 0x14400008 /* Interupt-Controller base addresses */
# define CLKDIVN 0x14800014 /* clock divisor register */
#else # define pWTCON 0x53000000 /*該地址用來遮蔽看門狗*/
# define INTMSK 0x4A000008 /* Interupt-Controller base addresses 該地址用來遮蔽中斷*/
# define INTSUBMSK 0x4A00001C /*該地址用來遮蔽子中斷*/
# define CLKDIVN 0x4C000014 /* clock divisor register 該地址用來決定FCLK、HCLK、PCLK的比例*/ #define CLK_CTL_BASE 0x4c000000 /* qljt 從S3C2440A.pdf中可以看出該暫存器是存放Mpll和Upll的P254 */#if defined(CONFIG_S3C2440) #define MDIV_405 0x7f << 12 /* qljt 參見P255表,同時要知道本開發板的Fin是12MHz,需要的Fclk(也就 是Mpll)是405MHz*/#define PSDIV_405 0x21 /* qljt 同上,同時設定PDIV和SDIV的值,PDIV和SDIV參見S3C2440A.pdf*/
#endif
#endif 1.2 修改中斷禁止部分
# if defined(CONFIG_S3C2410)
ldr r1, =0x7ff //根據2410晶片手冊,INTSUBMSK有11位可用,
//vivi也是0x7ff,不知為什麼U-Boot一直沒改過來。但是由於晶片復位預設 //所有的終端都是被遮蔽的,所以這個不影響工作
ldr r0, =INTSUBMSK
str r1, [r0]
# endif
# if defined(CONFIG_S3C2440)
ldr r1, =0x7fff //根據2440晶片手冊,INTSUBMSK有15位可用
ldr r0, =INTSUBMSK
str r1, [r0]
# endif 1.3 修改時鐘設定 /*時鐘控制邏輯單元能夠產生s3c2440需要的時鐘訊號,包括CPU使用的主頻FCLK,AHB匯流排使用的HCLK,APB匯流排裝置使用的PCLK,2440裡面的兩個鎖相環(PLL),其中一個對應FCLK、HCLK、PCLK,另外一個對應UCLK(48MHz)*/ /*注意:AHP、APB匯流排的簡介參見“AHB與APB匯流排.doc” */ /* FCLK:HCLK:PCLK = 1:4:8 */
ldr r0, =CLKDIVN
mov r1, #5
str r1, [r0]
/*這三條協處理器命令確實不知道什麼意思,在ATXJGYBC_ql.pdf中搜p15和c1,只知道它們執行以後會把協處理器p15的暫存器c1的最高兩位置1,但c1的最高兩位是沒有意義啊,弄不懂它的真正意思 不過我卻知道這三條語句是從哪裡出來的,詳細請參考s3c2440的datasheet和s3c2440datasheet中的R1_nF和R1_iA.doc */
mrc p15, 0, r1, c1, c0, 0 /*read ctrl register qljt*/ orr r1, r1, #0xc0000000 /*Asynchronous qljt 改變匯流排模式為非同步模式網上某位朋友說不知到在哪裡看到過 如果FCLK與HCLK不同的話就要選擇這種模式的 */
mcr p15, 0, r1, c1, c0, 0 /*write ctrl register qljt*/#if defined(CONFIG_S3C2440) // (2440的主頻可達533MHz,但聽說設到533MHz時系統 //很不穩定,不知是不是SDRAM和匯流排配置的影響,所以現在先設到//405MHz,以後在改進。)
/*now, CPU clock is 405.00 Mhz qljt*/
mov r1, #CLK_CTL_BASE /* qljt*/ mov r2, #MDIV_405 /* mpll_405mhz qljt*/ add r2, r2, #PSDIV_405 /* mpll_405mhz qljt*/ str r2, [r1, #0x04] /* MPLLCON qljt實際上是設定暫存器CLK_CTL_BASE+0x04=0x4c000004的值 */
#endif
#endif /* CONFIG_S3C2400 || CONFIG_S3C2410|| CONFIG_S3C2440 */ 1.4 將從Flash啟動改成從NAND Flash啟動。(特別注意:這和2410的程式有不同,不可混用!!!是拷貝vivi的程式碼。)
將以下U-Boot的重定向語句段: @#if ndef CONFIG_AT91RM9200 #if 0
#ifndef CONFIG_SKIP_RELOCATE_UBOOT
relocate: /* relocate U-Boot to RAM */
adr r0, _start /* r0 <- current position of code */
ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
cmp r0, r1 /* don't reloc during debug */
相關推薦
UBOOT移植詳細 很全面
一.預備知識: 1. 首先,U-Boot1.3.4還沒有支援s3c2440,移植仍是用2410的檔案稍作修改而成的。 2. 2440和2410的區別: 2440和2410的區別主要是2440的主頻更高,增加了攝像頭介面和AC‘
第一次使用Git上傳本地專案到github上,下載、安裝、上傳(很詳細,很全面)
我覺得學習github的人基本上已經快要脫離了小白的標籤,雖然我一直喜歡自稱為小白。對於程式設計師原來說應該都聽說過GitHub,GitHub有許多開源的的專案和一些前沿的技術。因為自己在第一次使用過Git和github時遇到過不少的坑,所以,想對第一次使用Gi
Matlab繪圖-很詳細,很全面
Matlab繪圖 強大的繪圖功能是Matlab的特點之一,Matlab提供了一系列的繪圖函式,使用者不需要過多的考慮繪圖的細節,只需要給出一些基本引數就能得到所需圖形,這類函式稱為高層繪圖函式。此外,Matlab還提供了直接對圖形控制代碼進行操作的低層繪圖操作。這類操作將圖
Android系統架構的詳細解析——很全面
Android 是Google開發的基於Linux平臺的開源手機作業系統。它包括作業系統、使用者介面和應用程式 —— 行動電話工作所需的全部軟體,而且不存在任何以往阻礙移動產業創新的專有權障礙。Android採用WebKit瀏覽器引擎,具備觸控式螢幕、高階圖形顯示和上網功能
2440超詳細uboot移植筆記(七)------去掉 "-pie"選項
你好!這裡是風箏的部落格,歡迎和我一起交流。 如果本篇部落格對您有幫助,或許可以在下方評論給我留個言。 此時uboot裡是存在“pie”選項的,比較麻煩,現在我們把它去掉: a.輸入命令:
Matlab繪圖-很詳細,很全面(包含各種標示符的輸入方法)
Matlab繪圖 強大的繪圖功能是Matlab的特點之一,Matlab提供了一系列的繪圖函式,使用者不需要過多的考慮繪圖的細節,只需要給出一些基本引數就能得到所需圖形,這類函式稱為高層繪圖函式。此外,Matlab還提供了直接對圖形控制代碼進行操作的低層繪圖操作。這類操作將圖形的每個圖形元素(如座標軸、曲線、
HDU1542-Atlantis【離散化&線段樹&掃描線】個人認為很全面的詳解
不同 橫線 高度 scanf style mage 上大 hdu 排序 剛上大一的時候見過這種題,感覺好牛逼哇,這都能算 如今已經不打了,不過適當寫寫題保持思維活躍度還是不錯的,又碰到這種題了,想把它弄出來 說實話,智商不夠,看了很多解析,花了4、5個小時才弄明白 網上好多
uboot裁剪詳細步驟
uboot 裁剪 1.uboot裁剪前準備在進行uboot裁剪前,我們需要準備對應板卡的uboot源碼,uboot交叉編譯工具,uboot編譯說明文檔和uboot鏡像燒錄文檔。建議在進行uboot裁剪前,先確認原先的uboot編譯生成的鏡像能在板卡上正常運行。 2.uboot裁剪2.1獲取對應板卡的配置文件u
[bug]cxf: cvc-complex-type.2.4.c: 通配符的匹配很全面, 但無法找到元素 ' 'jaxws:server' 的聲明,問題處理
alt 運行 提示頁面 題解 src 配置信息 圖片 image 原因 問題原因: 未知,因個人環境不同,無法保證都適用 問題解決方法: 將cxf在spring的配置信息調整到最前方 原配置信息頭: 運行時錯誤提示: 調
第一節:FreeRTOS (MDK)系統移植 (詳細)
移植總結: 第一步準備素材:如何在官網上下載原始檔 第二步移植程式碼:包括兩步:①從原始碼中提需需要的檔案②將程式碼新增到工程中 第三步修改程式碼:最關鍵的一步使程式碼能夠執行起來。 移植例程程式碼DEMO https://download.csdn.net/download/z
uboot移植時原始碼的三種來源
要把uboot移植到自己的硬體平臺上來作為啟動程式碼啟動linux核心,首先要尋找合適的uboot原始碼作為藍本,在此基礎上進行修改以使其能支援自己的硬體平臺。 一般uboot原始碼主要有三種來源:uboot官方、soc官方、硬體開發板官方。 其移植難度依次減小。 1.uboot官方原始
20181102 Uboot移植
第一步 移植Uboot http://processors.wiki.ti.com/index.php/AM335x_U-Boot_User%27s_Guide(官方文件僅供參考,與實際編譯有出入,總體內容豐富,涵蓋了所有啟動方法的介紹,請詳細閱讀)。 在AM335x中,ROM程式碼充當引導
檔案包含姿勢 較詳細且全面
https://chybeta.github.io/2017/10/08/php%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/ 基本 相關函式 php中引發檔案包含漏洞的通常是以下四個函式: include()
剛哥的mysql5.6安裝總結,很全面
0、解除安裝老版本MySQL 查詢並刪除mysql有關的檔案 find / -name mysql rm -rf 上邊查詢到的路徑,多個路徑用空格隔開 #或者下邊一條命令即可 find / -name mysql|xargs rm -rf 在安裝包存放目錄下執行
各種亂碼問題及原理,很全面
一、編碼程序 【01編碼】——很久很久以前,為了表示二極體的通、分,我們引入的高電平、低電平,之後又引入的1、0編碼進行代替 【ASCII編碼】——很久以前,也就是上個世紀60年代,美國佬為了把計算機的“0101010”編碼與文字進行對應起來,制定了一套ASCII編碼方案。
資料整理——Oracle版本歷史(很全面)(Releases and versions of Oracle Database)
資料來源: https://en.wikipedia.org/wiki/Oracle_Database Oracle Database Version Initial Release Version Initial Release Date
二..linux開發之uboot移植(二)——網路命令ping開發搭建使用&tftp伺服器的安裝&nfs網路伺服器的安裝
2018/01/05 19:48 - 網路命令搭建開發板uboot和虛擬機器ubuntu互相ping通記錄 1. uboot可以通過網路來傳輸檔案到開發
四.linux開發之uboot移植(四)——uboot初體驗記錄
一.X210官方uboot配置編譯實踐 將整個BSP打包檔案弄到linux的源生目錄中去解壓分析,不要在windows中的共享資料夾中解壓開。( 除非
五.linux開發之uboot移植(五)——uboot配置和編譯過程詳解
一.uboot主Makefile分析1 1、uboot version確定(Makefile的24-29行) Makefile程式碼部分 (1)uboo
十.linux開發之uboot移植(十)——uboot原始碼分析4-uboot的命令體系
一、uboot命令體系簡介 1、uboot命令體系實現程式碼在哪裡 uboot命令體系的實現程式碼在uboot/common/cmd_xxx.c中。有若干個.c檔案和命令體系有關。(還有command.c main.c也是和命令有關的)。 uboot實