當前位置:首頁 » 編程軟體 » arm開發板中如何編譯

arm開發板中如何編譯

發布時間: 2022-05-29 03:08:28

A. 現在有一個ARM開發板,如何編寫程序,是不是所有程序都差不多,需要改變的部分才自己寫

不是說所有的程序都 差不多,但確實是需要的部分才自己改的。

一般來說,常式裡面的程序,如果有符合你要求的,確實是不用改的。多數來說硬體設置初始化部分是不用你改的。

在應用部分,每個項目的應用不是太相同,所以大多是需要自己改的。

數據接收,處理,這個應該說具體數據具體分析了吧,在網路這里問,是得不到具體的答案的,你的問題,去到哪問也是問不到具體答案的。只能是自己找答案了。

到電驢,輸入 、ARM,找一下,也許會找到你需要的,那裡會有很多的教程。

B. arm開發板如何運行自己寫的程序

用戶程序insmod 核心模塊載入:具體如下:

核心模塊編譯完成後,基本上是個未經符號定位的目標文件(object)(當然,如果這個object又是一些子object經過ld -r生成的話,則子object之間的符號定位是已經完成的),object是一種可重定位的代碼,它可以載入到不同位置的內存執行。而真正載入進核心,並成為核心的一部分,則是用戶程序insmod和核心幾個系統調用共同完成的。在此過程中,insmod主要完成或通過系統調用完成以下的工作:
1)由參數找到模塊文件,如insmod foo.o,模塊文件就是foo.o,根據模塊文件計算出模塊文件所需的內存大小
2)調用系統調用create_mole,為該模塊分配核心空間內存
3)調用系統調用query_mole,得到核心提供的符號表,與系統調用create_mole的返回值(核心模塊首地址)加在一起對模塊進行重定位。
4)在用戶空間為核心模塊分配內存,並往該段內存復制一個經過定位的object映象。
5)調用系統調用init_mole,將用戶內存中的模塊映象到相應的核心空間(首地址為create_mole的返回值)。
6)釋放用戶內存,中止insmod運行。
如果一切順利,沒有出現未定位的符號,則核心模塊object就融入系統,成為系統的一部分了。
核心模塊的載入過程對核心來說實際是個「靜態鏈接」的過程,這和用戶程序動態鏈接運行過程再鏈接需要的代碼還是不太一樣的,當然,object的可重定位特性保證了鏈接後的代碼正常運行,這點倒是比較相似的。
以上回答你滿意么?

C. linux如何編譯arm-2440的led跑馬燈程序不是編譯驅動程序

這是一個很簡單的問題。使用ads生成二進制文件的時候會直接可執行的二進制文件的頭去掉。如程序的執行地址,鏈接地址等等信息被去掉。但是在linux上你使用的arm-linux-gcc編譯過後產生的只是linux 系統的可執行二進制文件,它能夠被linux 內核所識別。但是他們不能直接作為裸板程序直接被開發板所執行。除了使用arm-linux-gcc 以外還要使用兩個命名arm-linux-ld 和 arm-linux-obj 才能生成能直接被裸板執行的代碼

原文地址:http://www.ebhou.com/post/armtest.html

今天在空間看到一個關於arm裸板代碼的問題。這個問題對於老鳥來說都是簡單得不能再簡單的問題了。可是當時確把我給難住了,以前學習的時候沒有少些過裸板代碼。自己的電腦上至今還保留著lcd,觸摸屏和 音效卡的裸板驅動。才1年多點時間盡然自己只知道分三不,編譯、鏈接、去掉elf頭。而具體的步驟盡然只知道gcc 另外兩部的命名盡然不知道參數是什麼。慚愧啊!

今天保留過程於此。

做備忘只用,如果能夠幫助到任何人那就不虛此寫啊。

看過編譯原理的人都知道我們一句簡單的arm-linux-gcc 到達做了哪些工作。他並不是簡單的把我們的原文件編譯成我們可執行的二進制文件,在這個過程中他其實至少做了兩部工作。「編譯」和鏈接「當然這其中包含了很多關於編譯原理的至少,由於本人才疏學淺說以也只能夠簡單的把他說成編譯和鏈接了。如果需要跟深入的理解請查找相關」編譯原理的書籍吧「

這里我們先介紹一下常用的gcc命令.

1.arm-linux-gcc -v 查看gcc 版本號

2.arm-linux-nm 查看一個.o文件所需要的庫。

3.arm-linux-ld 鏈接命令

3.arm-linux-gcc 編譯命令

