一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

3.5秒極速啟動!樹莓派 Zero 2 W 的極端啟動優(yōu)化技巧!

上海晶珩電子科技有限公司 ? 2025-03-25 09:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

不久前,我們構(gòu)建了一個名為 SolarCamPi 的項目,這是一個離網(wǎng)太陽能供電的WiFi攝像頭。

在這個項目中,我們使用了Raspberry Pi Zero 2 W,它在啟動時進入Linux系統(tǒng),拍攝一張照片,建立WiFi連接,然后再次關(guān)閉(以節(jié)省電量)。這個過程每幾分鐘重復(fù)一次,以便持續(xù)向云服務(wù)發(fā)送最新圖像。

8140e5ac-091a-11f0-9434-92fbcf53809c.jpg

Raspberry Pi Zero 每開機一秒鐘都會消耗寶貴的電力,這對于太陽能供電的設(shè)備來說是一種稀缺資源(至少在西歐的冬天是這樣……)。用戶空間的應(yīng)用程序(服務(wù)器連接、圖片上傳等)已經(jīng)盡可能進行了優(yōu)化。電子設(shè)備的設(shè)置也特意設(shè)計為在休眠時盡可能少地消耗電力。

有兩種方法可以進一步降低總能耗:

1.降低功耗/電流

2.減少運行時間

然而,在某些情況下,需要在兩者之間找到平衡。例如,僅僅為了節(jié)省一些電流而禁用CPU渦輪加速并不是一個好主意,因為由此產(chǎn)生的額外時間將消耗比快速完成任務(wù)并關(guān)閉更多的能量。我們想要的是電流與時間圖下的面積盡可能小。

硬件設(shè)置

在優(yōu)化嵌入式啟動過程時,能夠在做出更改后迅速看到效果至關(guān)重要。在工作中頻繁更換SD卡、擺弄讀卡器和電源供應(yīng)器既分散注意力又令人厭煩。

為了避免這種情況,存在一些有用的工具:

1.Nordic Power Profiler Kit II

2.USB-SD-Mux Fast

3.USB-UART轉(zhuǎn)換器

81963d86-091a-11f0-9434-92fbcf53809c.jpg

Power Profiler Kit

Power Profiler Kit II(現(xiàn)在稱為PPK)可以為被測設(shè)備(DUT)供電,并隨時間準確測量其功耗。您可以啟用/禁用DUT,查看任何時間點的功耗,以及查看8個數(shù)字輸入的狀態(tài)!我們將其中一個數(shù)字輸入連接到Raspberry Pi的GPIO引腳上。

這樣,“我們的應(yīng)用程序”的第一個動作(即終點線)將是切換GPIO引腳。然后,我們只需測量從開機到GPIO切換之間的時間。

USB-SD-Mux

USB-SD-Mux是硬件黑客們非常有用的工具,它是microSD卡和帶有USB-C接口的DUT之間的轉(zhuǎn)換器。計算機可以從DUT“竊取”microSD卡,重寫其內(nèi)容,然后將microSD卡插回DUT,而無需觸摸設(shè)備。

這大大簡化了測試更改的工作流程,避免了拔下卡片、將其插入microSD讀卡器、刷新、將卡片插回DUT等繁瑣步驟。它甚至可以使用板載GPIO來自動重置或供電DUT。

USB-UART轉(zhuǎn)換器

幾乎需要某種形式的UART接口。這些更改將在某個時刻破壞系統(tǒng)啟動、WiFi連接等,而如果沒有UART控制臺,我們將無法看到發(fā)生了什么。標準的CP2102、FTDI等轉(zhuǎn)換器都能很好地工作。

測量/測試設(shè)置

在干凈的Debian 12(bookworm)arm64 Lite映像上,修改了/boot/firmware/cmdline.txt 文件以包含init=/init.sh。這意味著內(nèi)核將在用戶空間的第一件事就是執(zhí)行/init.sh腳本(在運行systemd或任何其他內(nèi)容之前)。

這樣的init.sh腳本可能如下所示:

