Yocto + 樹莓派攝像頭驅動完整指南

—— 從驅動配置、Yocto 構建,到 OpenCV 實戰

在樹莓派上運行攝像頭,在官方的 Raspberry Pi OS 可能很簡單,但在 Yocto 項目中,需要手動配置驅動、設備樹、軟件依賴 才能確保攝像頭正常工作。本篇文章從 BSP 驅動配置Yocto 關鍵配置OpenCV 實戰 講解如何 讓樹莓派攝像頭在 Yocto 鏡像中正常運行,并最終在 屏幕上實時顯示畫面


1?? Yocto 關鍵知識點

在 Yocto 項目中,攝像頭的支持依賴:

📌 關鍵點

  1. BSP(Board Support Package)配置

    • 設備樹(Device Tree)確保攝像頭硬件被正確注冊
    • config.txt 配置 GPU、攝像頭固件
  2. 內核(Kernel)驅動

    • bcm2835-v4l2 模塊:用于支持 V4L2 攝像頭設備
    • libcamera:現代化的攝像頭用戶空間 API
    • v4l-utils:V4L2 設備管理工具
  3. 鏡像構建(Yocto Bitbake)

    • IMAGE_INSTALL 確保安裝 libcameraffmpegopencv
    • IMAGE_FEATURES 使系統支持 GUI 顯示
    • systemd 啟動腳本 讓攝像頭 開機自動運行
  4. 用戶空間(User Space)

    • ffmpeg 錄制視頻
    • v4l2-ctl 進行攝像頭測試
    • OpenCV 進行實時圖像處理

2?? 驅動配置:設備樹 & 內核

📌 2.1 設備樹(Device Tree)配置

樹莓派的攝像頭使用 MIPI CSI-2 接口,在設備樹中需要正確注冊。

修改 Yocto BSP config.txt,確保系統啟用攝像頭:

# 讓系統自動檢測攝像頭
camera_auto_detect=1
# 啟用 VC4-KMS 顯示驅動,支持 `libcamera`
dtoverlay=vc4-kms-v3d
# 啟用攝像頭固件支持
start_x=1
# GPU 預留 128MB 內存(攝像頭和 GUI 需要)
gpu_mem=128

🔹 關鍵點

  • camera_auto_detect=1 讓樹莓派 自動檢測攝像頭
  • dtoverlay=vc4-kms-v3dlibcameraffmpeg 可以正確訪問攝像頭
  • start_x=1 讓 GPU 能夠處理 ISP(圖像信號處理)

📌 2.2 加載攝像頭驅動

在 Yocto 里,攝像頭驅動需要手動加載

modprobe bcm2835_v4l2

確保 bcm2835_v4l2 被自動加載

echo "bcm2835_v4l2" >> /etc/modules

🔹 驅動解釋

  • bcm2835-v4l2樹莓派的 V4L2(Video4Linux)驅動
  • /dev/video0 設備正確生成
  • libcamera 需要 vc4-kms-v3dbcm2835-v4l2 才能正常工作

3?? Yocto 鏡像配置

為了讓 Yocto 鏡像包含攝像頭所需的軟件,修改 rpi-test-image.bb

# 繼承 rpi-test-image
include recipes-core/images/rpi-test-image.bb# 添加 SSH 服務器,方便遠程調試
IMAGE_INSTALL:append = " openssh openssh-sftp-server"# 啟用 X11 圖形界面支持
IMAGE_FEATURES += "x11-base x11-sato splash"# 安裝攝像頭相關軟件
IMAGE_INSTALL += " libcamera libcamera-apps v4l-utils"# 安裝 ffmpeg 和 OpenCV
IMAGE_INSTALL  += " ffmpeg opencv opencv-apps python3-opencv"

🔹 關鍵點

  • libcamera 用于攝像頭 API
  • v4l-utilsv4l2-ctl 可以測試攝像頭
  • opencv 用于 Python 處理攝像頭畫面
  • ffmpeg 讓攝像頭 支持錄制視頻

4?? 編譯 Yocto 鏡像

完成配置后,運行:

bitbake core-image-sato

然后刷寫到 SD 卡:

dd if=tmp/deploy/images/raspberrypi4-64/core-image-sato-raspberrypi4-64.wic of=/dev/sdX bs=4M status=progress

5?? 攝像頭驅動調試

📌 5.1 確保 /dev/video0 存在

ls /dev/video*

如果 /dev/video0 不存在,手動加載驅動:

modprobe bcm2835_v4l2

📌 5.2 使用 v4l2-ctl 測試攝像頭

v4l2-ctl --list-devices

如果攝像頭已檢測到,運行:

