OKMX8MQ-C開發板如何通過Systemd服務實現應用自啟

原創 2021-04-23 10:52:00 i.MX8M 飛凌嵌入式 i.MX8MQ

 飛凌i.MX8MQ平臺 


經過之前文章的介紹我們已經了解到OKMX8MQ-C開發板是基于ARM?Cortex-A53和Cortex-M4的內核,具有業界領先的音頻、語音和視頻處理功能。適用于5G終端、邊緣計算網關HMI、V2X、RSU加油機血液分析儀、PCR、瘦主機等產品應用,以及醫療電力、工業自動化、智慧交通環境監測、智慧水務、能耗管理等行業應用

這次我們就來介紹一下如何通過systemd服務實現音頻應用的自啟。



什么是Systemd服務


Systemd是Linux下的一種init軟件,由Lennart Poettering帶頭開發,并在LGPL 2.1及其后續版本許可證下開源發布。其開發目標是提供更優秀的框架以表示系統服務間的依賴關系,并以此實現系統初始化時,服務的并行啟動,同時達到降低Shell系統開銷的效果,最終代替現在常用的System V與BSD風格的init程序。傳統的啟動是內核啟動完成后,首先執行的第一個進程是/sbin/init。如果要以systemd方式啟動,首先讓內核執行的第一個程序則是/lib/systemd/system或/usr/lib/systemdsystemd。


啟動后,首先會去三個目錄下找相應的配置文件,按優先級從高到底分別為


/etc/systemd/ /usr/lib/systemd/ /lib/systemd/

優先級高的配置文件會覆蓋優先級低的配置文件。



Systemd自啟應用


在此,小編介紹一種使用systemd方式來配置任意開機自啟動程序的方法。

為了方便用戶測試,小編在系統啟動默認加載systemd服務autorun.service。

在/lib/systemd/system/autorun.sevice可以看到配置文件如下:



用戶可以將自己的開機自啟應用程序放到腳本/etc/autorun.sh 中,從而實現開機自啟。


 常見參數解析:


[unit]區塊

Description 參數代表服務的描述(會在開機終端中打印)

Documentation: 文檔地址


After參數表示在等號后邊的服務起來以后再執行此服務,可以添加想要放在此服務之前的服務。


[service]區塊

ExecStart 參數代表執行腳本的絕對路徑,默認為/etc/autorun.sh 文件(用戶可以自行修改)Type: 定義啟動時的進程行為。其常用的幾種方式為:

Type=simple:(默認值)systemd認為該服務將立即啟動服務進程不會fork 。如果該服務要啟動其他服務,就不要使用此類型啟動了,除非該服務是socket激活型。

Type=oneshot:這一選項適用于只執行一項任務、隨后立即退出的服務。可能需要同時設置RemainAfterExit=yes使systemd在服務進程退出之后仍然認為服務處于激活狀態。

Type=idle:systemd 會等待所有任務處理完成后,才開始執行 idle 類型的單元。其他行為與Type=simple 類似。


[Install]區塊 

WantedBy的值是一個或多個Target,當前Unit激活時(enable)符號鏈接會放入/etc/systemd/system目錄下面以Target名 + .wants后綴構成的子目錄中。

RequiredBy的值是一個或多個Target,當前Unit激活時(enable)符號鏈接會放入/etc/systemd/system目錄下面以Target名+.required后綴構成的子目錄中。

如果上述方式依然不能滿足需求,也可以自己添加 system 服務。


首先將 OKMX8MQ-C開發板上電啟動,在開發板終端中進入到/home/root/目錄下,執行如下命令創建一個腳本文件,并修改權限:

echo '#!/bin/sh' >> /home/root/helloworld.sh

echo 'gst-play-1.0 /home/forlinx/audio/test.mp3' >> /home/root/helloworld.sh

chmod 777 /home/root/helloworld.sh

進入到“/lib/systemd/system/”目錄下,并新建一個helloworld.service文件

命令如下:

cd /lib/systemd/system

vi helloworld.service

文件的內容如下:

[Unit]

Description=helloworld After=basic.service X.service thermal-zone-init.service

[Service]

ExecStart=/home/root/helloworld.sh

[Install]

WantedBy=multi-user.target


其中 Description 一行需寫入服務名,ExecStart 需要寫入可執行文件的絕對路徑。

保存退出后,在終端上執行如下命令:

systemctl -f enable /lib/systemd/system/helloworld.service

此時即可將新添加的自啟動服務生效,重啟開發板后,此程序會自動運行,在默認端的音頻即可聽到音頻輸出。

—— —— —— ——

Systemd服務,可以實現并行啟動并節約啟動時間,是一個錦上添花的功能,希望這篇文章能提升您對OKMX8MQ-C開發板的使用體驗。






相關產品 >

  • OKMX8MQ-C開發板

    飛凌嵌入式提供基于 NXP/Freescale iMX8、i.MX 8MQ處理器設計ARM核心板FETMX8MQ-C。i.MX8M處理器具有音頻、語音和視頻處理功能,飛凌iMX8核心板充分發揮NXP iMX8 系列 ARM 處理器性能,對功能做了優化。提供10~15年產品長期供貨計劃。工作環境溫度為-40℃~85℃,滿足工業及泛工業場景應用。 了解詳情
    OKMX8MQ-C開發板
  • FETMX8MQ-C核心板

    基于 NXP/Freescale iMX8、 iMX8X、i.MX 8MQ處理器的ARM核心板。 四核ARM Cortex-A53 ,主頻最高1.3GHz,板載2GB RAM,8GB ROM;工作環境溫度為-40℃~85℃,滿足工業及泛工業場景應用。i.MX8M處理器具有音頻、語音和視頻處理功能,提供高水平的音頻保真度,適用于無風扇運行,散熱系統成本低、電池壽命長。具有高速接口可提供靈活連接等優勢,并且提供10~15年產品長期供貨計劃。
    了解詳情
    FETMX8MQ-C核心板

推薦閱讀 換一批 換一批