編譯armlinux
1. 交叉編譯器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的區別
兩個交叉編譯器分別適用於 armel 和 armhf 兩個不同的架構,armel 和 armhf 這兩種架構在對待浮點運算採取了不同的策略(有 fpu 的 arm 才能支持這兩種浮點運算策略)。
其實這兩個交叉編譯器只不過是 gcc 的選項 -mfloat-abi 的默認值不同。gcc 的選項 -mfloat-abi 有三種值 soft、softfp、hard(其中後兩者都要求 arm 里有 fpu 浮點運算單元,soft 與後兩者是兼容的,但 softfp 和 hard 兩種模式互不兼容):
soft: 不用fpu進行浮點計算,即使有fpu浮點運算單元也不用,而是使用軟體模式。
softfp: armel架構(對應的編譯器為 arm-linux-gnueabi-gcc )採用的默認值,用fpu計算,但是傳參數用普通寄存器傳,這樣中斷的時候,只需要保存普通寄存器,中斷負荷小,但是參數需要轉換成浮點的再計算。
hard: armhf架構(對應的編譯器 arm-linux-gnueabihf-gcc )採用的默認值,用fpu計算,傳參數也用fpu中的浮點寄存器傳,省去了轉換,性能最好,但是中斷負荷高。
2. 深度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。
3. 在ARM上安裝Linux操作系統arm安裝linux
在 ARM 上安裝 Linux 操作系統是一台被設計在嵌入式設備上的ARM處理器系統上安裝 Linux 操作系統的過程。ARM處理器可以在大多數設備,如Android 智能手機、車載系統、網路攝像頭和低功耗的物聯網設備上找到使用。Linux 操作系統也可以被移植到 ARM之上,這就使得開發者在一組軟體實現框架的約束之內決定應用程序的功能。
安裝 Linux 操作系統的過程包括對你的設備進行相關設置,使用特定固件准備內核文件,掛載文件系統,創建用戶帳號,添加用戶模塊,安裝開發工具,在最後運宴嘩創建可執行文件,使系統正常運行。
首先,讓我們介紹安裝 Linux 操作系統的准備工作,比如從ARM處理器開發板中提取應用軟體開發所需的固件,以及使用祥蔽特定固件准備文件,並編譯為系統需要的內核文件:
# Download the kernel files
wget http://arm-linux.example.com/linux-3.6.tar.gz
# Unpack the kernel source
tar -xvf linux-3.6.tar.gz
# Compile the kernel
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=zImage
接下來,要掛載文件系統,創建旁行用戶帳號,添加用戶模塊,安裝開發工具,並最終創建可執行文件:
# Mount the filesystem
mount -t ext4 /dev/sda1 /media
# Create user accounts
useradd -m username
passwd username
# Add root user mole
usermod -a -G root username
# Install user development tools
apt-get update
apt-get install build-essential
# Create executable file
gcc -o hello hello.c
# Execute executable file
./hello
至此,Linux操作系統已經安裝完畢。盡管安裝 Linux操作系統的過程略有復雜,但它可以幫助您實現自己想要的功能。最後,請記住,在安裝 Linux 操作系統之前,請將裝備最新的固件文件,這樣可以確保系統的穩定運行。