1. 程式人生 > >uboot移植到Keil(mdk-arm)筆記

uboot移植到Keil(mdk-arm)筆記



--luoqindong 2012-02-12


要用mdk-4.21來編譯除錯,用mdk-4.22除錯不能設定斷點


修改u-boot的連線檔案u-boot.lds


u-boot.sct:


Load_region 0x33d00000 {


    E_RO 0x33d00000 {
*(start +First)
        .ANY (+RO )
    }
E_RW +0 {
.ANY (+RW)
}
 
E_UBOOT_CMD  +0 {
*(.u_boot_cmd)
}
 
E_ZI +0{
.ANY (+ZI)
}
}


分為3個region
E_RO 為code,E_RW為data,E_UBOOT_CMD存放uboot command陣列,E_ZI為bss


修改start.S檔案
因為mdk不像gcc能包含.h檔案,所以start.S用到的config.h檔案中的定義要copy到start.S中用equ重新定義
CONFIG_S3C2440equ1
CONFIG_TQ2440 equ1
CONFIG_S3C2400equ0
CONFIG_S3C2410equ0


CONFIG_USE_IRQequ0
CONFIG_SKIP_LOWLEVEL_INITequ 0
CONFIG_SKIP_RELOCATE_UBOOTequ 0


; must be same as in tq2440.h
CFG_MALLOC_LENequ0x30000
CFG_GBL_DATA_SIZEequ128;/* 128 bytes for initial data */
CONFIG_STACKSIZEequ(32*1024);/* regular stack */ 
TEXT_BASEequ 0x33d00000




重新定義:
import ||Image$$E_ZI$$ZI$$Base||
import ||Image$$E_ZI$$ZI$$Limit||
_bss_start
dcd||Image$$E_ZI$$ZI$$Base||
_bss_end
dcd ||Image$$E_ZI$$ZI$$Limit||


cpu_init_crit中有一個呼叫lowlevel_init的語句:
bllowlevel_init
lowlevel_init是初始化sdram的,因為用keil除錯的時候,keil已經用ini指令碼檔案初始化過sdram
然後再將u-boot的除錯檔案載入到sdram,所以用keil除錯uboot的時候,不需要再次初始化sdram,
如果再次初始化sdram會導致sdram中的內容改變,導致不能除錯。


start.S中其他的地方如#if和帶有":"的標號也要修改,因為mdk的彙編支援的條件彙編是IF ELSE ENDIF,
支援的標號不帶":"號。


修改lib_arm/board.c中的
static
void mem_malloc_init (ulong dest_addr)
{
mem_malloc_start = dest_addr;
mem_malloc_end = dest_addr + CFG_MALLOC_LEN;
//mem_malloc_brk = mem_malloc_start;


memset ((void *) mem_malloc_start, 0,
mem_malloc_end - mem_malloc_start);
_init_alloc(mem_malloc_start,mem_malloc_end);
}


unsigned __rt_heap_extend(unsigned size, void **block)
{
return 0;
}


malloc需要用_init_alloc初始化和重新定義__rt_heap_extend,

RealView Libraries and Floating Point Support Guid->The C and C++ Libraries->Tailoring storage management->Support for malloc
中有說明


重新定義global_data.h檔案中的:
//#define DECLARE_GLOBAL_DATA_PTR     __global_reg(5) gd_t *gd;
#define DECLARE_GLOBAL_DATA_PTR     extern gd_t *gd;
因為度過將gd指標用__global_reg(5) 放在r8中,後面通過反彙編除錯發現
r8有時候會被儲存到stack中,然後r8中的內容被修改,而後面的程式碼又需要
用到gd指標。


將include/asm/system.h及其他地方的嵌入式彙編改成mdk下的嵌入式彙編
如mdk下的嵌入式彙編:
__asm
{
mrstmp, cpsr
bictmp, tmp, #128
msrcpsr_c, tmp
}


 



定義__ARM__ __KERNEL__,增加--gnu命令列引數,支援gnu編譯器的擴充套件


 


增加--no_remove定義,不刪除沒有被引用的程式碼,
如.u_boot_cmd section中的陣列和do_開頭的函式


生成bin檔案


 

















相關推薦

uboot移植Keil(mdk-arm)筆記

--luoqindong 2012-02-12 要用mdk-4.21來編譯除錯,用mdk-4.22除錯不能設定斷點 修改u-boot的連線檔案u-boot.lds u-boot.sct: Load_region 0x33d00000 {     E_RO 0x33d0000

使用VisualGDB開發Keil MDK-ARM專案

前言 本教程展示瞭如何使用VisualGDB使用Keil MDK-ARM編譯器構建專案,使用VisualGDB智慧感知包括CodeMap,並使用Visual Studio除錯它。 步驟 在開始之前,確保您可以使用uVision IDE構建Keil專案   開啟Vi

KEIL MDK-ARM Version 5.26正式版開發工具出來啦,下載嘗新吧

KEIL MDK是ARM的最全面的軟體開發解決方案,為基礎的微控制器,包括需要建立,構建所有元件和除錯嵌入式應用。 MDK v5.26版本包含Nuvoton的版本。 MDK v5.26產品元件: MDK-Core基於μVision(僅限Windows),主要支

韋東山老師講解移植uboot-2012.04.01的筆記總結

一:準備移植 1、從下面的官網下載最新的U-boot。用google英文版搜尋最新的u-boot原始碼  ftp://ftp.denx.de/pub/u-boot/ 2、建立sourceinsight工程  a、解壓並在E:\colin weidongshan\trans

keil同時安裝MDK-ARM和C51開發環境

一、安裝準備         1、關閉所有防毒軟體(Windows Defender ,360 ,電腦管家等)。         2、準備好下面幾個檔案:                                                     這幾個檔

KeilMDK-ARM)系列教程(三)_工程目標選項配置(Ⅰ)

