Mini2440學習筆記(一) Start

2021-05-26 06:09:03 字數 1523 閱讀 2299

win7 + openocd + openjtag + mini2440

按照《eclipse,openocd,openjtagv3嵌入式開發教程》將軟硬體安裝好。然後執行openocd-ftd2xx。這個程式會作為乙個守護程序執行,等待客戶端(telnet或gdb)的連線,可以使用-h引數檢視該程式的一些可選引數。例如,使用-f引數來指定配置檔案openocd.cfg的位置,如果沒有指定,它會在當前執行路徑下尋找。

關於openocd.cfg檔案:

這是乙個openocd的配置檔案,詳細內容可以檢視openocd文件,這裡做乙個簡要說明:

該例程有兩個源**檔案,crt0.s是乙個彙編檔案:

在gnu的彙編語法中,以乙個點開頭的都是彙編命令;

.text:

該命令以下的內容都位於可執行檔案的**段,類似的命令還有:.data(已初始化的資料段),.bss(未初始化的資料段);

.global _start:

指定_start全域性可見;_start是gnu聯結器用來指定第乙個執行指令所必須的;

ldr r0,=0x53000000:

當改命令的第二個引數前有「=」時,這是乙個位址讀取偽指令,它將看門狗暫存器的位址寫入了r0;

ldr sp,=1024*4:

sp是堆疊暫存器,arm的暫存器是fd(full descending)型別,棧指標執行棧頂元素,堆疊向位址減小的方向增長。

執行make編譯程式,makefile的主要內容如下:

首先將兩個源**檔案編譯為目標檔案,-c引數表示只進行預處理、編譯、彙編,不進行連線;

然後用聯結器(arm-elf-ld)將目標檔案連線為可執行的elf格式檔案,連線方式依賴與leds.lds檔案,

arm-elf-objcopy的作用是將elf格式檔案轉換為二進位制檔案。

arm-elf-objdump的作用是對elf檔案進行反彙編,得到的dis檔案時乙個文字格式的反彙編檔案,其中一段內容如下:

每條彙編碼的格式為:

首先啟動arm-elf-gdb,在命令列下執行:

arm-elf-gdb

執行後可以看到gbd提示符(gdb)。

登入openocd:

(gdb)target remote localhost:3333

檢視當前狀態:

(gdb)

monitor poll

暫停:(gdb)monitor halt

關閉mmu和catch:

(gdb)monitor arm920t cp15 2 0

(gdb)monitor step

使能軟體中斷:

(gdb)monitor arm7_9 sw_bkpts enable

(gdb)file leds/leds_elf

載入記憶體:

(gdb)load

從0x0開始執行:

(gdb)monitor resume 0x0

參考:gnu_arm彙編入門

linux下的lds連線指令碼基礎

Mini2440學習筆記(三) SDRAM

2440的儲存控制器有個8個bank bank0 bank7,對外引出27根位址線 addr0 addr26 訪問範圍是128m,有8個片選訊號 ngcs0 ngcs7 與之對應,所有可以訪問1g的位址空間。bank6和bank7的可訪問位址空間是可以設定的。只有bank6和bank7可以外接sdr...

Mini2440學習筆記(三) SDRAM(續)

從 nand flash 啟動cpu 時,cpu 會自動將 nand flash 開始的4k 資料複製到 4kb的內部 ram中 起始位址 0 然後位址 0開始執行。本例程先用彙編設定好 sdram 將程式從內部 ram複製到 sdram 然後跳轉到 sdram 執行。源 包括 sdram.s gp...

mini2440 解除安裝模組

我的mini2440買回來這麼久了,一直有個問題很奇怪,就是執行insmod ko一切正行,lsmod也可以看到你插入的模組,但是用rmmod就會出現no such file,一直對這個問題就感覺很奇怪,也google了很多,網上五花八門的答案都有。最後還是仔細看了手冊才找到答案,原來是要把板子上的...