v4l2-ctl --stream-mmap --stream-count=100 -d /dev/video0

6?? 實戰:運行 OpenCV 進行攝像頭實時顯示

運行以下 Python 代碼:

import cv2cap = cv2.VideoCapture(0)while True:ret, frame = cap.read()if not ret:breakcv2.imshow("攝像頭", frame)if cv2.waitKey(1) & 0xFF == ord('q'):  # 按 'q' 退出breakcap.release()
cv2.destroyAllWindows()

🎥 成功運行后,攝像頭畫面會在屏幕上實時顯示!


7?? 其他攝像頭應用

📸 7.1 使用 ffmpeg 拍照

ffmpeg -f v4l2 -video_size 1280x720 -i /dev/video0 -vframes 1 snapshot.jpg

🎥 7.2 錄制視頻

ffmpeg -f v4l2 -framerate 30 -video_size 1280x720 -i /dev/video0 -t 10 output.mp4

📡 7.3 實時推流

ffmpeg -f v4l2 -i /dev/video0 -f mpegts udp://192.168.1.100:1234

在 VLC 中打開:

udp://@192.168.1.100:1234

8?? 結果展示

最終,攝像頭成功運行,并在屏幕上實時顯示:
在這里插入圖片描述


🎯 結論

本篇文章完整講解了 如何在 Yocto 項目中配置樹莓派攝像頭

  1. BSP 設備樹配置
  2. 內核驅動 bcm2835-v4l2 加載
  3. Yocto 鏡像構建
  4. v4l2-ctl & ffmpeg 測試
  5. OpenCV 實戰
  6. 流媒體推送

? 關鍵命令總結

任務命令
檢查 /dev/video0ls /dev/video*
測試 v4l2-ctlv4l2-ctl --list-devices
拍照ffmpeg -f v4l2 -i /dev/video0 -vframes 1 snapshot.jpg
錄制視頻ffmpeg -f v4l2 -i /dev/video0 -t 10 output.mp4
實時顯示(OpenCV)python3 script.py

🎯 如果你對 Yocto BSP、攝像頭調試有任何問題,歡迎交流!🚀

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/72439.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72439.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/72439.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TCP協議(20250304)