#!/bin/bashgpioset 0 4=0sleep 1gpioset 0 4=1sleep 1gpioset 0 4=0exec /sbin/init

這將切換GPIO4,然后用/sbin/init(即systemd)替換自己以恢復(fù)正常啟動。

81cd4704-091a-11f0-9434-92fbcf53809c.png

在Nordic的Power Profiler軟件中,您可以看到Raspberry Pi在啟動過程中的電流消耗(以5V計算)。大約12秒后,數(shù)字輸入0變?yōu)榈碗娖?,表明我們的init.sh已執(zhí)行。

在此過程中,總共使用了1.90庫侖(庫侖和安培秒是等價的)的電量。計算1.9As * 5.0V得出此啟動過程的能耗為9.5Ws。

作為參考:一節(jié)AA堿性電池可以提供約13500Ws的能量。

降低電流

首先,我們來做簡單的事情,盡可能降低工作電流。

禁用HDMI

我們可以完全禁用HDMI編碼器。由于我們需要GPU來編碼攝像頭數(shù)據(jù),因此無法禁用GPU。如果您的應(yīng)用程序不需要攝像頭/GPU支持,請嘗試完全禁用GPU。

這可以將電流消耗從136.7mA降低到122.6mA(超過10%?。?。

相關(guān)的config.txt參數(shù):

# disable HDMI (saves power)dtoverlay=vc4-kms-v3d,nohdmimax_framebuffers=1disable_fw_kms_setup=1disable_overscan=1# disable composite video outputenable_tvout=0

禁用活動LED

僅通過禁用活動LED,我們就可以節(jié)省2mA(從122.6mA降低到120.6mA)。

dtparam=act_led_trigger=nonedtparam=act_led_activelow=on

禁用攝像頭LED

對攝像頭LED重復(fù)相同的操作(如果存在)。這還將減少LED反射回圖像的機會。

disable_camera_led=1

渦輪調(diào)整

如前所述,在浪費時間的同時節(jié)省電流可能并不理想。

在當前的更改下,Pi可以在使用1.62As的情況下啟動。

81ed445a-091a-11f0-9434-92fbcf53809c.png

force_turbo=0initial_turbo=10arm_boost=0

在沒有強制渦輪模式的情況下,使用了1.58As:

821790f2-091a-11f0-9434-92fbcf53809c.png

出于某種未知原因,禁用渦輪/增強模式也會反轉(zhuǎn)GPIO4的默認狀態(tài)(因此我在init.sh中切換了極性)。

減少時間

電流降低了約13%,這很有幫助,但仍有很長的路要走。

Pi在出現(xiàn)Linux控制臺上的第一行輸出之前需要8秒鐘(同時消耗約1As)。

幸運的是,有多種方法可以獲取有關(guān)這8秒鐘的更多信息。

調(diào)試啟動

在Raspberry Pi家族的啟動過程中,GPU首先初始化。

它與SD卡通信并查找bootcode.bin文件(Pi 4及更新版本使用EEPROM代替)。

我們可以修改此bootcode.bin以啟用詳細的UART日志記錄:

sed -i -e "s/BOOT_UART=0/BOOT_UART=1/" /boot/firmware/bootcode.bin

首先備份原始的bootcode.bin,因為此過程可能是破壞性的。

使用啟用的BOOT_UART重啟后,我們會獲得大量有用的信息:

Raspberry Pi BootcodeFound SD card, config.txt = 1, start.elf = 1, recovery.elf = 0, timeout = 0Read File: config.txt, 1322 (bytes)Raspberry Pi BootcodeRead File: config.txt, 1322Read File: start.elf, 2981376 (bytes)Read File: fixup.dat, 7303 (bytes)MESS000: brfs: File read: /mfs/sd/config.txtMESS000: brfs: File read: 1322 bytesMESS000: HDMI0:EDID error reading EDID block 0 attempt 0[..]MESS000: HDMI0:EDID error reading EDID block 0 attempt 9MESS000: HDMI0:EDID giving up on reading EDID block 0MESS000: brfs: File read: /mfs/sd/config.txtMESS000: gpioman: gpioman_get_pin_num: pin LEDS_PWR_OK not definedMESS000: gpioman: gpioman_get_pin_num: pin LEDS_PWR_OK not definedMESS000: *** Restart loggingMESS000: brfs: File read: 1322 bytesMESS000: hdmi: HDMI0:EDID error reading EDID block 0 attempt 0[..]MESS000: hdmi: HDMI0:EDID error reading EDID block 0 attempt 9MESS000: hdmi: HDMI0:EDID giving up on reading EDID block 0MESS000: hdmi: HDMI0:EDID error reading EDID block 0 attempt 0[..]MESS000: hdmi: HDMI0:EDID error reading EDID block 0 attempt 9MESS000: hdmi: HDMI0:EDID giving up on reading EDID block 0MESS000: hdmi: HDMI:hdmi_get_state is deprecated, use hdmi_get_display_state insteadMESS000: HDMI0: hdmi_pixel_encoding: 162000000MESS000: brfs: File read: /mfs/sd/initramfs8MESS000: Loaded 'initramfs8' to 0x0 size 0xb0898eMESS000: initramfs loaded to 0x1b4e7000 (size 0xb0898e)MESS000: dtb_file 'bcm2710-rpi-zero-2-w.dtb'MESS000: brfs: File read: 11569550 bytesMESS000: brfs: File read: /mfs/sd/bcm2710-rpi-zero-2-w.dtbMESS000: Loaded 'bcm2710-rpi-zero-2-w.dtb' to 0x100 size 0x8258MESS000: brfs: File read: 33368 bytesMESS000: brfs: File read: /mfs/sd/overlays/overlay_map.dtbMESS000: brfs: File read: 5255 bytesMESS000: brfs: File read: /mfs/sd/config.txtMESS000: dtparam: audio=onMESS000: brfs: File read: 1322 bytesMESS000: brfs: File read: /mfs/sd/overlays/vc4-kms-v3d.dtboMESS000: Loaded overlay 'vc4-kms-v3d'MESS000: dtparam: nohdmi=trueMESS000: dtparam: act_led_trigger=noneMESS000: dtparam: act_led_activelow=onMESS000: brfs: File read: 2760 bytesMESS000: brfs: File read: /mfs/sd/cmdline.txtMESS000: Read command line from file 'cmdline.txt':MESS000: 'console=serial0,115200 console=tty1 root=PARTUUID=26bbce6b-02 rootfstype=ext4 fsck.repair=yes rootwait cfg80211.ieee80211_regdom=DE init=/init.sh'MESS000: gpioman: gpioman_get_pin_num: pin EMMC_ENABLE not definedMESS000: brfs: File read: 146 bytesMESS000: brfs: File read: /mfs/sd/kernel8.imgMESS000: Loaded 'kernel8.img' to 0x200000 size 0x8d8bd7MESS000: Device tree loaded to 0x1b4de900 (size 0x8605)MESS000: uart: Set PL011 baud rate to 103448.300000 HzMESS000: uart: Baud rate change done...MESS000: uart: Baud rate[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]

禁用HDMI探測

在啟動過程中,引導(dǎo)加載程序會花費大量時間嘗試自動檢測可能連接的HDMI顯示器的視頻參數(shù)。然而,由于我們沒有HDMI(而且它已經(jīng)被禁用了),因此等待I2C響應(yīng)以獲取EDID(包括分辨率、幀率等信息)信息并不明智。

通過簡單地硬編碼一個EDID字符串,我們可以禁用任何探測:

# don't try to read HDMI eepromhdmi_blanking=2hdmi_ignore_edid=0xa5000080hdmi_ignore_cec_init=1hdmi_ignore_cec=1

禁用HAT、PoE和LCD探測

啟動過程還會嘗試檢測HAT上的I2C EEPROM,嘗試檢測需要風(fēng)扇的PoE HAT以及其他一些內(nèi)容。我們可以安全地禁用這些探測:

# all these options cause a wait for an I2C bus response, we don't need any of them, so let's disable them.force_eeprom_read=0disable_poe_fan=1ignore_lcd=1disable_touchscreen=1disable_fw_kms_setup=1

禁用攝像頭和顯示器探測

探測連接的MIPI攝像頭或顯示器也會花費一些時間。我們知道連接了哪個攝像頭(在這個案例中是HQ Camera,IMX477),因此我們可以硬編碼這個信息:

# no autodetection for anything (will wait for I2C answers)camera_auto_detect=0display_auto_detect=0# load HQ camera IMX477 sensor manuallydtoverlay=imx477

禁用initramfs

上述更改將(自報告的)啟動時間從5.38秒縮短到4.75秒。我們可以通過移除auto_initramfs=1來完全禁用initramfs,這取決于initramfs的大小,但可以將啟動時間縮短到4.47秒。

經(jīng)過測試,沒有顯著差異

盡管網(wǎng)上經(jīng)常推薦將SD外設(shè)超頻到100 MHz,但這在啟動性能上并沒有產(chǎn)生可測量的差異

# not recommended! data corruption risk!dtoverlay=sdtweak,overclock_50=100

而且,在高速下操作SD外設(shè)還存在數(shù)據(jù)損壞的風(fēng)險(在寫入訪問時),這在遠程物聯(lián)網(wǎng)設(shè)備中是非常不希望的。

內(nèi)核加載

此時,加載內(nèi)核是最慢的操作之一。

MESS000: Loaded 'kernel8.img' to 0x200000 size 0x8d8bd7MESS000: Device tree loaded to 0x1b4de900 (size 0x8605)

加載9276375字節(jié)大約需要1.54秒,即大約6 MiB/s的傳輸速度

內(nèi)核加載由GPU(使用其內(nèi)部的VideoCoreIV處理器)完成,這可能是加載代碼效率低下或使用了非常保守的設(shè)置。由于這是一個黑盒,我們無法直接操作寄存器或修改參數(shù)。

理論上,GPU處理器內(nèi)核超頻是可行的

# Overclock GPU VideoCore IV processor (not recommended!)core_freq_min=500core_freq=550

這確實減少了20%的內(nèi)核加載時間。但是帶來了未知的副作用(可靠性等。)

Buildroot/自定義內(nèi)核

是時候?qū)⑾到y(tǒng)從Raspbian/Debian遷移到自定義構(gòu)建的Buildroot發(fā)行版了(特別是為了獲取自定義內(nèi)核)。使用 buildroot 2024.02.1,我們配置了一個非常精簡的系統(tǒng)。原生的 aarch64 工具鏈,仍然使用完整的 glibc 和 Raspberry Pi 用戶區(qū)工具(如相機實用程序)。

