導航:首頁 > 源碼編譯 > arm讀取bin文件需要編譯嘛

arm讀取bin文件需要編譯嘛

發布時間:2023-09-25 00:33:09

『壹』 如何編譯armlinux的go

Golang也就是Go語言,現在已經發行到1.4.1版本了,語言特性優越性和背後Google強大靠山什麼的就不多說了。Golang的官方提供了多個平台上的二進制安裝包,遺憾的是並非沒有發布ARM平台的二進制安裝包。ARM平台沒辦法直接從官網下載二進制安裝包來安裝,好在Golang是支持多平台並且開源的語言,因此可以通過直接在ARM平台上編譯源代碼來安裝。整個過程主要包括編譯工具配置、獲取Golang源代碼、設置Golang編譯環境變數、編譯、配置Golang行環境變數等步驟。

註:本文選用樹莓派做測試,因為樹莓派是基於ARM平台的。

1、編譯工具配置

據說下個版本的golang編譯工具要使用golang自己來寫,但目前還是使用C編譯工具的。因此,首先要配置好C編譯工具:

1.1在Ubuntu或Debian平台上可以使用sudoapt-getinstallgcclibc6-dev命令安裝,樹莓派的RaspBian系統是基於Debian修改的,所以可以使用這種方法安裝。

1.2在RedHat或CentOS6平台上可以使用sudoyuminstallgcclibc-devel命令安裝。

安裝完成後可以輸入gcc--version命令驗證是否成功安裝。

2、獲取golang源代碼

2.1直接從官網下載源代碼壓縮包。

golang官網提供golang的源代碼壓縮包,可以直接下載,最新的1.4.1版本源代碼鏈接:/golang/go1.4.1.src.tar.gz

2.2使用git工具獲取。

golang使用git版本管理工具,也可以使用git獲取golang源代碼。推薦使用這個方法,因為以後可以隨時獲取最新的golang源代碼。

2.2.1首先確認ARM平台上已經安裝了git工具,可以使用git--version命令確認。一般linux平台都安裝了git,沒有的話可以自行安裝,不同平台的安裝方法可以參考:download/linux

2.2.2克隆遠程golang的git倉庫到本地

在終端cd到你想要安裝golang的目錄,確保該目錄下沒有名為go的目錄。然後以下命令獲取代碼倉庫:

gitclone/go

大陸地區可能會獲取失敗,在不翻牆的情況下我試了幾次都沒成功,原因大家都懂的。好在google已經將golang也託管到github上面,所以也可以通過下面命令獲取:

gitclone/golang/go.git

視網路情況,下載可能需要不少時間。我2M的帶寬花了將近兩個小時才下載完,雖然整個項目不過幾十兆==

下載完成後,可以看到目錄下多了一個go目錄,裡面即為golang的源代碼,在終端上執行cdgo命令進入該目錄。

執行下面命令檢出go1.4.1版本的源代碼,因為現在汪敏指已經有新的代碼提交上去了,最新的代碼可能不是最穩定的:

gitcheckoutgo1.4.1

至此,最新1.4.1發行版的源代碼獲取完畢

3、設置golang的編譯環境變數

主要有GOROOT、GOOS、GOARCH、GOARM四個環境變數需要設置,先解釋四個環境變數的意義。

3.1GOROOT

主要代表golang樹結構目錄的路徑,也就是上面git檢出的go目錄。一般可以不用設置這個環境變數,因為編譯的時候默認會以go目錄下src子目錄中的all.bash腳本困配運行時的父目錄作為GOROOT的值。為了保險起見,可以直接設拿芹置為go目錄的路徑。

3.2GOOS和GOARCH

分別代表編譯的目標系統和平台,可選值如下:

GOOSGOARCH

darwin386

darwinamd64

dragonfly386

dragonflyamd64

freebsd386

freebsdamd64

freebsdarm

linux386

linuxamd64

linuxarm

netbsd386

netbsdamd64

netbsdarm

openbsd386

openbsdamd64

plan9386

plan9amd64

solarisamd64

windows386

windowsamd64

需要注意的是這兩個值代表的是目標系統和平台,而不是編譯源代碼的系統和平台。樹莓派的RaspBian是linux系統,所以這些GOOS設置為linux,GOARCH設置為arm。

3.3GOARM

表示使用的浮點運算協處理器版本號,只對arm平台有用,可選值有5,6,7。如果是在目標平台上編譯源代碼,這個值可以不設置,它會自動判斷需要使用哪一個版本。

總結下來,在樹莓派上設置golang的編譯環境變數,可編輯$HOME/.bashrc文件,在末尾添加下面內容:

