i.MX6ULL開發板-Buildroot製作交叉編譯器
前言
文章基於HD-IMX6ULL-MB 系列開發板測試驗證,該開發板由武漢芯路遙科技有限公司與武漢永珍奧科電子有限公司合作推出。此開發板基於 NXP iMX6ULL 系列 Cortex-A7 高效能處理器設計,適用於快速開發一系列具有創新性的產品如人機介面工業 4.0 掃描器、車載終端以及行動式醫療裝置。
1. Buildroot製作交叉編譯器
在前面我們提到,如果想要自己製作交叉編譯器的話,通常會用到兩個工具,分別是
crosstool-NG 和
Buildroot 。但需要了解的是製作交叉編譯器只是嵌入式開發的第一步,後面我們還需要使用交叉編譯器來移植 bootloader、linux kernel 以及製作根檔案系統 rootfs,之後還會用它來交叉編譯各種所需要的應用程式。其中
crosstool-NG 只是製作了一個交叉編譯器,而如果你希望一鍵完成這所有的事情, 則可以使用
Buildroot 。
如果你是一個嵌入式軟體工程師,那你有必要要知道buildroot是什麼。buildroot這個工具除了可以制 作交叉編譯器以外,還提供了一種更加高效的管理方法,它把bootloader,linux,應用程式和rootfs集 成在一起,可以非常方便的去定製,管理,編譯和組裝一個自己需要的,針對自己的裝置的一個完整的 軟體系統,這樣我們可以利用buildroot針對自己的嵌入式裝置開發完整的BSP和SDK。
接下來我們將介紹如何使用 buildroot 來製作交叉編譯器,同時生成一個開發板可以使用的根檔案系統。需要注意的是,因為 Linux 核心 和 u-boot 今後需要自己針對開發板做移植修改,所以這裡將不編譯 Linux核心 和 u-boot 程式。
1.1Buildroot 介紹
Buildroot 官網首頁對buildroot的定義,和特點有非常明確的介紹:
h ttps://buildroot.org/ 。
-
buildroot的宗旨為了讓嵌入式linux開發更容易;
-
管理一切!為嵌入式裝置生成交叉編譯工具鏈,檔案系統,交叉編譯bootloader和kernel image;
-
易用!所有配置透過像linux一樣的menuconfig,gconfig和xconfig;
-
支援豐富的package資源,構建你需要的rootfs;
這裡,我們從Buildroot的
官方下載地址下載當前的最新長期支援版本
buildroot-2021.02.7 並解壓縮。
整個Buildroot是由Makefile(*.mk)指令碼和Kconfig(Config.in)配置檔案構成的,因此可以像配置Linux內 核一樣執行make menuconfig進行配置,編譯出一個完整的、可以直接燒寫到機器上執行的Linux系統檔案(包含bootloader、kernel、rootfs以及rootfs中的各種庫和應用程式)。而構建開源軟體包的流程, 工作流大致如下:
-
獲取:獲取原始碼解壓:解壓原始碼
-
補丁:針對缺陷修復和增加的功能應用補丁配置:根據環境準備構建過程
-
安裝:複製二進位制和輔助檔案到它們的目標目錄
-
打包:為在其它系統上安裝而打包二進位制和輔助檔案
構建每個軟體包的工作流幾乎是相同的,Buildroot主要就是把這些重複操作自動化,使用者只需勾選上所 需軟體包,便自動完成以上所有操作。其次,U-boot、Linux Kernel的編譯工作流的差不多,只是配置的自定義引數更多,在Buildroot設定好了,也就一併生成。
1.2Buildroot 配置
在 buildroot 原始碼路徑下,有很多參考的示例配置,其中就包含有
imx6ullevk 的參考配置。我們沒有必要所有的選項都自己從0開始配置,接下來我們將在它的基礎上來修改。
如果是使用
SecureCRT 遠端登入到Linux伺服器上操作的話,需要
export TERM=vt100 命令配置TERM 環境變數,否則接下來的配置可能不能輸入。接下來再執行
make menuconfig 對交叉編譯器製作進行配置。
下面是 Buildroot 的配置介面,接下來我們將對齊進行配置。在配置的過程中:
-
使用 上、下鍵 選擇選單;
-
使用 Tab 鍵 選擇底行的 <Select> 或 < Exit> ;
-
在某個選項上按 h 可以參考該選項的配置幫助資訊;
-
使用 空格 選擇或使能某個選項, 也可以使用 y 或 n 使能或取消該選項; 如果是需要輸入配置的選項,按 回車 進入輸入;
在
Target options 選項中 ,這裡配置了交叉編譯器的體系架構資訊。因為我們的開發板所有的處理器
i.MX6ULL 是取樣 Cortex-A7架構,帶有 NEON 浮點運算,所以這裡做如下的預設配置。
在
Build options 選項中 ,這裡主要修改一下:
-
($(TOPDIR)/tarballs) Download dir 修改指定原始碼包的下載路徑;
-
(/opt/buildroot/cortexA7) Host dir 修改指定交叉編譯器的安裝路徑;
-
libraries (both static and shared) 這裡修改選擇使能靜態庫,今後編譯程式或學習過程中可能需要。
在
Toolchain 選項中,這裡做如下修改:
-
C library 選擇使用 (glibc);
-
Kernel Headers 選擇 (Linux 5.10.x kernel headers);
-
[*] Enable C++ support 該選項選擇支援 C++編譯器,如果想支援其它的語言(Fortran、Dlanguage)也可以選擇;
-
這裡的gcc、binutils的版本使用預設的版本
System configuration 選項中配置了根檔案系統的相關資訊,我們做如下修改:
-
(imx6ull) System hostname 設定開發板的主機名,儲存在根檔案系統樹 /etc/hostname 檔案中;
-
(Welcome to LingYun iMX6ULL Board, default password '12345'.) System banner 設定開機提示資訊,儲存到根檔案系統樹 /etc/issue 檔案中;
-
/dev management (Dynamic using devtmpfs + mdev) 這裡設定裝置管理的預設程式,這裡使用的是 busybox 裡提供的 mdev,也可以選擇 udev;
-
(12345) Root password 設定開發板登入時的 root 賬號預設密碼為 12345;
-
移除 Custom scripts to run after creating filesystem images 裡設定的指令碼,我們不需要;
Kernel 選項主要是Linux核心的編譯配置,今後我們將會自己移植並編譯Linux核心,所以這裡不要選擇。
Target packages 選項這裡有大量的應用程式或開源庫編譯選項,如果想製作到根檔案系統樹中的話, 這裡可以做相應的選擇。
下面是一些建議可以選擇的軟體包:
Filesystem images 選項指定生成根檔案系統映象的型別,因為我們將來將會自己製作系統映象,所以這裡不需要生成。只需要將根檔案系統樹打包並使用
bzip2 壓縮即可。
Bootloaders 選項主要是u-boot的編譯配置,今後我們將會自己移植並編譯U-boot,所以這裡不要選擇。
Host utilities 是在編譯 Buildroot 過程中,X86主機上所依賴的一些工具。可以進去把一些能取消的都取消,從而節省編譯時間;
Legacy config options 是一些過期作廢的軟體包,一般都不需要;
配置完成之後,選擇
< Exit > 退出並儲存該配置,這些配置將會儲存在當前路徑下的 .config 隱藏檔案裡。之後的編譯過程將根據這裡面的配置,選擇下載、編譯相關程式或程式碼。
1.3Buildroot 編譯
首先建立交叉編譯器的安裝路徑,注意製作交叉編譯器別用
root 賬號來完成,否則小心破壞自己的
Linux系統。
接下來我們就開始交叉編譯的編譯製作過程,這個過程的時間依賴PC的效能和所選擇的選項多少。我的
Linux伺服器處理器是Intel(R) Xeon(R) CPU E31235 @ 3.20GHz,4核8執行緒,所以我這裡使用
make -j8
命令用8個程式同時編譯。
編譯成功完成之後,輸出如下:
編譯過程中
下載的原始碼包 將會放到
tarballs 資料夾下:
編譯生成的
根檔案系統樹 將會放到
output/images/ 資料夾下:
編譯生成的
交叉編譯器 將會放到
/opt/buildroot/cortexA7 路徑下:
我們可以使用下面命令檢視製作好的交叉編譯器相關版本資訊:
1.4 Buildroot 測試
接下來我們使用製作好的交叉編譯器,交叉編譯之前寫好的
hello.c 測試程式,並放到 ARM 開發板上執行測試。需要注意的是因為新制作的交叉編譯器跟開發板上執行的C執行庫版本不一致,這裡必須加上 -static 進行靜態連結,這樣編譯生成的程式才能在開發板上執行。
ARM 開發板上下載執行測試:
版權宣告
本文件所有內容文字資料由凌雲實驗室郭工編著,主要用於凌雲嵌入式Linux教學內部使用,版權歸屬作 者個人所有。任何媒體、網站、或個人未經本人協議授權不得轉載、連結、轉帖或以其他方式複製釋出/ 發表。已經授權的媒體、網站,在下載使用時必須註明來源,違者本人將依法追究責任。
-
Copyright (C) 2021 凌雲物網智科實驗室·郭工
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70009145/viewspace-2849994/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- i.MX6ULL開發板原始碼自制交叉編譯器原始碼編譯
- i.MX6ULL開發板原始碼交叉編譯器介紹原始碼編譯
- i.MX6ULL開發板原始碼編譯原始碼編譯
- 虛擬機器-Linux開發板交叉編譯問題記錄虛擬機Linux編譯
- i.MX6ULL開發板原始碼編譯燒錄原始碼編譯
- RK3568開發筆記(四):在虛擬機器上使用SDK編譯製作uboot、kernel和buildroot映象筆記虛擬機編譯bootUI
- 嵌入式GDB除錯Linux C程式或交叉編譯(開發板)除錯LinuxC程式編譯
- 如何根據自己的開發板型號下載和配置交叉編譯鏈編譯
- 編譯器的自展和自舉、交叉編譯編譯
- 交叉編譯編譯
- lazarus交叉編譯編譯
- golang交叉編譯Golang編譯
- GDB交叉編譯編譯
- 11_QT跨平臺執行之把QT程式交叉編譯到ARM開發板QT編譯
- Android 基於ffmpeg開發簡易播放器 - NDK交叉編譯ffmpegAndroid播放器編譯
- Hi3516開發筆記(七):Hi3516虛擬機器交叉開發環境搭建之交叉編譯Qt筆記虛擬機開發環境編譯QT
- go 交叉編譯,部署Go編譯
- 交叉編譯入門編譯
- 交叉編譯和 RPC編譯RPC
- RK3568開發板原始碼編譯原始碼編譯
- 如何製作一款線上編譯器編譯
- linux與windows交叉編譯LinuxWindows編譯
- golang初學:交叉編譯Golang編譯
- 交叉編譯mupdf1.15.0編譯
- FFmpeg開發筆記(十六)Linux交叉編譯Android的OpenSSL庫筆記Linux編譯Android
- FFmpeg開發筆記(八)Linux交叉編譯Android的FFmpeg庫筆記Linux編譯Android
- Rust 交叉編譯與條件編譯總結Rust編譯
- 交叉編譯-Mac環境使用NDK編譯FFmpeg編譯Mac
- i.MX6ULL開發板無線網路測試
- 使用 goxc 方便的進行交叉編譯分發Go編譯
- Go跨平臺交叉編譯Go編譯
- Ubuntu交叉編譯環境配置Ubuntu編譯
- Go - armv7 交叉編譯Go編譯
- FFmpeg開發筆記(九)Linux交叉編譯Android的x265庫筆記Linux編譯Android
- 迅為i.MX6ULL 開發板開機進度條修改文件
- 交叉編譯工具鏈構建原理編譯
- 交叉編譯c++給android呼叫編譯C++Android
- Go語言交叉編譯工具goxGo編譯