試體系解讀:rpi-test-image與oeqa自定義測(cè)試套件設(shè)計(jì)思路)
meta-raspberrypi測(cè)試體系解讀rpi-test-image與oeqa自定義測(cè)試套件設(shè)計(jì)思路【免費(fèi)下載鏈接】meta-raspberrypiYocto/OE BSP layer for the Raspberry Pi boards項(xiàng)目地址: https://gitcode.com/gh_mirrors/me/meta-raspberrypimeta-raspberrypi 是樹(shù)莓板Raspberry Pi的 Yocto/OpenEmbedded BSP 層。它的測(cè)試體系由兩部分組成一個(gè)專門(mén)打包硬件驅(qū)動(dòng)與外設(shè)工具的rpi-test-image 測(cè)試鏡像和一套繼承自 OE-Core 的oeqa 自定義運(yùn)行時(shí)測(cè)試套件。本文帶你快速看懂這套測(cè)試架構(gòu)的設(shè)計(jì)思路以及如何用它驗(yàn)證你的樹(shù)莓派定制系統(tǒng)。一、為什么需要專門(mén)的樹(shù)莓派測(cè)試鏡像 Yocto 構(gòu)建出的core-image-base是一個(gè)通用的最小系統(tǒng)它并不包含樹(shù)莓派特有的硬件能力GPU 多媒體、GPIO 控制、I2C/SPI、無(wú)線固件等。如果直接拿通用鏡像去測(cè) BSP 層等于考卷里沒(méi)有附加題——測(cè)不出板級(jí)支持的好壞。meta-raspberrypi 的解法很清晰在通用鏡像之上加一個(gè)測(cè)試包組把 BSP 層幾乎所有功能域都裝進(jìn)去形成一張功能全覆蓋的測(cè)試鏡像。這就是rpi-test-image的定位它不是給用戶日常使用的鏡像而是驗(yàn)證 BSP 層完整性的考卷。二、rpi-test-image測(cè)試套件的核心載體1. 鏡像定義三行代碼繼承復(fù)用測(cè)試鏡像的完整定義就在recipes-core/images/rpi-test-image.bb核心只有三步include官方core-image-base.bb完整繼承其構(gòu)建邏輯COMPATIBLE_MACHINE ^rpi$正則限定只允許在樹(shù)莓派機(jī)型上構(gòu)建IMAGE_INSTALL:append packagegroup-rpi-test把測(cè)試包組疊加進(jìn)去。這種繼承 追加包組的寫(xiě)法是 Yocto 測(cè)試鏡像的教科書(shū)式做法基礎(chǔ)構(gòu)建邏輯零改動(dòng)測(cè)試內(nèi)容全部收斂到一個(gè)包組中維護(hù)成本極低。2. 測(cè)試包組按功能域分層打包真正的考卷題目在recipes-core/packagegroups/packagegroup-rpi-test.bb中它按硬件功能域組織依賴功能域打包內(nèi)容測(cè)試目標(biāo) 多媒體omxplayer條件加入 Big Buck Bunny 視頻樣例GPU / MMAL 視頻硬解? GPIO 外設(shè)raspi-gpio、rpio、rpi-gpio、pi-blasterGPIO 引腳讀寫(xiě) Python 硬件庫(kù)python3-rtimu、python3-adafruit-*系列I2C / SPI 傳感器生態(tài) 無(wú)線連接connman、bluez5、wireless-regdb-staticWiFi / 藍(lán)牙棧設(shè)計(jì)上有兩個(gè)值得學(xué)習(xí)的小心思條件依賴omxplayer依賴 MMALGPU 閉源驅(qū)動(dòng)路徑當(dāng)機(jī)型啟用了vc4graphics開(kāi)源 GPU 驅(qū)動(dòng)時(shí)自動(dòng)剔除pi-blaster只追加到 32 位 armv7 機(jī)型它依賴 32 位用戶態(tài)直接訪問(wèn)/dev/mem推薦依賴注入板級(jí)固件RRECOMMENDS中引用了${MACHINE_EXTRA_RRECOMMENDS}由各機(jī)型配置文件動(dòng)態(tài)注入對(duì)應(yīng)的 WiFi/藍(lán)牙固件包保證測(cè)試鏡像開(kāi)機(jī)即帶完整無(wú)線能力。此外動(dòng)態(tài)層dynamic-layers/meta-python里的同名 bbappend 會(huì)再補(bǔ)裝python3-sense-hat覆蓋 Sense HAT 傳感器測(cè)試場(chǎng)景。三、oeqa 自定義運(yùn)行時(shí)測(cè)試讓鏡像會(huì)自檢構(gòu)建出的鏡像還需要一套在目標(biāo)板上運(yùn)行的測(cè)試框架。OE-Core 自帶oeqa.runtime運(yùn)行時(shí)測(cè)試框架它會(huì)自動(dòng)發(fā)現(xiàn)各層lib/oeqa/runtime/cases/目錄下的測(cè)試用例——meta-raspberrypi 正是利用這一擴(kuò)展機(jī)制加入了自定義用例lib/oeqa/runtime/cases/parselogs_rpi.py。這個(gè)文件很短但麻雀雖小五臟俱全繼承復(fù)用ParseLogsTestRpi直接繼承 OE-Core 的ParseLogsTest復(fù)用其啟動(dòng)目標(biāo)機(jī) → 抓取內(nèi)核日志 → 比對(duì)已知錯(cuò)誤的完整流程一行測(cè)試邏輯都不用重寫(xiě)機(jī)型白名單ignore_errors[raspberrypi3] rpi_errors common_errors為每類板子定義板級(jí)已知錯(cuò)誤與通用錯(cuò)誤合并成忽略清單增量把關(guān)只有出現(xiàn)在日志中、又不在忽略清單里的新內(nèi)核錯(cuò)誤才會(huì)導(dǎo)致測(cè)試失敗。這解決了一個(gè)現(xiàn)實(shí)痛點(diǎn)樹(shù)莓派各板型固件/內(nèi)核組合不同日志里總有歷史遺留告警。板級(jí)忽略清單機(jī)制讓測(cè)試既不冤枉舊問(wèn)題又能敏銳捕捉新引入的回歸。四、如何快速構(gòu)建并驗(yàn)證測(cè)試鏡像 第 1 步獲取代碼并初始化環(huán)境git clone https://gitcode.com/gh_mirrors/me/meta-raspberrypi第 2 步用 kas 一鍵配置構(gòu)建棧項(xiàng)目根目錄自帶kas-poky-rpi.yml構(gòu)建描述默認(rèn)機(jī)型raspberrypi4無(wú)需手工拼裝 bblayers.confkas build meta-raspberrypi/kas-poky-rpi.yml第 3 步把構(gòu)建目標(biāo)換成測(cè)試鏡像bitbake rpi-test-image第 4 步用 oeqa 運(yùn)行時(shí)框架在真機(jī)上驗(yàn)證燒錄鏡像到 SD 卡啟動(dòng)樹(shù)莓派后在構(gòu)建機(jī)上運(yùn)行oe-selftest -r runtime運(yùn)行時(shí)框架會(huì)通過(guò) SSH 登錄目標(biāo)機(jī)執(zhí)行ParseLogsTestRpi等用例自動(dòng)比對(duì)內(nèi)核日志輸出測(cè)試報(bào)告。五、總結(jié)三層遞進(jìn)的測(cè)試設(shè)計(jì) 層次載體解決的問(wèn)題內(nèi)容層rpi-test-image 測(cè)試包組測(cè)試對(duì)象裝什么BSP 全功能域覆蓋機(jī)制層條件依賴 板級(jí)固件注入測(cè)試鏡像適配誰(shuí)隨機(jī)型自動(dòng)裁剪執(zhí)行層oeqa 自定義日志用例測(cè)試怎么判真機(jī)運(yùn)行 板級(jí)白名單這套體系的精髓在于復(fù)用與收斂鏡像繼承通用構(gòu)建邏輯、用例繼承通用測(cè)試框架、差異內(nèi)容全部收斂進(jìn)包組與忽略清單。對(duì)新手而言它既是一份可直接使用的樹(shù)莓派 Yocto 系統(tǒng)驗(yàn)證工具也是一份學(xué)習(xí) Yocto 測(cè)試體系設(shè)計(jì)的優(yōu)質(zhì)范本。更多層內(nèi)容說(shuō)明可查閱文檔docs/layer-contents.md構(gòu)建入口參考根目錄kas-poky-rpi.yml。【免費(fèi)下載鏈接】meta-raspberrypiYocto/OE BSP layer for the Raspberry Pi boards項(xiàng)目地址: https://gitcode.com/gh_mirrors/me/meta-raspberrypi創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考