1. TCP TCP: 傳輸控制協議(Transmission Control Protocol),傳輸層協議之一(TCP,UDP) 2. TCP與UDP UDP(用戶數據報協議) 面向數據報無連接不安全不可靠(盡最大努力交…

NModbus 連接到Modbus服務器(Modbus TCP)

1、在項目中通過NuGet添加NModbus,在界面中添加一個Button。 using NModbus.Device; using NModbus; using System.Net.Sockets; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Docu…

【零基礎到精通Java合集】第十八集:多線程與并發編程-線程池與Callable/Future應用

課程標題:線程池與Callable/Future應用(15分鐘) 目標:掌握線程池的創建與管理,理解Callable任務與Future異步結果處理機制 0-1分鐘:課程引入與線程池意義 以“銀行窗口服務”類比線程池:復用固定資源(柜員)處理多任務(客戶)。說明線程池的核心價值——避免頻繁創建…

【leetcode hot 100 238】除自身以外數組的乘積

解法一:(左右乘積列表)利用索引左側所有數字的乘積和右側所有數字的乘積(即前綴與后綴)相乘得到答案。 class Solution {public int[] productExceptSelf(int[] nums) {int len nums.length;int[] L new int[len]; …

BUU44 [BJDCTF2020]ZJCTF,不過如此1 [php://filter][正則表達式get輸入數據][捕獲組反向引用][php中單雙引號]

題目: 我仿佛見到了一位故人。。。也難怪,題目就是ZJCTF 按要求提交/?textdata://,I have a dream&filenext.php后: ......不太行,好像得用filephp://filter/convert.base64-encode/resourcenext.php 耶?那 f…

[Web 安全] PHP 反序列化漏洞 —— POP 鏈構造思路

關注這個專欄的其他相關筆記:[Web 安全] 反序列化漏洞 - 學習筆記-CSDN博客 0x01:什么是 POP 鏈? POP 鏈(Payload On Purpose Chain)是一種利用 PHP 中的魔法方法進行多次跳轉以獲取敏感數據的技術。它通常出現在 CTF…

擴散語言模型:從圖像生成到文本創造的范式躍遷

近年來,擴散模型(Diffusion Models)在人工智能領域異軍突起,尤其在圖像生成任務中取得了令人矚目的成就,如 Stable Diffusion 等模型已成為生成高質量圖像的標桿。這種成功激發了研究者們的好奇心:擴散模型的魔力能否從視覺領域延伸至自然語言處理(NLP),為文本生成帶來…

大模型工程師學習日記(十):基于 LangChain 構建向量存儲和查詢 Qdrant

Qdrant介紹 Qdrant(讀作:quadrant /kwɑdr?nt/ n. 象限;象限儀;四分之一圓)是一個向量相似度搜索引擎。它提供了一個生產就緒的服務,具有方便的 API 來存儲、搜索和管理點 - 帶有附加載荷的向量。Qdrant專…

DeepSeek 助力 Vue3 開發:打造絲滑的網格布局(Grid Layout)

前言:哈嘍,大家好,今天給大家分享一篇文章!并提供具體代碼幫助大家深入理解,徹底掌握!創作不易,如果能幫助到大家或者給大家一些靈感和啟發,歡迎收藏關注哦 💕 目錄 Deep…

deepseek、騰訊元寶deepseek R1、百度deepseekR1關系

分析與結論 區別與聯系 技術基礎與定制方向: DeepSeek官網R1版本:作為基礎版本,通常保留通用性設計,適用于廣泛的AI應用場景(如自然語言處理、數據分析等)。其優勢在于技術原生性和官方直接支持。騰訊元寶…

外貿獨立站使用wordpress模板與定制哪個SEO效果好

使用WordPress模板搭建的外貿獨立站與定制站的SEO效果,可以從以下幾個方面進行分析: 1. 內容質量是SEO的核心 內容質量確實是SEO的關鍵,無論使用模板還是定制開發,優質、相關、原創的內容都是提升排名的基礎。內容能夠解決用戶問…

Golang語法特性總結

1.認識Golang代碼特性 package main //1.包含main函數的文件就是一個main包--當前程序的包名// import "fmt" // import "time" import("fmt""time" )//3.同時包含多個包 4.強制代碼風格:函數的 { 一定和函數名在同一行,否…

AI賦能校園安全:科技助力預防與應對校園霸凌

校園本應是學生快樂學習、健康成長的地方,然而,校園霸凌卻成為威脅學生身心健康的隱形“毒瘤”。近年來,隨著人工智能(AI)技術的快速發展,AI在校園安全領域的應用逐漸成為解決校園霸凌問題的新突破口。通過…

易語言模擬真人鼠標軌跡算法 - 防止游戲檢測

一.簡介 鼠標軌跡算法是一種模擬人類鼠標操作的程序,它能夠模擬出自然而真實的鼠標移動路徑。 鼠標軌跡算法的底層實現采用C/C語言,原因在于C/C提供了高性能的執行能力和直接訪問操作系統底層資源的能力。 鼠標軌跡算法具有以下優勢: 模擬…

運營商三要素API:構建安全信任的橋梁

引言 在數字經濟時代,身份驗證已成為各類業務場景的基礎需求。運營商三要素API作為一種高效的身份核驗工具,通過對接運營商數據,實現對用戶姓名、身份證號碼、手機號碼三項關鍵信息的實時校驗,為各行業提供可靠的身份認證解決方案…

Spring Boot 與 MyBatis 版本兼容性

初接觸Spring Boot,本次使用Spring Boot版本為3.4.3,mybatis的起步依賴版本為3.0.0,在啟動時報錯,報錯代碼如下 org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name userMapper…

GCN從理論到實踐——基于PyTorch的圖卷積網絡層實現

Hi,大家好,我是半畝花海。圖卷積網絡(Graph Convolutional Network, GCN)是一種處理圖結構數據的深度學習模型。它通過聚合鄰居節點的信息來更新每個節點的特征表示,廣泛應用于社交網絡分析、推薦系統和生物信息學等領…

MyBatis-Plus 邏輯刪除實現

在很多企業級應用中,數據刪除操作通常采用 邏輯刪除 的方式,而不是物理刪除。邏輯刪除指的是通過更新字段(例如 is_deleted 或 status)來標記數據為刪除狀態,而不是真的從數據庫中刪除記錄。這樣做的好處是保留數據的歷…

STM32_IIC外設工作流程

STM32 IC 外設工作流程(基于寄存器) 在 STM32 中,IC 通信主要通過一系列寄存器控制。理解這些寄存器的作用,能夠幫助我們掌握 IC 硬件的運行機制,實現高效的數據傳輸。本文以 STM32F1(如 STM32F103&#x…

集合遍歷的多種方式

目錄 1.增強for 2.迭代器(在遍歷的過程中需要刪除元素,請使用迭代器) 3.雙列集合 4.Lambda表達式(forEach方法) 1.單列集合: 2.雙列集合: 4.Stream 流 5.普通for循環 6.列表迭代器 7.總結 1.增強for 注&…