www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 公眾號精選 > 嵌入式大雜燴
[導讀]關注「嵌入式大雜燴」,選擇「星標公眾號」一起進步!在《實用|如何遠程登錄開發(fā)板?》這篇文章中我們給開發(fā)板配置了網(wǎng)絡,但是板子重啟之后,又得手動輸入命令去配置連接WiFi。在《實用|10分鐘教你搭建一個嵌入式web服務器》、《實用|10分鐘教你通過網(wǎng)頁點燈》及這兩篇文章中我們每次都...

關注「嵌入式大雜燴」,選擇「星標公眾號」一起進步!

《實用 | 如何遠程登錄開發(fā)板?》這篇文章中我們給開發(fā)板配置了網(wǎng)絡,但是板子重啟之后,又得手動輸入命令去配置連接WiFi。

《實用 | 10分鐘教你搭建一個嵌入式web服務器》《實用 | 10分鐘教你通過網(wǎng)頁點燈》及這兩篇文章中我們每次都是先登錄開發(fā)板,再啟動我們的boa服務器。

顯然,這很不方便。

這篇筆記我們就一起來解決這個痛點。設置板子重啟之后自動連接WiFi、boa服務器開機自動啟動,以及設置我們的應用程序開機自啟動。

嵌入式Linux初始化程序

1、init進程

init進程是內核加載的第一個用戶空間的進程,PID為1,負責加載用戶空間的服務和程序。如:

2、init的種類

在嵌入式Linux中,不同的文件系統(tǒng)有不同的init的實現(xiàn)。

對于Buildroot_2019.02,其支持兩種system init:BusyBox init、systemV。

對于Buildroot_2020.02,其支持四種system init:BusyBox init、systemV、systemdOpenRC。

(1)BusyBox init

BusyBox init非常適合在嵌入式系統(tǒng)開發(fā)中使用,被譽為“嵌入式Linux的瑞士軍刀”,它可以為嵌入式系統(tǒng)提供只要的init功能,并且通過定制可以做得非常 精煉。inittab是幫助init完成系統(tǒng)配置的主要文件。

(2)systemV

SystemV 是類 Unix 操作系統(tǒng)傳統(tǒng)的也是首款初始化系統(tǒng)。SystemV為服務啟動設置嚴格的順序。每個服務都分配有一個優(yōu)先級編號,init會按優(yōu)先級順序啟動服務。如果需要確保網(wǎng)絡連接后啟動服務,則必須手動為服務分配更高的優(yōu)先級。

System V初始化腳本都存儲在/etc/rc.d/init.d//etc/init.d目錄中。這些腳本用于控制系統(tǒng)的啟動和關閉。

(3)systemd

systemd是Linux下的一套中央化系統(tǒng)及設置管理程序(init),包括有守護進程、程序庫以及應用軟件。其開發(fā)目標是提供更優(yōu)秀的框架以表示系統(tǒng)服務間的依賴關系,并依此實現(xiàn)系統(tǒng)初始化時服務的并行啟動,同時達到降低Shell的系統(tǒng)開銷的效果,最終代替現(xiàn)在常用的System V與BSD風格init程序。目前絕大多數(shù)的Linux發(fā)行版都已采用systemd代替原來的System V。

(4)OpenRC

OpenRC是一個基于依賴關系的rc系統(tǒng),可以和系統(tǒng)所提供任何init程序配合運行,一般指的是/sbin/init。但是她不是用來取代/sbin/init的。

基于SystemV的開機自啟動

上面我們簡單地了解了相關地概念。我這里地開發(fā)板用的是Buildroot_2020.02,初始化系統(tǒng)用的是SystemV。下面我們基于這個環(huán)境做一些簡單的程序自啟動的實踐。

我這里的System V初始化腳本都存儲在/etc/init.d目錄中:

init進程啟動之后,會對/etc/inittab文件的解釋及執(zhí)行。我們看看/etc/inittab文件里有什么內容:

可以看到里面用到了兩個腳本文件:

  • /etc/init.d/rcS
  • /etc/init.d/rcK
其中,可以看出/etc/init.d/rcS是在系統(tǒng)開機之后執(zhí)行的腳本;/etc/init.d/rcK是在系統(tǒng)關機時執(zhí)行的腳本。

下面看看/etc/init.d/rcS里面的內容:

從里面的信息我們可以知道,這個rcS腳本會循環(huán)調用/etc/init.d文件夾下的以S 數(shù)字開頭的腳本文件,即:

其中,S后面的數(shù)字表示啟動的順序,數(shù)字小的先啟動。

下面我們一起來簡單驗證一些是不是這樣的。

示例代碼:

test.c

#include?

int?main(void)
{
?for?(int?i?=?0;?i?5;?i )
?{
??printf("Hello?world\n");
?}
?return?0;
}
編譯:

arm-linux-gnueabihf-gcc?test.c?-o?test
把test傳到開發(fā)板的home目錄:

scp?test?root@192.168.1.8:/home
在開發(fā)板/etc/init.d/目錄下新建文件S100Test:

#!/bin/sh
cd?/home
./test?>?test_log.txt
腳本很簡單,把test程序輸出的信息存放到同目錄下的test_log.txt文件中。

保存S100Test腳本,修改其權限:

chmod?777?S100Test
重啟板子:

reboot
可以看到,test同目錄下會生成一個test_log.txt文件:

表明我們已經(jīng)可以設置我們的程序開機自啟動了。上面只是進行簡單地演示,S100Test啟動腳本可能不夠規(guī)范,我們可以模仿/etc/init.d/目錄下地其它腳本的格式編寫我們的啟動腳本,如S99myirhmi2腳本的內容如:

套用其模板修改S100Test為:

#!/bin/sh

case?"$1"?in
????????start)
????????????????cd?/home
????????????????./test?>?test_log.txt
????????????????;;
????????stop)

????????????????;;
????????*)
????????????????echo?"Usage:?$0?{start|?stop|restart}"
????????????????exit?1
esac

exit?$?

以上就是本次關于程序自啟動的一些學習分享。

回到文章開頭的問題,我們就可以用類似的方法來設置我們的板子,讓其開機自動配置網(wǎng)絡、自動啟動boa服務器,為了圖方便,我直接把相關執(zhí)行命令加入到/etc/init.d/rcS中,如:

重啟,可以看到,相關程序已經(jīng)自啟動了:

巨人肩膀:

1、https://blog.csdn.net/weixin_39607935/article/details/111626606

2、https://blog.csdn.net/shanzhizi/article/details/39082495

3、https://blog.csdn.net/u012944254/article/details/111034628

4、https://www.cnblogs.com/xjnotxj/p/11951957.html

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
關閉
關閉