在 Ubuntu 20.04 中使用 init.d 或者systemd實現開機自動執行腳本

Ubuntu 20 默認使用的是 systemd 系統管理器,但傳統的 SysV Init/etc/init.d/)腳本依然兼容并可用。本文將介紹如何通過 init.d 寫腳本來在開機時自動設置某個 GPIO(如 GPIO407)為高電平,適用于嵌入式系統、開發板等場景。


一、為什么選擇 init.d

雖然 systemd 是推薦方式,但對于一些老舊項目或驅動初始化問題,用 init.d 更加直觀、簡單,并且在某些設備初始化順序依賴場景下依然非常實用。


二、創建并配置 init.d 腳本

1. 創建腳本

 

bash

復制編輯

sudo nano /etc/init.d/gpio407_init

2. 腳本內容如下:

 

bash

復制編輯

#!/bin/sh ### BEGIN INIT INFO # Provides: gpio407_init # Required-Start: $local_fs # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: # Short-Description: Set GPIO407 high at boot ### END INIT INFO GPIO=407 case "$1" in start) echo "Exporting GPIO$GPIO and setting it HIGH..." if [ ! -e /sys/class/gpio/gpio$GPIO ]; then echo $GPIO > /sys/class/gpio/export sleep 0.1 fi echo out > /sys/class/gpio/gpio$GPIO/direction echo 1 > /sys/class/gpio/gpio$GPIO/value echo "GPIO$GPIO set to HIGH" ;; stop) echo $GPIO > /sys/class/gpio/unexport ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac exit 0


三、賦予腳本執行權限

 

bash

復制編輯

sudo chmod +x /etc/init.d/gpio407_init


四、注冊為啟動服務

將腳本注冊到系統默認啟動級別:

 

bash

復制編輯

sudo update-rc.d gpio407_init defaults

這會在 /etc/rc2.d/rc3.d/rc4.d/rc5.d/ 中創建符號鏈接,實現開機執行。


五、立即運行測試

你可以直接運行腳本驗證功能是否正確:

 

bash

復制編輯

sudo /etc/init.d/gpio407_init start

驗證:

 

bash

復制編輯

cat /sys/class/gpio/gpio407/value # 應輸出 1


六、注意事項

  • 權限問題:腳本執行的所有 echo > /sys/... 操作必須使用 root 權限,直接用 sudo 執行整個腳本,不要對單獨的 echo 使用 sudo,否則會因 shell 權限問題失敗。

  • 腳本調試:可以在腳本中加入日志輸出,例如 echo "xxx" >> /var/log/gpio.log 方便調試。

  • GPIO不可導出:如果 /sys/class/gpio/export 不存在,可能是內核不支持 GPIO sysfs 接口,需要啟用相關內核選項。


七、其他:如何禁用腳本

如果不再需要該腳本,可以移除注冊:

 

bash

復制編輯

sudo update-rc.d -f gpio407_init remove

然后手動刪除腳本:

 

bash

復制編輯

sudo rm /etc/init.d/gpio407_init


八、總結

盡管 Ubuntu 20 已默認使用 systemd,但 init.d 腳本依然兼容且適用嵌入式控制、GPIO 操作等早期初始化需求。按照本文方法配置,可以輕松實現開機自動執行。

如需改為 systemd 方式,歡迎繼續閱讀或留言,我可以幫你轉換為 .service 文件。

在 Ubuntu 20.04 中使用 systemd 實現 GPIO 上電(以 GPIO407 為例)

對于嵌入式 Linux 系統或開發板平臺,我們常常需要在開機時自動設置 GPIO 引腳方向及電平。使用 systemd 編寫自定義 .service 文件是一種推薦方式。


一、前提條件

  • 你必須有 root 權限

  • 目標 GPIO(如 GPIO407)可通過 /sys/class/gpio/ 接口操作。

  • Kernel 配置項開啟了 CONFIG_GPIO_SYSFS


二、編寫設置 GPIO 的腳本

1. 創建腳本文件

 

bash

復制編輯

sudo nano /usr/local/bin/gpio407_set_high.sh

2. 填寫內容如下:

 

bash

復制編輯

#!/bin/bash GPIO=407 # Export GPIO if not already exported if [ ! -d "/sys/class/gpio/gpio$GPIO" ]; then echo $GPIO > /sys/class/gpio/export sleep 0.1 fi # 設置方向為輸出,并拉高 echo out > /sys/class/gpio/gpio$GPIO/direction echo 1 > /sys/class/gpio/gpio$GPIO/value