exportGOROOT=你的go目錄路徑

exportGOOS=linux

exportGOARCH=arm

編輯完後保存,執行source~/.bashrc命令讓修改生效。

4、編譯源代碼

環境變數配置完成自後就可以開始編譯源代碼。在go目錄下的src子目錄中,主要有all.bash和make.bash兩個腳本(另外還有兩個all.bat和make.bat腳本適用於window平台)。編譯實際上就是執行其中一個腳本,兩者的區別在於all.bash在編譯完成後還會執行一些測試套件。如果希望只編譯不測試,可以運行make.bash腳本。使用cd命令進入go下src目錄,執行./all.bash或者./make.bash命令即可開始編譯。由於硬體情況不同,編譯耗費的時間不同。在我的B型樹莓派編譯過程花費了將近半個小時,編譯完成後執行的測試套件又花費了差不多一個小時,總共花費了一個半小時左右。

5、配置golang運行環境變數

編譯完成後,go目錄下會生成bin目錄,裡面就是go的運行腳本。為了以後使用方法,可以將這個bin路徑添加到PATH環境變數中。同樣編輯~/.bashrc文件,因為前面設置過GOROOT環境變數指向go目錄了,所以只需要在末尾加上

exportPATH=$PATH:$GOROOT/bin

保存後同樣執行source~/.bashrc命令讓環境變數生效。

至此,golang源代碼編譯安裝成功。執行goversion應該就能看到當前golang的版本信息,表示編譯安裝成功。


『貳』 三、內核&文件系統編譯

一、編譯官方提供的內核源碼

1、解壓官方提供的內核源碼包

2、根據官方提供的配置文件對內核進行配置,方式如下
make  ARCH=arm      xxxxx_defult_config
cp   arch/arm/xxxxx_config    .config

3、打開圖形界面對內核進行配置,根據需要增加或者刪除模塊和其他內容

4、對內核進行編譯
make  ARCH=arm    CROSS_COMPILE=arm-hisiv300-linux-uclibcgnueabi-    uImage  -j6
或者編輯Makefile文件,對其中的ARCH變數和CROSS_COMPILE變數進行修改,然後執行make uImage

5、在編譯編譯的時候回出現mkimage命令缺失,這個命令是UBootr提供的,在編譯的UBoot路徑下面找到這個命令,即可直接使用

6、編譯的時候各個方面需要一致性,
                1、編譯的內核的交叉編譯工具鏈如果支持硬體浮點數運算那麼在配置內核的時候也需要添加硬體浮點數的支持
                        Kernel Features --->
                            [*] Use the ARM EABI to compile the kernel
                2、在編譯的內核的時候注意保持不要做太多的修改,否則會出問題

7、編譯內核模塊
    make  ARCH=arm    CROSS_COMPILE=arm-hisiv300-linux-uclibcgnueabi-    moles  -j6

8、安裝內核模塊到指定的目錄中去
make moles_install ARCH=arm CROSS_COMPILE=arm-hisiv300-linux-uclibcgnueabi- INSTALL_MOD_PATH=/home/fu/hisi/kernel/build

9、不要採用內核模塊安裝的命令來安裝內核,因為內核不需要安裝,在arch/arm/boot/uImage就是所需要的內核文件

二、編譯官方提供的busybox來構建根文件系統

1、解壓需要編譯的busybox源碼

2、進入源碼中對busybox進行配置,主要是配置交叉編譯工具鏈
Busybox Settings --->Build Options ---> 下面有關於busybox是否配置為採用共享庫的模式,還有添加交叉編譯工具鏈的前綴

3、配置需要的文件和命令進行添加或者刪除

4、然後執行命令make -jn   && make install

5、創建根文件系統需要的其他的文件和目錄,在一個空白的目錄中首先拷貝busybox/_install下面的bin、sbin、usr目錄到空白目錄中,在空白目錄中創建其餘的所需要的目錄文件 bin dev etc home lib linuxrc mnt opt proc sbin sys tmp usr var等以上目錄

6、接下來在lib目錄中復制內核模塊,在編譯內核的時候模塊安裝在了指定的地方,直接拷貝過來就行。

6、創建文件系統所需要的其他文件,配置文件(最簡單的辦法就是直接復制busybox文件下面的example文件夾裡面的東西)
1、/etc/inittab     填寫或者    一下是最基本的,還有其他的需要填寫
# /etc/inittab
::sysinit:/etc/init.d/rcS                    //指定初始化腳本
::askfirst:-/bin/sh                            //指定第一次輸入回車後打開的shell
::ctrlaltdel:/sbin/reboot                //指定這三個按鍵按下後的反應
::shutdown:/bin/umount -a -r        //指定關機是進行的操作

