2024-09-01

編譯 LuckFox Pico 的核心系統

上次介紹過的 LuckFox Pico Mini B型號 ,雖然使用上比較直接
但預設的核心系統限制著使用的功能,因此在下打算了解更多資料

由於 LuckFox Pico 使用 Linux

下載及安裝編譯工具

編譯前先安裝需要使用套件,輸入

sudo apt-get install \
autoconf bc bison cmake cpio device-tree-compiler expect fakeroot file flex \
g++ g++-multilib gawk gcc gcc-multilib git gperf libncurses5-dev libssl-dev make \
module-assistant nano openssh-client openssh-server openssl passwd pkg-config python-is-python3 rsync \
ssh texinfo unzip vim

下載原始碼

git clone "https://github.com/LuckfoxTECH/luckfox-pico.git" --depth=1

使用 Git 下載 LuckFox Pico 核心系統的原始碼

編譯型號設定

到 luckfox-pico 的目錄輸入

"./build.sh" lunch

會顯示設定選單

  1. 選擇 LuckFox Pico 的型號
  2. 選擇 起動方式 (部分 LuckFox Pico 型號沒有內置儲存裝置,必須使用 SD_CARD)
  3. 選擇 核心版本 (官方還有提供 Ubuntu ,但需要最少 300MB儲存空間 才能安裝)

編譯核心系統

設定後,輸入

"./build.sh"

便會開始編譯
(編譯的途中需要下載需要使用的軟件的原始碼)
(編譯時間視乎電腦效能,在下的電腦的編譯時間大約需要 30分鐘)

編譯成功後,可以到 output/image 中找到編譯完成的映像檔案

寫入核心系統

輸入

"./upgrade_tool" UF "output/image/update.img"

將核心系統寫入到 LuckFox Pico
(需要下載 upgrade_tool 並存放到 luckfox-pico 目錄)

寫入核心系統後,輸入

adb shell

使用 ADB 連接到 LuckFox Pico

(由於在下編寫這篇文章時,剛好 LuckFox Pico 發佈 LuckFox Ultra 開發板 及 更新原始碼
因此使用較新原始碼所編譯的 LuckFox Pico ,已經設定好基本的提示資訊)

修改引腳設定

新版本的核心系統,引腳設定只有系統保留的預設功能
不計算 電源(VCC) 及 接地(GND) ,只有 ADC 、 偵測用的 UART2 、 系統保留的 I2C4 及 連接到 Micro SD 卡的 SPI2
其他引腳只有 GPIO 功能
如果需要使用 PWM 及 額外的 I2C3 及 SPI0 ,需要修改核心的引腳設定

到 sysdrv/source/kernel/arch/arm/boot/dts ,並尋找對應的 LuckFox Pico 型號的 dts檔案

使用 文字編輯器 開啟 dts檔案

如果需要啟動對應引腳的功能,在檔案中尋找 pwm, uart, i2c, spi 的分類,並將 status 由 disable 修改為 okay

dts檔案 中的設定並非完整內容,缺失的設定要自行加入,而且引腳及其功能必須存在於 LuckFox Pico 對應的型號
除了範例中的 PWM1 ,例如在下想啟用 LuckFox Pico Mini B型號 的 PWM3, PWM8, PWM9, PWM10, PWM11
在 dts檔案 中加入

&pwm3 {
	status = "okay";
	pinctrl-names = "active";
	pinctrl-0 = <&pwm3m2_pins>; // reference to data sheet pin PWM3_IR_M2
};
&pwm8 {
	status = "okay";
	pinctrl-names = "active";
	pinctrl-0 = <&pwm8m1_pins>; // reference to data sheet pin PWM8_M1
};
&pwm9 {
	status = "okay";
	pinctrl-names = "active";
	pinctrl-0 = <&pwm9m1_pins>; // reference to data sheet pin PWM9_M1
};
&pwm10 {
	status = "okay";
	pinctrl-names = "active";
	pinctrl-0 = <&pwm10m1_pins>; // reference to data sheet pin PWM10_M1
};
&pwm11 {
	status = "okay";
	pinctrl-names = "active";
	pinctrl-0 = <&pwm11m1_pins>; // reference to data sheet pin PWM11_IR_M1
};

修改完成後,輸入

"./build.sh" kernel

重新編譯核心

核心編譯完成後(大約20秒),輸入

"./build.sh" firmware

將編譯完的資料封裝(大約20秒)成 update.img

再次將 update.img 寫入到 LuckFox Pico

使用修改後的核心系統,便能夠使用 PWM 、 I2C3 、 SPI0

安裝額外軟件

基於儲存裝置的容量限制, LuckFox Pico 預設的 Linux 並沒有安裝太多軟件
不過 LuckFox Pico 在編譯 Linux核心系統 時,能夠同時將需要使用的軟件編譯並安裝

到 sysdrv/source/buildroot/buildroot-* 目錄(buildroot-* 目錄需要先編譯一次才建立),輸入

make luckfox_pico_defconfig

建立軟件的設定檔,輸入

make menuconfig

修改設定檔的內容

執行指令後,會顯示一個互動操作的 Terminal 選單,軟件項目在 Target packages 中
並會將不同類別的軟件分類,例如在下打算安裝常用的 壓縮及解壓縮軟件
選擇項目後,按 空格鍵 (Space) 選取 或 取消選取 該項目

除了依分類尋找,亦可以按 / (斜線) 符號 搜尋
操作以 正規表達式 (Regular Expression (regex)) 尋找資料
如果符合的資料很多,需要較長的載入時間