3. 設置腳本權限

 

bash

復制編輯

sudo chmod +x /usr/local/bin/gpio407_set_high.sh


三、創建 systemd 服務文件

1. 創建服務文件

 

bash

復制編輯

sudo nano /etc/systemd/system/gpio407.service

2. 內容如下:

 

ini

復制編輯

[Unit] Description=Set GPIO407 High at boot After=multi-user.target [Service] Type=oneshot ExecStart=/usr/local/bin/gpio407_set_high.sh RemainAfterExit=true [Install] WantedBy=multi-user.target

說明:

  • Type=oneshot 表示只執行一次,不常駐。

  • RemainAfterExit=true 保留“已啟動”狀態。

  • WantedBy=multi-user.target 表示在正常系統運行級別啟動。


四、啟用服務并重啟

啟用服務

 

bash

復制編輯

sudo systemctl enable gpio407.service

立即啟動(測試)

 

bash

復制編輯

sudo systemctl start gpio407.service

查看狀態

 

bash

復制編輯

sudo systemctl status gpio407.service


五、驗證 GPIO 是否設置成功

 

bash

復制編輯

cat /sys/class/gpio/gpio407/value # 應該輸出 1


六、卸載或禁用服務

如不再需要:

 

bash

復制編輯

sudo systemctl disable gpio407.service sudo rm /etc/systemd/system/gpio407.service sudo rm /usr/local/bin/gpio407_set_high.sh


七、與 init.d 的比較