8232d4a2-091a-11f0-9434-92fbcf53809c.png

內(nèi)核已配置:

  • 無聲音支持

  • 無大多數(shù)塊設(shè)備和文件系統(tǒng)驅(qū)動(除了SD/MMC和ext4)

  • 無RAID支持

  • 無USB支持

  • 無HID支持

  • 無DVB支持

  • 無視頻和幀緩沖支持(HDMI已被禁用)

  • 無高級網(wǎng)絡(luò)功能(隧道、橋接、防火墻等)

  • 未壓縮(不使用Gzip)

  • 模塊未壓縮(不使用Gzip)

測試表明,內(nèi)核和模塊均未壓縮可以帶來正的能量結(jié)果(即使GPU加載內(nèi)核時花費了更多時間)。Gzip解壓縮需要消耗大量能量(并且實際上涉及另一個重定位步驟)。

一個名為KASLR的安全功能也被禁用。

KASLR將內(nèi)核在內(nèi)存中的加載地址隨機化,使得編寫漏洞利用代碼更加困難(因為內(nèi)核的內(nèi)存位置是未知的)。這要求內(nèi)核在被GPU加載后重新定位。在我們的用例中,網(wǎng)絡(luò)攻擊面非常有限,所以可以禁用KASLR(反正所有應(yīng)用軟件都以root身份運行)。投機性執(zhí)行漏洞(如Spectre)的緩解也被禁用。