Ⅰ、寫在前面 Options for Target目標選項其完全意思是工程目標選項配置,或許有些人分不清工作空間、工程、目標這三個名詞的意思和區別,下面章節將簡述工作空間、工程、目標他們的意思。 由於目標配置的選項比較多,我將其分為工程目標選項配置(Ⅰ)和工程目標

ARM 7 使用者模式下禁止/使能中斷的一種方法--使用軟中斷 for Keil MDK

最近寫一個程式,需要在使用者模式下關中斷,但ARM 7的體系結構決定了中斷必須在特權模式下才可以更改,所以想到使用ARM的軟中斷來實現關中斷和開中斷. 使用軟中斷,首先要有硬體指令的支援.ARM有條指

Keil RL-ARM學習筆記

RL-ARM是Keil MDK自帶的Real-Time Library,其中包括RTX 核心(Real-Time eXecutive,實時作業系統)、RL-FlashFS(檔案系統)、RL-TCPnet(TCP/IP協議棧)、RL-CAN(CAN匯流排函式庫)和RL-USB

2440超詳細uboot移植筆記(七)------去掉 "-pie"選項

你好!這裡是風箏的部落格,歡迎和我一起交流。 如果本篇部落格對您有幫助,或許可以在下方評論給我留個言。 此時uboot裡是存在“pie”選項的,比較麻煩,現在我們把它去掉: a.輸入命令:

KeilMDK-ARM)系列教程(八)_線上除錯(Ⅰ)

Ⅰ、寫在前面Keil線上除錯的內容有很多,本文帶來線上除錯常用的內容:Debug Toolbar除錯工具欄(復位、全速執行、停止執行、單步除錯、逐行除錯、跳出除錯、執行到游標行、跳轉到暫停行、除錯視窗)快捷按鈕的詳細內容。Keil工具欄總共有三種:檔案工具欄(File Too

keil-C51和MDK-ARM共存(圖文)

  隨著微控制器學習的深入,電腦上同時安裝keil-C51和MDK-ARM顯得冗雜,這是關於keil-C51和MDK-ARM的共存安裝的小技巧,希望對大家有所幫助。主要思想就是覆蓋安裝,分類啟用。參考自https://blog.csdn.net/ouening/article

Keil-MDK編譯完成後代碼大小

aid 程序 log 編譯 空間 href 簡單的 font ini Code 代表執行的代碼,程序中所有的函數都位於此處。 RO-data 代表只讀數據,程序中所定義的全局常量數據和字符串都位於此處。 RW-data 代表已初始化的讀寫數據,程序中定義並且初始化的全局

keil mdk除錯過程中檢視區域性變數的方法

      上次除錯STM32做了一次總結,此次在除錯nordic 51822時發現區域性變數地址給不出任何資訊, 導致無法檢視區域性變數值。通過和STM32的設定進行必較發現C/C++的編譯器等級設定過高,而將 一些區域性變數優化掉而沒有分配記憶體地址。

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程式碼充當引導

Keil MDK在個別電腦上下載程式失敗的解決辦法

文章原始地址: http://feotech.com/?p=90 Keil MDK在個別電腦上無法下載程式 Keil MDK下載程式時顯示 No Cortex-M SW Device Found (本例中使用SWD介面) 選擇Options for Target “Project”

keilarm裸機開發遇到的一些問題

為什麼會對沒有指定的空間進行讀寫? 原因是啟動檔案中棧設定的太小了,尤其是開大陣列的時候要注意。這個錯誤具體表現一種情況為,程式試圖對指定ram範圍之外的地址進行讀寫,SP暫存器的值也在RAM範圍之外,那麼顯然是棧分配太小了。 啟動程式碼裡可以看到6種堆疊,一般修改USR_Stack

Keil/MDK 小知識點:Program size: Code, RO-data , RW-data, ZI-data 解釋(什麼意思)

轉載自:http://blog.csdn.net/yuleicqut/article/details/50933441 MCU 的儲存分配問題 如,我用Keil/MDK 編譯完工程,得到: Program Size: Code=25648 RO-data=400 RW-data=

移植ethtool到arm平臺

轉載地址:https://blog.csdn.net/crazycoder8848/article/details/44278791 轉載地址:https://blog.csdn.net/vc66vcc/article/details/52398864 首先下載ethtool的原始碼包。

二..linux開發之uboot移植(二)——網路命令ping開發搭建使用&tftp伺服器的安裝&nfs網路伺服器的安裝

2018/01/05 19:48 - 網路命令搭建開發板uboot和虛擬機器ubuntu互相ping通記錄 1. uboot可以通過網路來傳輸檔案到開發