項目init.dsystemd
兼容性兼容但過時推薦使用
并發支持
狀態管理簡單細致、支持依賴
日志需手動自動記錄(journalctl


八、結語

使用 systemd 管理 GPIO 初始化是一種現代、清晰、可靠的方式,特別適合在需要嚴格控制啟動順序、可靠運行的環境中。建議優先采用這種方式進行嵌入式系統自啟動腳本部署。

如果你還需要同時配置多個 GPIO 或串口、電源等資源,也可以在腳本中統一處理,systemd 會一次完成初始化。

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

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

相關文章

蘋果的人工智能領域慢熱

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎?訂閱我們的簡報,深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同,從行業內部的深度分析和實用指南中受益。不要錯過這個機會,成為AI領…

FastAPI使用@app.get/@app.post等裝飾器注冊路由無效404 Not Found

(一)問題描述 使用app.get注冊路由,前端發送請求訪問路徑和路由一致,但一直顯示404 Not Found,檢查了好幾遍,確認沒有訪問路徑不一致的問題。 在Swagger文檔里查看,也沒有找到這個新添加的接口。…

制作我的計算器

1. 界面布局 新建項目 MyCalculator,開始布局。 2. 靜態布局 代碼如下: // etc/pages/Index.ets Entry Component struct Index {build() {Column() {/*** 運算區*/Column() {TextInput({ text: 12x13 }).height(100%).fontSize(32).enabled(false).f…

2025-5-17Vue3快速上手

1、ref對比reactive 區別第2點:本質是指針指向問題 整體修改reactive的數據時,有坑 使用原則需要根據項目原本的代碼靈活參考 如果要更新的數據是從服務器獲取回來的,用Object.assign是好方法,需要注意的是:Object.a…

深度學習---模型預熱(Model Warm-Up)

一、基本概念與核心定義 模型預熱是指在機器學習模型正式訓練或推理前,通過特定技術手段使模型參數、計算圖或運行環境提前進入穩定狀態的過程。其本質是通過預處理操作降低初始階段的不穩定性,從而提升后續任務的效率、精度或性能。 核心目標&#xf…

加載渲染geojson數據

本節我們學習如何在cesium中加載geojson數據 想要加載geojson數據首先要有數據源,我們以中國地圖為例 復制數據的geo api 在cesium的官網庫中查詢 可以看到如何在cesium中導入數據的方法 //加載geojson數據let dataGeo Cesium.GeoJsonDataSource.load("https://geo.dat…

python:pymysql概念、基本操作和注入問題講解

python:pymysql分享目錄 一、概念二、數據準備三、安裝pymysql四、pymysql使用(一)使用步驟(二)查詢操作(三)增(四)改(五)刪 五、關于pymysql注入…

職坐標AIoT技能培訓課程實戰解析

職坐標AIoT技能培訓課程以人工智能與物聯網技術深度融合為核心,構建了“理論實戰行業應用”三位一體的教學體系。課程體系覆蓋Python編程基礎、傳感器數據采集、邊緣計算開發、云端服務部署及智能硬件開發全鏈路,通過分層遞進的知識模塊幫助學員建立系統…

MySQL 用戶權限管理:從入門到精通

在當今數據驅動的時代,數據庫安全已成為企業信息安全體系的核心組成部分。作為最流行的開源關系型數據庫之一,MySQL 的用戶權限管理系統提供了強大而靈活的訪問控制機制。本文將全面解析 MySQL 用戶權限管理的各個方面,幫助數據庫管理員和開發…

Java常見API文檔(下)

格式化的時間形式的常用模式對應關系如下: 空參構造創造simdateformate對象,默認格式 練習.按照指定格式展示 package kl002;import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date;public class Date3 {publi…

博圖1200硬件組態與啟保停程序編寫步驟詳解

一、前言 在工業自動化控制領域,西門子S7-1200 PLC因其性能穩定、編程靈活而廣受歡迎。本文將詳細介紹使用TIA Portal(博圖)軟件進行S7-1200 PLC硬件組態以及編寫基本啟保停程序的完整步驟,幫助初學者快速掌握這一基礎而重要的技…

AutoMouser - 單次AI調用鑄就高效自動化腳本

你是否厭倦了反復點點點的枯燥操作?是否希望像科幻電影那樣,一句指令,萬事搞定?如果告訴你,現在只需要一次AI調用,就能自動執行一整套鼠標腳本操作,你會不會覺得:自動化的時代&#…

雙周報Vol.72:字段級文檔注釋支持、視圖類型現為值類型,減少內存分配

雙周報Vol.72:字段級文檔注釋支持、視圖類型現為值類型,減少內存分配 更新目錄 ..調用鏈末尾自動丟棄值語義變更字段級文檔注釋支持視圖類型現為值類型,減少內存分配特效函數調用現支持樣式高亮實驗性支持虛擬包,接口與實現解耦 …

OceanBase 開發者大會:詳解 Data × AI 戰略,數據庫一體化架構再升級

OceanBase 2025 開發者大會與5月17日在廣州舉行。這是繼 4 月底 OceanBase CEO 楊冰宣布公司全面進入AI 時代后的首場技術盛會。會上,OceanBase CTO 楊傳輝系統性地闡述了公司的 DataAI 戰略,并發布了三大產品:PowerRAG、共享存儲&#xff0c…

大小端模式和消息的加密解密

大小端模式 知識點一 什么是大小端模式 // 大端模式 // 是指數據的高字節保存在內存的低地址中 // 而數據的低字節保存在內存的高地址中 // 這樣的存儲模式有點兒類似于把數據當作字符串順序處理 // 地址由小向大增加,數據從高位往低位放 …

WebRTC技術EasyRTC嵌入式音視頻通信SDK助力智能電視搭建沉浸式實時音視頻交互

一、方案概述? EasyRTC是一款基于WebRTC技術的開源實時音視頻通信解決方案,具備低延遲、高畫質、跨平臺等優勢。將EasyRTC功能應用于智能電視,能夠為用戶帶來全新的交互體驗,滿足智能電視在家庭娛樂、遠程教育、遠程辦公、遠程醫療等多種場…

Supermemory:讓大模型擁有“長效記憶“

目錄 引言:打破大語言模型的記憶瓶頸,迎接AI交互新范式 一、Supermemory 核心技術 1.1 透明代理機制 1.2 智能分段與檢索系統 1.3 自動Token管理 二、易用性 三、性能與成本 四、可靠性與兼容性 五、為何選擇 Supermemory? 六、對…

2025.5.17總結

周六上了一天的課,從早上9:30至下午6:30,在這個過程中,確實也收獲了不少。 1.結識了更多的大佬和不同職業的精英。 一個在某科技公司做開發的主管甘阿碰,當我聽到科技公司,還以為是公司里的一…

語音識別——通過PyAudio錄入音頻

PyAudio 是一個用于處理音頻的 Python 庫,它提供了錄制和播放音頻的功能。通過 PyAudio,可以輕松地從麥克風或其他音頻輸入設備錄制音頻,并將其保存為文件或進行進一步處理。 安裝 PyAudio 在使用 PyAudio 之前,需要先安裝它。可…

python打卡day30

模塊和庫的導入 知識點回顧: 導入官方庫的三種手段導入自定義庫/模塊的方式導入庫/模塊的核心邏輯:找到根目錄(python解釋器的目錄和終端的目錄不一致) 作業:自己新建幾個不同路徑文件嘗試下如何導入 python的學習就像…