當前位置:首頁 » 編程軟體 » 樹莓派編譯法

樹莓派編譯法

發布時間: 2024-09-16 14:11:07

『壹』 如何編譯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的版本信息,表示編譯安裝成功。


『貳』 嵌入式開發板上C編譯器比較

在嵌入式系統開發中,C編譯器的選擇對項目成功至關重要。本文將針對樹莓派等開發板上常見的GCC和Clang編譯器進行深入比較,包括安裝方法、性能對比以及適用場景,以幫助開發者做出明智決策。

首先,GCC,GNU Compiler Collection,作為開源的跨平台編譯器,廣泛應用於Linux設備,如樹莓派。其安裝在Debian基礎的Linux系統上相當簡便,只需在終端輸入命令進行安裝。GCC的優點包括廣泛的語言支持和高度優化,但缺點可能包括編譯速度和錯誤信息的清晰度。

相比之下,Clang,LLVM的前端,作為GCC的後起之秀,目標是改進編譯器性能。在樹莓派上安裝Clang同樣容易,它在編譯速度和用戶反饋(錯誤報告)上有優勢。然而,Clang可能在某些復雜優化上不如GCC。

在性能對比上,兩者各有千秋,具體選擇取決於項目需求。例如,對性能要求極高的項目可能更傾向於GCC,而對快速開發和易於理解錯誤信息的項目可能更傾向於Clang。因此,建議在項目初期嘗試使用兩者,以便找到最適合的工具。

『叄』 如何在windows下或者linux下對樹莓派編程(C語言或C++)

硬體的沒玩過
樹莓派 是不是那個 教學型 ARM編程主板?

建議你去 他們官方論壇看下
我同學他們畢業搞ARM的 都是 自己焊接板子的
然後用 winCE或者 unix linux 的嵌入式系統

他這種定製的包裝過的,一般都把很多底層的 原理封裝了,只需要 學號他官方提供的 支持文檔和事常式序,就能實現 很多功能。而且
如果 你直接去學C/C++ windows編程 以及通信編程 SSH協議 等 反倒離目的遠了。
我估計你應該是個 愛好者,或者學生。

論壇里有很多 愛好者 發的 相關項目及 細節

比如:我剛才在 論壇里看到一個帖子說

做了一個工具,在windows下面和pi 進行ssh 交互

http://bbs.ickey.cn/index.php?app=group&ac=topic&id=2573

『肆』 樹莓派3b支持DirectX 9.0嗎想用wine跑點游戲

Stage 1:尋找消失的指令集

對比載入新內核前後樹莓派3B上執行lscpu的輸出:

Before:Architecture: armv7l
...Flags: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32After:Architecture: aarch64
...Flags: fp asimd evtstrm crc32

顯然,有許多指令集莫名消失。
筆者使用的aarch-linux-gnu-工具鏈:

$ aarch64-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCC=aarch64-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/aarch64-linux-gnu/6/lto-wrapperTarget: aarch64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 6.3.0-18' --with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-6 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libquadmath --enable-plugin --enable-default-pie --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-arm64-cross/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-arm64-cross --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-arm64-cross --with-arch-directory=aarch64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libgcj --enable-multiarch --enable-fix-cortex-a53-843419 --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=aarch64-linux-gnu --program-prefix=aarch64-linux-gnu- --includedir=/usr/aarch64-linux-gnu/includeThread model: posix
gcc version 6.3.0 20170516 (Debian 6.3.0-18)

筆者遂使用crosstool-ng製作編譯工具鏈,並驚喜地發現:

$ ls /opt/crosstool-ng/samples/aarch64-rpi3-linux-gnueabi
...

crosstool-ng-1.23.0-75-ga9f8a8e6中已添加針對樹莓派3的支持。

於是筆者開始製作工具鏈。
選中了linaro分支的gcc。
並按照與前文相似的方法編譯內核,然而沒有效果,指令集仍未被識別。
後來筆者查閱資料後發現,aarch64是一套全新的指令集,asimd代替了neon。

Stage 2:使用debootstrap製作64位組件

