飛淩嵌入式OK113i-S開發闆上市一段時間以來收獲了很多關注,也成為了許多客戶項目選型的優質之選。在實際的項目開發中,工程師朋友們可能會需要在檔案系統中移植一些工具或協定,那麼該如何進行移植操作呢?
我們可以通過添加package包配置的方式在OK113i-S開發闆的Buildroot中移植新功能。本篇文章,小編就以在Buildroot移植MQTT協定為例為大家介紹。
Part 1:配置檔案介紹
首先了解一下在Buildroot中移植功能時涉及到的配置檔案。
檢視飛淩嵌入式OK113i-S開發闆源碼中已有的配置檔案,可以看到在路徑 buildroot/buildroot-201902/package/mosquitto 裡邊包括以下幾個檔案:
Config.in
mosquitto.mk
mosquitto.hash
mosquitto.service
S50mosquitto
① Config.in
Config.in檔案通過 BR2_PACKAGE_** 作為開關來告知Buildroot需要哪個包參與編譯,開關在 buildroot/buildroot-201902/configs/ 下面的 OK113I_linux_defconfig 配置檔案中指派,類似于核心中的Kconfig檔案。
例如:
package/Config.in中寫了調用關系
source "package/mosquitto/Config.in";
package/mosquitto/Config.in中寫了
BR2_PACKAGE_MOSQUITTO資訊。
② demo.mk
這個檔案中聲明一些包的資訊,比如:指定包的版本、包源碼下載下傳連結、存放路徑、編譯規則、工具鍊等。編譯時會按照這個檔案中的下載下傳位址和版本下載下傳源碼包到指定路徑并進行編譯和檔案拷貝,相當于Makefile檔案。
例如:mosquitto.mk
檔案開頭先寫了軟體包版本和下載下傳位址,我們在浏覽器通路該位址可以找到對應版本的軟體包。編譯時,如果源碼中沒有該檔案,就會自動下載下傳。
mosguitto-1.5.8.tar.gz
mosguitto-1.5.8.tar.gz.asc
除此之外檔案中還定義了其他的編譯規則,包括檔案拷貝路徑等内容。
③ demo.hash
這個檔案會記錄下載下傳的源碼包的hash校驗碼,防止下載下傳的源碼包出錯。
④ demo.service
此檔案是為systemd服務 ,systemd開機後會依據此檔案啟動demo服務,在demo.mk中會指定此檔案的源路徑已經安裝路徑。目前OK113i-S開發闆沒有使用該服務,是以可以不用管它。
⑤ S50demo
此檔案類是demo.service,是目前OK113i-S開發闆在使用的開機服務類型。
在以上5種檔案中Config.in和demo.mk是必須的,其他檔案按需配置即可。具體配置内容可參考已有檔案或根據實際情況進行書寫。Mosquitto已經有寫好的配置檔案,可以直接用,一般配置檔案由項目的維護者或開發者提供,如果自己移植的檔案沒有配置檔案,可以參考已有配置檔案寫一個。
Part 2:執行
我們需要在buildroot/buildroot-201902中執行
make OK113I_linux_defconfig
然後執行make menuconfig ARCH=arm
在圖形配置界面進行配置(如果執行報錯,請先安裝該指令:sudo apt-get update 和 sudo apt-get install ncurses)。
進入圖形配置界面後輸入“/”搜尋要配置的功能,如圖搜尋Mosquitto看到的資訊,按提示選“1”可進入目标選項,按“空格”選擇後儲存并退出。
配置完成後,在目前目錄下執行 ./build.sh對檔案系統進行編譯,編譯完成後可檢視檔案系統中是否已經有對應檔案。(注:如果沒有網絡,則編譯時不能自動下載下傳源碼包,需要到下載下傳位址手動下載下傳源碼包并放到源碼包存放路徑中。)
Part 3
MQTT的測試驗證
修改OK113i-S開發闆的 /etc/mosquitto/mosquitto.conf 檔案,在#user mosquitto後加一行user root,重新開機服務或者開發闆。也可以殺掉程序并重新執行:
/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
然後進行測試——
訂閱test主題:
mosquitto_sub -t test &
釋出test主題:
mosquitto_pub -t test -m "hello world"
能看到傳回的 hello world 字樣,就說明移植成功了。
以上就是在飛淩嵌入式OK113i-S開發闆的Buildroot中移植MQTT協定的方法,供螢幕前的工程師小夥伴參考。