4 arm-linux-objmp -h test 查看符號

-d 反匯編

5 arm-linux-as ls.S -o ls.o 將匯編原文件編譯成.o文件

6 arm-linux-obj -I elf32-littlearm -O binary test test.bin 去掉二進制文件elf頭。

現在我們來寫一個arm裸板的LED閃燈程序 非常簡單的。

源代碼 led_test.c

void main()
{
int i=0;
volatile long *GPKCON0 = 0x7F008800;
volatile long *GPKDAT = 0x7F008808;
volatile long *GPKPUD = 0x7F00880C;

*GPKCON0 &= ~(0XFFFF <<16);
*GPKCON0 |= (0X1111 <<16);
while(1){
*GPKDAT &= ~(0XF <<4);
i=0xfffff;
while(i--)
;
*GPKDAT |= (0XF <<4);
i=0xfffff;
while(i--)
;
}
}

每隔大概3秒鍾的時間LED閃爍一次。非常簡單的一個程序。這里沒有使用定時器啊 什麼的知識簡單的做循環來延時。注意 關於LED 的GPIO相關寄存器地址根據你自己的實際情況來。

編譯過程

1 編譯

arm-linux-gcc -c -march=armv4 test.c -o test.o

2.鏈接 http://www.ebhou.com/post/armtest.html

D. arm開發板如何運行自己寫的程序

安裝交叉編譯鏈arm-linux-gcc
在電腦上寫好程序
交叉編譯程序
生成的文件拷進開發板
終端chmod +x 文件名修改許可權
./文件 執行

E. 深度linux的arm-linux-gnueabihf-gcc編譯參數如何配

一般來說,交叉編譯工具是用於在一種架構的主機(例如x86)上,編譯另一種主機(例如arm)運行的程序,在這個編譯期間,需要用到的頭文件/庫,往往需要從一個叫目標文件系統(sysroot)的路徑開始查找。

sysroot里包含usr,lib,usr/lib usr/include等文件夾結構和必要的頭文件和庫,你理解為目標機器上的整個文件系統,搬到你這台電腦上,然後作為一個文件夾存在。

交叉編譯原則上不能用主機(host)的頭文件,

  • 這首先是因為編譯器在查找頭文件的相對路徑時,交叉編譯器會配置為查找目標平台架構的位置,和主機的gcc不一樣,這也是為什麼它去arm-linux-gnueabihf這個目錄去尋找的原因。

  • 其次主機和目標機的系統版本有差異,再加上處理器架構的差異,往往有很多兼容性問題,甚至有難以解決的編譯錯誤。

  • 如果一定要用本機的頭文件系統來湊合,那麼需要把所有的-I都列出來,即不僅需要-I/usr/include,還需要-I/usr/include/xxx,甚至要創建一些文件夾的符號鏈接指向你主機的這些頭文件文件夾。即使這些,往往也未必成功,有些頭文件不同的系統架構,會不完全一樣甚至缺失。

交叉編譯一般無法使用主機的庫(so)文件

  • 主機和目標機往往架構不同,庫完全不能使用

  • 可能遇到主機和目標機架構相同的情況,比如你在intel64上編譯一套運行在intel64位手機的程序,但是庫兼容性的問題仍然存在。

最後結論:你這個問題,如果你是為了另一套機器(比如arm開發板編譯),那麼需要搞一套目標機的文件系統才能順利編譯。

對了,目標文件系統需要編譯了python和dev頭文件/庫,好多嵌入式設備裁剪的很厲害,都不用python。

F. 如何設置arm開發板交叉編譯工具鏈

如何設置arm開發板交叉編譯工具鏈
1.13.6 Compile菜單
按Alt+C可進入Compile菜單, 該菜單有以下幾個內容,如圖所示:
1. Compile to OBJ:將一個C源文件編譯生成.OBJ目標文件, 同時顯示生成的文件名。其熱鍵為 Alt+F9。
2. Make EXE file:此命令生成一個.EXE的文件, 並顯示生成的.EXE文件名。其中.EXE文件名是下面幾項之一:
1) 由Project/Project name說明的項目文件名。
2) 若沒有項目文件名, 則由Primary C file說明的源文件。
3) 若以上兩項都沒有文件名, 則為當前窗口的文件名。
3. Link EXE file:把當前.OBJ文件及庫文件連接在一起生成.EXE文件。
4. Build all:重新編譯項目里的所有文件, 並進行裝配生成.EXE文件。該命令不作過時檢查 (上面的幾條命令要作過時檢查, 即如果目前項目里源文件的日期和時間與目標文件相同或更早, 則拒絕對源文件進行編譯)。
5. Primary C file:當在該項中指定了主文件後, 在以後的編譯中, 如沒有項目文件名則編譯此項中規定的主C文件, 如果編譯中有錯誤, 則將此文件調入編輯窗口, 不管目前窗口 中是不是主C文件。
6. Get info:獲得有關當前路徑、源文件名、源文件位元組大小、編譯中的錯誤數目、可用空間等信息,如圖:
1.13.7 Project菜單