篩選後的內容會以文字清單顯示,可以按上下左右方向鍵移動(主要是上下)
項目中的 prompt 為 軟件名稱,然後 括號中的數字 是前往該項目的 快捷鍵
但 快捷鍵 必須 顯示該項目的數字 的情況下才能生效

按下對應項目的 快捷鍵 後,便會立即前往 該項目 或 該項目的分類目錄

完成設定後,儲存並離開

輸入

make savedefconfig

將設定資料儲存到編譯設定,再輸入

make

開始編譯軟件

如果編譯的軟件需要從網絡下載對應軟件的原始碼

編譯時間受下載速度、軟件數量,因此在下沒有測試時間

軟件編譯完成後,回到 luckfox-pico 目錄,輸入

"./build.sh" rootfs

重新編譯 系統目錄

編譯完成後,輸入

"./build.sh" firmware

再次資料封裝成 update.img

(由於 系統目錄 已經編譯,因此不需要重新編譯所有軟件,只需要編譯新加入的軟件)

再次將資料寫入到 LuckFox Pico

便可以在 LuckFox Pico 使用額外軟件

補充資料

先前試用 LuckFoc Pico Mini B 預設並沒有能夠直接控制 SPI 的指令
因此可以到 buildroot-* 尋找及編譯 spidev_test ,是一個使用 SpiDev 並由 C 製作的 SPI 測試工具

搜尋、安裝、編譯 spidev_test 並寫入到 LuckFox Pico

便可以直接使用 Shell腳本 控制 SPI

另外 sysdrv/source/buildroot/buildroot-*/output/target 是編譯 LuckFox Pico 系統檔案 的 fakeroot 位置
可以將 起動程式 儲存到 etc/init.d 中,然後編譯 核心目錄、封裝成映像檔、將核心寫入到 LuckFox Pico
當 LuckFox Pico 起動後便立即執行

除了 etc/init.d ,亦可以將需要的檔案存放到需要的位置 (例如 /opt ,通常存放額外軟件)
便不需要每次寫入 核心系統 要自行再建立軟件

總結

編譯在 LuckFox Pico 運作的 Linux ,有點像在 Termux 上設定 Linux 相似
分別是 Termux 上的 Linux 是屬於虛擬機,無法存取宿主的硬件功能
而 LuckFox Pico 則是真實的 Linux 主機,能夠存取裝置的硬件

在下最初為了避免安裝太多套件在電腦系統,所以在 虛擬機系統 中測試編譯 LuckFox Pico 的核心系統
但編譯的時間需要120分鐘,實在太長,因為直接使用電腦編譯,縮短為30分鐘完成

編譯最重要選擇正確的 LuckFox 型號,然後便是等待完成,因此並沒有特殊技能要求
主要是更改或啟動引腳的功能,才需要參考不同型號的 LuckFox Pico 引腳的功能

另外一個需要花時間就是編譯軟件, LuckFox Pico 編譯時預設使用以下軟件

  • acl
  • argp-standalone
  • attr
  • autoconf-archive
  • autoconf
  • automake
  • bash
  • bison
  • busybox
  • cmocka
  • dialog
  • dtc
  • e2fsprogs
  • expat
  • fakeroot
  • flex
  • gettext-tiny
  • gettext-tiny
  • gmp
  • gnutls
  • heimdal
  • htop
  • libevent
  • libffi
  • libiconv
  • libopenssl
  • libtasn1
  • libtirpc
  • libtool
  • libunistring
  • libv4l
  • libzlib
  • lrzsz
  • m4
  • nano
  • ncurses
  • nettle
  • nfs-utils
  • ntp
  • openssh
  • patchelf
  • perl-parse-yapp
  • perl
  • pkgconf
  • popt
  • python3
  • python-aiodns
  • python-aiohttp
  • python-aiosignal
  • python-async-timeout
  • python-attrs
  • python-cchardet
  • python-cffi
  • python-click
  • python-cython
  • python-flit-core
  • python-frozenlist
  • python-idna
  • python-installer
  • python-itsdangerous
  • python-jinja2
  • python-markupsafe
  • python-multidict
  • python-packaging
  • python-pep517
  • python-periphery
  • python-pillow
  • python-pycares
  • python-pycparser
  • python-pypa-build
  • python-serial
  • python-setuptools
  • python-smbus-cffi
  • python-spidev
  • python-typing-extensions
  • python-werkzeug
  • python-yarl
  • readline
  • samba4
  • time
  • util-linux

因此需要額外添加軟件時,不要取消選擇這些套件,以免 LuckFox Pico 出現問題

而需要安裝額外視乎使用情況,在下有一些推薦軟件:

  • GPIO工具
    • i2c-tools
    • spidev_test
  • 壓縮或解壓縮工具
    • bzip2
    • gzip
    • p7zip (7zr)
    • unrar
    • unzip
    • xz-utils
    • zip
  • 檔案系統工具
    • dosfstools
    • fatlabel
    • fsck.fat
    • mkfs.fat
    • exFAT (FUSE)
    • exfat-utils
    • exfatprogs
    • firmware-utils
    • ntfs-3g
    • encrypted volumes
    • ntfsprogs
  • 網絡工具
    • libcurl
    • net-tools
    • nmap
    • wget
  • 開發工具
    • gawk
    • git
    • grep
    • jq
    • python-pip
  • 伺服器工具
    • apache
    • cups
    • transmission
  • 多媒體工具
    • imagemagick
    • ffmpeg
  • 其他工具
    • jhead
    • ghostscript
    • libfdisk
    • neofetch

閣下可以選取選項後,查看說明了解該套件的功能
另外部分安裝選項,選取後會有額外功能,如果情況許可,建議同時安裝,令該軟件達至最佳功能

參考資料

沒有留言 :

張貼留言