2、/etc/init.d/rcS                //這個就沒有詳細額硬性規定了,寫入需要初始化的東西即可
#!/bin/sh
mount -a

3、/etc/fstab                        //寫入mount -a是要自動掛載的文件系統
# device mount-point type options mp fsck order
proc          /proc        proc  defaults        0    0
tmpfs          /tmp        tmpfs  defaults        0    0

7、拷貝需要用到的庫文件,在交叉編譯工具鏈下面存放
arm-linux-xxxxxx-gcc/lib
海思的開發板是在和tahet/lib下面,切記。

『叄』 kiel tutinstm32文件能編譯嗎

可以。
STM32是ARM7核,而KEIL是ARM旗下的,KEIL只是一個開發環境,支持什_還需要下載相應的編譯器,你原來如果是學51的,肯定有C51編譯器,但是你需要去官網下載KEIL MDK就是所說的RVMDK,就是ARM的編譯器,包含STM32,然後安裝,然後看著教程打開KEIL選擇相應的晶元來建立工程就行了,不過需要破解。
一般在STM32工程使用Keil編譯之後,keil的build output窗口中會出現如圖所示的輸出信息,其中會顯示code_笮。_O-data、RW-data、ZI-data大小。ARM程序的組成(ARM系統中正在執行的程序,而非保存在ROM中的BIN映像文件,請注意區別):一個ARM程序包含3個部分:RO,RW和ZI,RO是程序中的指令和常量;RW是程序中已經初始化的變數;ZI是程序中未經初始化的變數;以上3點可以理解為:RO就是readonly,RW就是read/write,ZI就是zeroARM映像文件的組成:所謂的ARM映像文件就是燒錄到ROM中的BIN文件,也稱為Image文件,以下用Image文件來替代。Image文件包含了RO和RW數據,之所以Image文件不包含ZI數據,那是因為ZI數據都是0,沒必要包含,運行之前將ZI數據數據所在的區域清零即可,包含進去反而浪費存儲空間補充一個問題:Q:為什麼Image必須O,RW?A:因為RO中的指令和常量以及RW中初始化過的變數是不能像ZI那樣無中生有的。

『肆』 為什麼對arm進行裸機開發的時候不需要交叉編譯環境,而進行linux移植的時候就需要呢

交叉編譯只是用arm-linux-gcc,為什麼要用這個編譯器,因為Linux系統是用這個編譯的,你想運行在linux平台運用程序,必須和系統是同一個版本的編譯器。不是同一個版本都不能運行。
邏輯開發你也可以用gcc編譯器啊,同樣可以編譯出bin文件,同樣可以運行。
我們平時用的都是IDE,說白了就是在gcc的基礎上加了簡單容易操作的窗口,像添加斷電、查看運行狀態,這些在gcc下也是可以實現的,調試工具叫gdb。

『伍』 關於ARM的Linux系統的編程搭建

希望能幫到你,

1)讓linux 在arm上運行,安卓底層也是linux.
2)gcc, arm-gcc等交叉編譯工具,linux 源碼,arm燒錄工具。

3)一般用linux環境,win7可以編應用,驅動我沒編過。
4)好象只能編應用,需要安裝相應的插件
5)是arm , linux 是運行在電腦上的,要用交叉編譯工具編譯才能在arm上用
6)參考arm給的手冊和工具,
7)可以。

閱讀全文

與arm讀取bin文件需要編譯嘛相關的資料

熱點內容
linux查看文件許可權命令 瀏覽:685
安卓手游存檔怎麼用 瀏覽:761
linuxyum安裝ftp 瀏覽:690
村委會主任可以推行政命令嗎 瀏覽:102
電腦文件夾封面多張圖片 瀏覽:263
網吧總伺服器叫什麼 瀏覽:922
多個演算法解決同一個問題 瀏覽:455
小車解壓後我的購車發票呢 瀏覽:977
做app開發用什麼雲伺服器 瀏覽:177
linux網卡子介面 瀏覽:985
21歲職高畢業學程序員怎麼學 瀏覽:321
vs如何對單個文件編譯 瀏覽:6
為什麼有的電腦不能安裝python 瀏覽:75
金蝶迷你版加密狗檢測到過期 瀏覽:186
硬體描述語言編譯結果 瀏覽:655
程序員逆天改命 瀏覽:19
金斗雲伺服器 瀏覽:447
港口工程pdf 瀏覽:770
程序設計語言pdf 瀏覽:434
蔬菜價格上漲演算法 瀏覽:221