樹莓派與嵌入式系統實驗報告

一、Linux 系統編譯工具鏈實踐:mininim 源碼編譯
  1. 虛擬機 Ubuntu 編譯流程

    • 環境配置問題
      編譯時遇到虛擬機無法聯網的情況,通過連接個人熱點解決(校園網限制導致無法訪問外部資源)。
      執行?./bootstrap?時報錯?gnulib-tool: command not found,因缺少 gnulib 工具和項目目錄結構不完整,通過?sudo apt install gnulib?解決。
      運行?./mininim?時提示動態庫缺失,安裝?liballegro5.2?和?liballegro-dev?解決。

    • 打包與遷移
      打包步驟包括復制可執行文件、游戲資源及依賴庫,通過?ldd?命令自動獲取依賴庫路徑,使用?cp -L?確保復制實際文件而非鏈接。
      啟動腳本?run_mininim.sh?通過設置?LD_LIBRARY_PATH?指向本地庫目錄,確保程序在目標機器獨立運行。

  2. 樹莓派編譯

? ? ? ? ? 換源配置
?將樹莓派軟件源替換為清華鏡像,適用于 Debian 12(bookworm)系統,提升下載速度。
配置:

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://security.debian.org/debian-security bookworm-security main contrib non-free

依賴管理
先通過?apt-get remove?清除舊版 allegro5 庫,再用?apt-get build-dep?自動檢測并安裝編譯依賴。
從 Gitee 下載 allegro5 v5.2.5 源碼,通過 CMake 配置編譯環境:

cd allegro5_v5.2.5/build
cmake ..
make
二、跨平臺開發:Android 交叉編譯與部署

環境準備

  • 安裝 Android NDK R25b,通過?adb shell getprop ro.product.cpu.abi?查看手機架構(如 aarch64)。
  • 配置交叉編譯工具鏈變量

編譯流程

  • 克隆 mininim 源碼后,通過?./bootstrap?生成配置腳本,指定 Android 目標架構:
./configure --host=aarch64-linux-android \
CC="$CC" AR="$AR" \
LUA_LIB="-L$LUA50_INSTALL/lib -llua50 -llualib50"
make -j$(nproc)
```  {insert\_element\_9\_}

部署與調試
使用 adb push 傳輸文件到手機 /data/local/tmp 目錄,通過 chmod +x 賦予執行權限。
若程序無法運行,檢查依賴庫是否完整或架構是否匹配(如手機為 ARM64 但編譯為 ARM32)。

三、樹莓派 GPIO 編程:流水燈實驗
  1. 硬件連接

    選用 BCM 編號 17、27、22、10、9、11 的 GPIO 引腳,搭配 GND 完成電路連接。? ? ? ? ?每個 GPIO 引腳通過電阻連接 LED 正極,負極接地,避免短路。
  2. 程序實現
import RPi.GPIO as GPIO
import timeLED_PINS = [17, 27, 22, 10, 9, 11]
DELAY = 0.3  # 秒級延時控制流水速度def setup():GPIO.setmode(GPIO.BCM)GPIO.setwarnings(False)for pin in LED_PINS:GPIO.setup(pin, GPIO.OUT)GPIO.output(pin, GPIO.LOW)  # 初始化為低電平def flow_animation():try:while True:for pin in LED_PINS:GPIO.output(pin, GPIO.HIGH)time.sleep(DELAY)GPIO.output(pin, GPIO.LOW)except KeyboardInterrupt:GPIO.cleanup()  # 釋放資源if __name__ == "__main__":setup()flow_animation()

運行與異常處理
執行 sudo python3 led_flow.py 啟動程序,通過 Ctrl+C 正常退出。
若提示引腳被占用,用 ps aux | grep led_flow.py 查看進程并終止。

四、技術總結與問題拓展
  1. 編譯工具鏈關鍵要點

    • 跨平臺編譯需嚴格匹配目標架構(如樹莓派 ARM、Android aarch64),通過?--host?參數指定。
    • 動態庫依賴管理是打包核心,ldd?+?cp -L?可自動收集所有依賴文件。
  2. GPIO 編程注意事項

    • 樹莓派 GPIO 引腳僅支持 3.3V 電平,避免直接連接 5V 設備以防燒毀。
    • 程序結束時必須調用?GPIO.cleanup(),否則可能導致引腳狀態鎖定。

備份樹莓派專用源:

sudo gedit /etc/apt/sources.list 
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free 
non-free-firmware 
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib 
nonfree 
non-free-firmware 
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib 
non-free non-free-firmware 
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main 
contrib non-free non-free-firmware 
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib 
non-free non-free-firmware 
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main 
contrib non-free non-free-firmware 
deb https://security.debian.org/debian-security bookworm-security main contrib 
non-free non-free-firmware 
deb-src https://security.debian.org/debian-security bookworm-security main 
contrib non-free non-free-firmware 
deb http://archive.debian.org/debian buster main contrib non-free 
deb-src http://archive.debian.org/debian buster main contrib non-free 
sudo apt-get update 

生成配置:
?

./bootstrap 
You may need to add #include directives for the following .h files. 
#include <getopt.h> 
#include <glob.h> 
#include <signal.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <strings.h> 
#include <sys/ioctl.h> 
#include <unistd.h> 
#include <wchar.h> 
#include "argp.h" 
#include "error.h" 
#include "fnmatch.h" 
#include "getpass.h" 
#include "nonblocking.h" 
#include "progname.h" 
#include "vasnprintf.h" 
#include "vasprintf.h" 
#include "xprintf.h" 
#include "xvasprintf.h" 
You may need to use the following Makefile variables when linking. 
Use them in <program>_LDADD when linking a program, or 
in <library>_a_LDFLAGS or <library>_la_LDFLAGS when linking a library. 
$(LTLIBINTL) when linking with libtool, $(LIBINTL) otherwise 
$(LTLIBTHREAD) when linking with libtool, $(LIBTHREAD) otherwise 
Don't forget to 
- add "gnulib/Makefile" to AC_CONFIG_FILES in ./configure.ac, 
- mention "gnulib" in SUBDIRS in Makefile.am, 
- mention "-I gnulib/m4" in ACLOCAL_AMFLAGS in Makefile.am, 
- invoke gl_EARLY in ./configure.ac, right after AC_PROG_CC, 
- invoke gl_INIT in ./configure.ac. 

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

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

相關文章

IDEA部署redis測試

新建springboot&#xff0c;項目改為&#xff1a;testredis E:\ideaproject\testredis\src\main\java\org\example\testredis\TestredisApplication.java 代碼為&#xff1a; package org.example.testredis;import org.springframework.boot.SpringApplication; import org.…

旅游服務禮儀實訓室:從歷史演進到未來創新的實踐探索

一、旅游服務禮儀實訓室的歷史演進&#xff1a;從禮制規范到職業化培養 旅游服務禮儀實訓室的建設并非一蹴而就&#xff0c;其發展歷程與人類對禮儀認知的深化及職業教育體系的完善密切相關。 1. 古代禮儀教育的萌芽 禮儀作為社會行為規范&#xff0c;最早可追溯至中國夏商周…

Could not find a declaration file for module ‘..XX‘.

1. 添加 Vue 聲明文件 如果您還沒有為 .vue 文件創建類型聲明&#xff0c;可以通過創建一個新的類型聲明文件來解決該問題。 步驟&#xff1a; 在您的項目根目錄下創建一個名為 shims-vue.d.ts 的文件&#xff08;您可以選擇其他名稱&#xff0c;但建議使用常見名稱以便于識…

OpenCV CUDA模塊設備層-----反正切(arctangent)函數atan()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 對輸入的 uchar1 像素值&#xff08;范圍 [0, 255]&#xff09;&#xff0c;先歸一化到 [0.0, 1.0] 浮點區間&#xff0c;然后計算其反正切值 at…

java中常見的排序算法設計介紹

排序算法 復雜度原地排序冒泡排序算法邏輯時間復雜度&#xff1a;最好O(n)&#xff0c;最壞和平均O(n^2)冒泡排序:穩定性算法 選擇排序算法邏輯時間復雜度&#xff1a;最好&#xff0c;最壞和平均都是O(n^2)選擇排序:不穩定性算法 插入排序算法邏輯時間復雜度&#xff1a;最好O…

深度學習系列81:MCP快速上手

MCP 是一種開放協議&#xff0c;通過標準化的服務器實現&#xff0c;使 AI 模型能夠安全地與本地和遠程資源進行交互。MCP 可幫助你在 LLM 之上構建智能代理和復雜的工作流。MCP 采用客戶端-服務器架構&#xff0c;主機應用程序可以連接到多個服務器。 這里用個demo展示一下如何…

【Python機器學習(一)】NumPy/Pandas手搓決策樹+使用Graphviz可視化(以西瓜書數據集為例)

下題來源于筆者學校的《模式識別與機器學習》課程的作業題,本文將通過使用NumPy處理數學運算,Pandas處理數據集,Graphviz實現決策樹可視化等Python庫來實現決策樹算法及其格式化。 導入用到的Python庫: import numpy as np import pandas as pd from graphviz import Digr…

react-activation 組件級緩存解決方案

文章目錄 一、KeepAlive 組件二、AliveScope 容器三、useAliveController Hook四、生命周期五、完整示例 react-activation 主要解決 React 項目中的「頁面緩存」需求(是第三方庫&#xff0c;非React 官方)&#xff0c;類似于 Vue 中的 <KeepAlive>&#xff1a; 功能說明…

CentOS 7內核升級方案

關于升級 CentOS 7 系統內核至 4.19 版本的可執行升級方案,可根據實際情況進行調整和完善,希望能對大家有所幫助: 一、升級背景與目的 隨著業務的發展和系統穩定性的要求,當前 CentOS 7 系統所使用的內核版本 3.10.0-1160.el7.x86_64 已經無法滿足部分新功能需求以及面臨…

樹莓派實驗實踐記錄與技術分析

一、內核驅動開發&#xff1a;hello 模塊實現 驅動程序代碼 #include <linux/init.h> #include <linux/module.h> static int __init hello_init(void) { printk(KERN_INFO "hello kernel\n"); return 0; } module_init(hello_init); static void …

【秦九紹算法】小紅的 gcd

題目 牛客網&#xff1a;小紅的 gcd 題目分析 我們知道&#xff0c;求gcd就用歐幾里得算法&#xff08;輾轉相除法&#xff09;&#xff1a;gcd(a,b)gcd(b,a mod b)。但是這題的a非常大&#xff0c;最大是一個1e6位數&#xff0c;無法使用任何數據類型存儲。如果使用高精度…

AWS服務監控之EC2內存監控

首先在IAM里找到角色&#xff0c;創建角色&#xff0c;選擇EC2 然后在被監控的機器上安裝cloudwatch-agent 官方鏈接在本地服務器上安裝 CloudWatch 代理 - Amazon CloudWatch wget https://s3.amazonaws.com/amazoncloudwatch-agent/redhat/amd64/latest/amazon-cloudwatch-a…

鴻蒙 ArkWeb 和 H5混編開發

ArkWeb Web 相關標準技術(HTML/CSS/JS)&#xff0c;是業內支持性最廣泛的技術&#xff0c;可以在最廣泛的平臺下實現“一次編寫到處運行”&#xff1b;大部分對性能無需極致要求的應用頁面&#xff0c;都可以使用 Web 技術來實現。 鴻蒙 ArkWeb Kit&#xff08;方舟 Web&…

設計模式-迪米特法則(Law of Demeter, LoD)

迪米特法則&#xff08;Law of Demeter, LoD&#xff09; 別名&#xff1a;最少知識原則&#xff08;Least Knowledge Principle&#xff09; 核心思想&#xff1a;一個對象應盡可能少地與其他對象發生交互&#xff0c;只與直接的朋友&#xff08;成員變量、方法參數、方法返回…

python獲取AB直線間任意一點經緯度

獲取AB直線間任意一點經緯度 1、目標 已知A點經緯度,距離;B點經緯度,距離,如果C點在AB之間,且知道C點距離,求C點的經緯度信息。 目標:在AB這條直線上,根據給定的距離(從A點開始沿直線到某點的距離)來求該點的經緯度。 2、方法 首先計算AB的總長度(大圓距離),…

Android實戰——系統字體庫加載流程

Android 系統字體庫指的是在Android設備上用于顯示文本的字體集合。隨著Android系統的更新,其對字體的支持也日益增強,允許開發者和用戶更靈活地定制界面文字顯示。 一、字體庫介紹 1、字體庫文件 字體庫文件是指存儲字體數據的文件,這些文件包含了創建文本字符所需的所有…

嵌入式樂鑫音頻項目“無聲”問題深度調試復盤與方法論總結

前言&#xff1a;一場典型的“工程師尋蹤之旅” 本次調試始于一個看似簡單卻極其頑固的問題&#xff1a;在一個基于樂鑫ESP-ADF&#xff08;音頻開發框架&#xff09;的DuerOS示例項目中&#xff0c;移植到M5Stack ATOMIC Echo Base硬件上后&#xff0c;程序能夠成功編譯、燒錄…

地下安全防線:電纜通道防外破地釘如何守護城市隱形生命線

在繁華都市的柏油馬路之下、在靜謐鄉村的泥土深處&#xff0c;縱橫交錯的地下管線如同城市與鄉村的 “隱形生命線”&#xff0c;承載著電力輸送、供水供氣、通信傳輸等重要功能&#xff0c;默默維系著現代社會的正常運轉。然而&#xff0c;這條 “生命線” 正面臨著諸多潛在威脅…

linux時間同步方案

yum install chrony -y # 配置 chrony 使用國內服務器 sed -i s/^pool.*pool.ntp.org/#&/ /etc/chrony.conf cat >> /etc/chrony.conf <<EOF server ntp.aliyun.com iburst server ntp.tencent.com iburst server ntp.ntsc.ac.cn iburst server time1.cloud.t…

C語言筆記(鵬哥)上課板書+課件匯總(KMP算法的動態規劃簡易處理+字符函數和字符串函數)

一、目錄 kmp動態規劃簡易處理next數組字符函數與字符串函數 一、目錄二、引言C語?標準庫中提供了?系列庫函數 三、字符分類函數&#xff08;字符相關的函數&#xff09;推薦一個網站 四、字符轉換函數&#xff08;字符相關的函數&#xff09;五、strlen&#xff08;字符串相…