ARM之嵌入式Linux基本應用程式編寫實驗

2021-08-20 07:01:01 字數 3101 閱讀 2670

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程式呼叫 ...