arm之嵌入式linux基本應用程式編寫實驗
實驗目的
:
1. 熟悉jxarm9-2440教學系統中的linux開發環境;
2. 掌握簡單的linux應用程式helloworld的編譯;
3. 掌握jxarm9-2440教學系統中linux應用程式的除錯。
實驗內容
:
1. 編寫helloworld應用程式;
2. 編寫makefile檔案;
3. 編譯helloworld應用程式;
實驗要求
:
1 makefile檔案內容、並簡要說明的作用;
實驗步驟:
1. linux移植:將zimage檔案重新命名為zimage-30,將ramdisk.gz檔案重新命名為ramdisk-qt.gz,然後將linux移植到目標機。
2. 燒錄:通過超級終端先後執行run burnlinuxzimage命令以及run burnlinuxramdisk命令將linux燒錄到目標機。
3. 進入工作目錄:(注:」$」符號表示在主機的linux控制台輸入的命令列,」#」符號表示在目標機的linux控制台上輸入的命令列)
$cd /home/cvtech/jx2440/examples/helloworld
4. 編輯程式源**helloworld.c:
#include
int main()
5. 在主機端編譯執行helloworld程式:
$gcc -o helloworld helloworld.c
$./helloworld
6. 編譯在目標機執行的helloworld程式:
$arm-linux-gcc -o helloworld helloworld.c
如果在x86平台執行helloworld,出現錯誤
$./helloworld
bash: ./helloworld: cannot execute binary file
7. 將helloworld程式拷貝到主機的tftpboot目錄下
$cp helloworld /tftpboot/
在超級終端輸入如下命令將主機端/tftpboot/目錄掛載到/mnt/nfs/目錄下
#mount 192.168.1.180:/tftpboot/ /mnt/nfs -o nolock
執行#cd /mnt/nfs/
#./helloworld
8. 在helloworld目錄下編寫makefile檔案:
# $@ 擴充套件成當前規則的目的檔名
#$< 擴充套件成依靠列表中的第乙個依靠檔案
# $^ 擴充套件成整個依靠的列表
cc = arm-linux-gcc
#編譯器
ld = arm-linux-ld
#鏈結器
exec = helloworld
objs = helloworld.o
cflags +=
#編譯引數
ldflags +=
#鏈結引數
$(exec): $(objs)
$(cc) $(ldflags) -o $@ $(objs) $(ldlibs$(ldlibs_$@))
cp $(exec) /tftpboot/
%.o:%.c
$(cc) -c -o $@ $<
clean:
-rm -f $(exec) *.elf *.gdb *.o
使用make進行編譯
arm平台
$make clean
$make
arm-linux-gcc -c -o helloworld.o helloworld.c
arm-linux-gcc -o helloworld helloworld.o
x86平台
$make clean
$make
gcc -c -o helloworld.o helloworld.c
gcc -o helloworld helloworld.o
9. 通過makefile檔案編譯helloworld程式,並在目標機執行:
$cd /home/cvtech/jx2440/examples/helloworld
$make
重複步驟7
實驗結果:
在超級終端上看到hello world!字串被列印出來
實驗總結:
wq:本次實驗為:嵌入式linux基本應用程式的編寫。1.0版本:自己寫了乙個普通的c程式,編譯後再將其在目標機上執行。然後公升級到2.0:用makefile檔案,通過make命令實現目標程式自動編譯鏈結生成可執行檔案再執行在目標機上。而且這一次我們組還實現了linux的燒錄,用到了burn命令,使其永久儲存到了目標機。以前都是移植到記憶體中執行的。
zhy:這次實驗我們比其他組多做了乙個燒錄過程,將linux燒錄到目標機,它的命令的**是乙個回憶史,嘗試幾次後,成功燒錄,可在目標機開機後,按「7」即可執行linux。這次實驗的主要目的是應用程式在交叉編譯的環境中執行。有兩種方法,①直接用命令編譯鏈結然後再在目標機中執行;②通過makefile檔案進行編譯鏈結和執行。
cxy:以前使用過makefile在linux上編譯執行過c程式。但是沒有使用過makefile進行交叉編譯,在主機上編譯c程式,再複製到目標機上執行。我們不僅把編譯好的程式複製到目標機上的記憶體上執行。還使用了燒錄的辦法,使編譯好的程式可以永久儲存在目標機上。
lg:
yy:在這次實驗過程中,我們先是完成了上一次實驗未完成的步驟,即將linux燒錄到目標機,然後分別嘗試了在x86平台的linux系統編譯執行c程式,和在arm平台的目標機的linux系統執行c程式,體驗了交叉編譯,並且使用了makefile檔案來幫助編譯執行c程式。
嵌入式Linux之ARM彙編基礎
對於 cortex a 晶元來講,大部分晶元在上電以後c 語言環境還沒準備好,所以第一行程式肯定是彙編的,至於要寫多少匯程式設計序,那就看你能在哪一步把 c 語言環境準備好。所謂的 c語言環境就是保證 c 語言能夠正常執行。c 語言中的函式呼叫涉及到出棧入棧,出棧入棧就要對堆疊進行操作,所謂的堆疊其...
嵌入式,ARM掃盲
炮製了一篇,基本是拿來主義,不算技術,只能算雜談。注 此處正常模式和普通模式是我生造的術語,沒有確定是否存在,各位請暫且忽略。arm異常處理過程 arm的異常,包括復位 未定義指令 軟體中斷 資料訪問中止 外部中斷請求 快 速中斷請求。處理過程 1 儲存現場,包括處理器當前狀態 中斷遮蔽位 cpsr...
ARM嵌入式實驗
問題 在startup.s中增加函式,由c程式呼叫,以此取得彙編中相關引數的設定值。獲取pll中m,p值,c程式呼叫彙編函式 在c語言中,要extern 乙個函式宣告即可,然後這個函式在彙編裡面實現。在彙編裡面,用export 把c語言定義的函式名引進來,再開始編寫函式名開始的段 實現 c程式呼叫 ...