825e16f8-091a-11f0-9434-92fbcf53809c.png

最終的內(nèi)核大小為8.5兆字節(jié)(未壓縮),4.1兆字節(jié)壓縮為Gzip(這里沒有使用,只是為了比較)。最初的Raspbian內(nèi)核是25 MiB(未壓縮),8.9 MiB壓縮為Gzip

最終結(jié)果

827a06ec-091a-11f0-9434-92fbcf53809c.png

現(xiàn)在,我們可以在不到3.5秒的時間內(nèi)啟動到Linux用戶空間程序!

Linux內(nèi)核占用時間約為400毫秒(從引腳0到引腳1的差值)。總能耗為0.364 As * 5.0 V = 1.82 Ws,與原始Debian相比,能耗降低了5倍(原始Debian直到用戶空間需要9.5 Ws)。

降低輸入電壓

在發(fā)表這篇博文后,Graham Sutherland / Polynomial 指出,Pi Zero 中的調(diào)節(jié)器在5.0V輸入下效率不是很高。

這可能不適用于所有情況,但在我們的測試場景和成品中,我們可以將輸入電壓降至4.0V。

在5.0V下運行:

829ee5f2-091a-11f0-9434-92fbcf53809c.png

好好注意這里正在進行的單元。通過切換到4.0V(因為電流更高),mC(毫庫侖/毫安培秒)增加,但是總能量顯著降低!