盡管內核工作於64位模式,但系統大多數組件仍舊處於32位模式下。
我們的目標是引入Debian 9 arm64,自然會想到使用debootstrap。
在樹莓派上,給一張SD卡分兩個區:

  • 一個在前面,大小100M左右,使用mkfs.vfat,類型為W95 FAT32

  • 一個佔用後面所有的空間,視/boot/cmdline.txt中rootfstype的設置選擇分區格式

  • 然後開干:
    sudo debootstrap --verbose --arch=arm64 stretch . https://mirrors.ustc.e.cn/debian/
    編輯sources.list:

  • deb http://mirrors.ustc.e.cn/debian/ stretch maindeb http://mirrors.ustc.e.cn/archive.raspberrypi.org/ jessie main non-free contrib

  • apt.conf:
    APT::Default-Release "stretch";
    Chroot和之前的准備工作:

  • sudo mount -t proc proc procsudo mount -t sysfs sysfs syssudo mount -o bind /dev devsudo chroot .

  • 視具體情況安裝軟體包。

  • apt install hostapd wpasupplicant udhcpd screen dnsmasq sudo openssh-server firmware-brcm80211 ...

  • firmware-brcm80211:使系統識別樹莓派3板載網卡

  • hostapd,udhcpd,dnsmasq:啟動AP必備

  • wpasupplicant:用於連接Wifi熱點

  • openssh-server:SSH伺服器

  • sudo,screen:這兩個想必大家都聽說過吧……

  • 退出Chroot環境,復制配置文件及其它核心組件,例如:

  • /boot/lib/moles/etc/passwd/etc/shadow/etc/sudoers/etc/hostapd/etc/default/etc/udhcpd.conf/etc/udev//etc/dnsmasq.conf

  • etc...

  • 註:筆者實際上把整個(除了/etc)64位根文件系統覆蓋到了樹莓派啟動的SD卡上。
    成功啟動。
    但是有煩人的提示:
    ERROR: ld.so: object '/usr/lib/arm-linux-gnueabihf/libarmmem.so' from /etc/ld.so.preload cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
    解決方案顯而易見:

  • sudo mv /etc/ld.so.preload /etc/ld.so.preload.bak

  • sudo touch /etc/ld.so.preload

  • 如果你使用了一張新的SD卡,記得編輯/etc/fstab!

    Stage 3:站穩腳跟

    *執行apt-get update,提示:

  • Ign:1 https://mirrors.ustc.e.cn/debian stretch InRelease

  • Get:2 https://mirrors.ustc.e.cn/archive.raspberrypi.org jessie InRelease [22.9 kB]

  • Hit:2 https://mirrors.ustc.e.cn/archive.raspberrypi.org jessie InRelease

  • Get:3 https://mirrors.ustc.e.cn/debian stretch Release [113 kB]

  • Hit:3 https://mirrors.ustc.e.cn/debian stretch ReleaseCan't locate Storable.pm in @INC (you may need to install the Storable mole) (@INC contains: /etc/perl /usr/local/lib/aarch64-linux-gnu/perl/5.24.1 /usr/local/share/perl/5.24.1 /usr/lib/aarch64-linux-gnu/perl5/5.24 /usr/share/perl5 /usr/lib/aarch64-linux-gnu/perl/5.24 /usr/share/perl/5.24 /usr/local/lib/site_perl /usr/lib/aarch64-linux-gnu/perl-base) at /usr/bin/apt-show-versions line 37.

  • BEGIN failed--compilation aborted at /usr/bin/apt-show-versions line 37.

  • Reading package lists... Done

  • N: Skipping acquire of configured file 'main/binary-arm64/Packages' as repository 'https://mirrors.ustc.e.cn/archive.raspberrypi.org jessie InRelease' doesn't support architecture 'arm64'N: Skipping acquire of configured file 'non-free/binary-arm64/Packages' as repository 'https://mirrors.ustc.e.cn/archive.raspberrypi.org jessie InRelease' doesn't support architecture 'arm64'

  • N: Skipping acquire of configured file 'contrib/binary-arm64/Packages' as repository 'https://mirrors.ustc.e.cn/archive.raspberrypi.org jessie InRelease' doesn't support architecture 'arm64'N: Skipping acquire of configured file 'ui/binary-arm64/Packages' as repository 'https://mirrors.ustc.e.cn/archive.raspberrypi.org jessie InRelease' doesn't support architecture 'arm64'

  • E: Problem executing scripts APT::Update::Post-Invoke-Success 'test -x /usr/bin/apt-show-versions || exit 0 ; apt-show-versions -i'

  • E: Sub-process returned an error code

  • 筆者嘗試執行sudo apt-get install apt-show-versions,問題解決。

    小結

    路曼曼其修遠兮,吾將上下而求索。

    目前整個系統僅僅只是能用,還有許多不完美的地方。

    更新

    4.11的內核可以使樹莓派工作得更好,ACT燈和VCHI將正常工作。
    Git切換分支:git checkout rpi-4.11.y

熱點內容
用戶管理源碼 發布:2024-11-24 21:29:36 瀏覽:677
監控怎麼配置路由器 發布:2024-11-24 21:29:27 瀏覽:455
小型編譯器的實現 發布:2024-11-24 21:27:48 瀏覽:999
安卓手機為什麼下巴不掉 發布:2024-11-24 21:26:37 瀏覽:214
怎麼編程槍戰 發布:2024-11-24 21:25:52 瀏覽:855
安卓公測版哪個好 發布:2024-11-24 21:15:58 瀏覽:873
androidforvs2010 發布:2024-11-24 21:06:05 瀏覽:286
安裝MySqllinux 發布:2024-11-24 21:05:51 瀏覽:326
聯通網洛盒的密碼在哪裡 發布:2024-11-24 21:05:12 瀏覽:181
牌順編程 發布:2024-11-24 20:56:23 瀏覽:729