G. linux 在arm開發板 可否編譯文件

可以使用gcc命令進行編譯: 例子: gcc -o hello hello.c #在這里hello.c是源文件,hell為目標輸出文件 通過編譯器編譯主要是經過:預處理,匯編,編譯和鏈接的過程;

H. arm-linux 交叉編譯環境的建立,希望有清楚的人解答,復制的閃人

是這樣子的,計算機linux中原有的gcc是針對通用的X86等處理器而言的,編譯出來的可執行文件是只能在通用計算機上運行的,arm也是一種處理器,只不過其指令等和X86等CPU不同,所以需要有針對arm的編譯器來編譯源程序,才能在arm中運行。
我在arm9下做過linux,qt編程,需要先在PC上安裝linux,然後安裝arm-linux-gcc,同時為了可以使用arm-linux-gcc來編譯程序,需要指定環境變數,這個可以在.profile等文件中進行更改,具體辦法你查一下就知道了。或者使用export命令在終端中設置環境變數。兩種方法的結果有區別哦!
你想用2440的開發板的話就是arm9了,我還沒找到arm9的模擬工具,但是網上已經有arm7的模擬工具。
對於arm-linux-gcc,只要你安裝好並設置好了路徑(環境變數)後,在一個終端中輸入#arm-linux-gcc -v
那麼你一般可以看到你安裝的arm-linux-gcc 版本信息,到此你就可以使用它編譯你的源程序,然後將生成的可執行文件下載到arm開發板中就可以運行了。
還有什麼問題再說吧,我也是一個人摸索出來的,估計摸索了一個月才成功的在arm上運行了第一個自己的qt圖形界面程序,祝你好運!
我的建議:
一、熟悉linux 的各種操作命令(如export)
二、學會怎麼下載可執行文件到arm中
三、學會用pc控制arm上的linux

我只用過arm-linux-gcc,在你的安裝文件夾下可以找到

I. arm開發板上裝的linux 可不可以直接把arm板連接到計算機,然後直接在ARM上用GCC編譯能在arm上運行的程序

應該可以,你需要先編譯一個可以在arm上運行的arm-linux-gcc開發工具鏈,然後放在arm板上跑。不過,這個過程一定很麻煩。編譯開發工具鏈是一項極其艱難的工程。。。。

J. 如何建立Linux下的ARM交叉編譯環境

首先安裝交叉編譯器,網路「arm-linux-gcc」就可以一個編譯器壓縮包。
把壓縮包放到linux系統中,解壓,這樣就算安裝好了交叉編譯器。
設置編譯器環境變數,具體方式網路。如打開 /etc/bash.bashrc,添加剛才安裝的編譯器路徑 export PATH=/home/。。。/4.4.3/bin:$PATH。這樣是為了方便使用,用arm-linux-gcc即可,不然既要帶全路徑/home//bin/arm-linux-gcc,這樣不方便使用。
編譯c文件。和gcc編譯相似,把gcc用arm-linu-gcc代替就是了。編譯出來的就可以放到arm上運行了。</ol>

熱點內容
液鹼存儲 發布:2024-05-03 13:21:13 瀏覽:156
linux如何改配置文件 發布:2024-05-03 13:00:54 瀏覽:31
哪個安卓模擬器老爺機帶得動 發布:2024-05-03 13:00:49 瀏覽:576
編程與實戰 發布:2024-05-03 12:54:30 瀏覽:38
電腦開機有密碼rpc伺服器不可用 發布:2024-05-03 12:40:54 瀏覽:471
硬體的演算法 發布:2024-05-03 12:34:28 瀏覽:388
支付密碼為什麼就六位 發布:2024-05-03 12:29:17 瀏覽:920
腳本找書 發布:2024-05-03 12:02:17 瀏覽:493
境外伺服器租用怎麼辦 發布:2024-05-03 11:45:34 瀏覽:943
我的世界伺服器怎麼設置到重生點 發布:2024-05-03 11:33:04 瀏覽:752