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了很多,網上五花八門的答案都有。最後還是仔細看了手冊才找到答案,原來是要把板子上的...