350.94mAs * 5.0V = 1.754 Ws

在4.0V下運行:

82bd3d72-091a-11f0-9434-92fbcf53809c.png

390.77mAs * 4.0V = 1.563 Ws

我們可以更進一步:

在3.6V運行:

82fd3f30-091a-11f0-9434-92fbcf53809c.png

399.60mAs * 3.6V = 1.438 Ws

我們剛剛又降低了20%的能耗,這僅僅是通過在更理想的工作點操作開關(guān)模式調(diào)節(jié)器實現(xiàn)的!這當然需要進一步測試穩(wěn)定性/可靠性(因為這在技術(shù)上是不符合規(guī)格的),但這是一個非常令人印象深刻的結(jié)果。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 攝像頭
    +關(guān)注

    關(guān)注

    61

    文章

    4981

    瀏覽量

    98376
  • 樹莓派
    +關(guān)注

    關(guān)注

    121

    文章

    2009

    瀏覽量

    107472
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    樹莓如何安裝和啟動

    啟動樹莓1.按照上面的步驟上電后顯示器會有文字顯示如圖,如果顯示器沒有顯示,可能hdmi線或者轉(zhuǎn)接頭有問題,請檢查 2.正常會停在用戶和密碼登陸界面(系統(tǒng)是debian),請輸入用
    發(fā)表于 06-30 23:18

    跪求大神解決!樹莓啟動項怎么設(shè)置?。?/a>

    樹莓啟動項到底怎么設(shè)置?。课蚁氚裿ncserver設(shè)置為開機自啟動,不然每次都要輸入命令來啟動,要怎么設(shè)置???{:4:}{:4:}{:4
    發(fā)表于 08-29 10:53

    樹莓Zero小夜燈

    `找個自己喜歡的小燈(帶兩腳插頭),用樹莓zero做一個能用手機控制的小夜燈。其實如果用樹莓2
    發(fā)表于 01-28 15:03

    樹莓使用3.5寸屏幕教程

    把卡插入樹莓就可以使用了。沒有光驅(qū)的用戶,可用云盤下載§3.5inch RPi LCD (A)啟動鏡像-基于2016-05-27-raspbian-jessie-----------
    發(fā)表于 02-12 23:12

    樹莓zero wh坑分享

    樹莓型號:樹莓zero wh坑一:電源線按照網(wǎng)上的教程燒錄好SD卡,使用5v2a的電源,結(jié)果
    發(fā)表于 01-13 06:25

    請問一下樹莓Zero 2 W有哪些特性呢

    請問一下樹莓Zero 2 W有哪些特性呢?
    發(fā)表于 02-28 10:42

    如何實現(xiàn)樹莓zero w網(wǎng)絡(luò)穿透遠程跨網(wǎng)絡(luò)監(jiān)控功能呢

    如何對樹莓zero w攝像頭進行配置從而實現(xiàn)內(nèi)網(wǎng)監(jiān)控功能?如何實現(xiàn)樹莓
    發(fā)表于 03-01 06:00

    使用樹莓設(shè)計智能小車教程之樹莓小車啟動教程免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用樹莓設(shè)計智能小車教程之樹莓小車啟動教程免費下載。
    發(fā)表于 06-24 08:00 ?33次下載
    使用<b class='flag-5'>樹莓</b><b class='flag-5'>派</b>設(shè)計智能小車教程之<b class='flag-5'>樹莓</b><b class='flag-5'>派</b>小車<b class='flag-5'>啟動</b>教程免費下載

    樹莓的攝像頭應(yīng)該如何啟動詳細教程免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用樹莓設(shè)計智能小車的樹莓攝像頭應(yīng)該如何啟動詳細教程免費下載。
    發(fā)表于 06-24 08:00 ?9次下載

    微雪電子樹莓RPi Zero W介紹

    Raspberry Pi Zero W 樹莓Zero W 1GHZ CPU、低功耗藍牙4.1、
    的頭像 發(fā)表于 01-14 08:50 ?4768次閱讀
    微雪電子<b class='flag-5'>樹莓</b><b class='flag-5'>派</b>RPi <b class='flag-5'>Zero</b> <b class='flag-5'>W</b>介紹

    樹莓 Zero W的電路原理圖免費下載

    本文檔的主要內(nèi)容詳細介紹的是樹莓 Zero W的電路原理圖免費下載。
    發(fā)表于 12-24 17:58 ?118次下載
    <b class='flag-5'>樹莓</b><b class='flag-5'>派</b> <b class='flag-5'>Zero</b> <b class='flag-5'>W</b>的電路原理圖免費下載

    樹莓ZERO電源方案

    本文章針對樹莓zero在實際項目開發(fā)過程中,如果不能接USB數(shù)據(jù)線的情況下;電源管理方案;
    發(fā)表于 11-08 09:51 ?10次下載
    <b class='flag-5'>樹莓</b><b class='flag-5'>派</b><b class='flag-5'>ZERO</b>電源方案

    樹莓有史以來首次漲價

    關(guān)注+星標公眾號,不錯過精彩內(nèi)容參考來源 |DF創(chuàng)客社區(qū)最近,樹莓基金會發(fā)布了樹莓Zero的下一代:
    發(fā)表于 11-25 20:06 ?88次下載
    <b class='flag-5'>樹莓</b><b class='flag-5'>派</b>有史以來首次漲價

    樹莓 Zero 打造的智能漫游車!

    使用PXFMini和樹莓Zero打造您自己的自主漫游車。本項目所用組件硬件組件ErleRoboticsPXFmini×1樹莓
    的頭像 發(fā)表于 05-13 16:39 ?438次閱讀
    用 <b class='flag-5'>樹莓</b><b class='flag-5'>派</b> <b class='flag-5'>Zero</b> 打造的智能漫游車!

    樹莓 Zero 2 W 是開啟智能家居生活的理想之選!

    想嘗試智能家居自動化,又不想花費太多?樹莓Zero2W或許正是你開啟智能家居之旅所需的理想設(shè)備。小板子大潛力想打造一個智能家居?這想法超棒!一旦掌握了技巧,自動化控制燈光、插座、傳感器等設(shè)備,既有
    的頭像 發(fā)表于 06-24 16:24 ?201次閱讀
    <b class='flag-5'>樹莓</b><b class='flag-5'>派</b> <b class='flag-5'>Zero</b> <b class='flag-5'>2</b> <b class='flag-5'>W</b> 是開啟智能家居生活的理想之選!