實用 | 如何遠程登錄開發板?這篇文章中我們給開發板配置了網絡,但是板子重啟之后,又得手動輸入命令去配置連接WiFi。
在實用 | 10分鐘教你搭建一個嵌入式web服務器這篇文章中我們每次都是先登錄開發板,再啟動我們的boa服務器。
顯然,這很不方便。
這篇筆記我們就一起來解決這個痛點。設置板子重啟之后自動連接WiFi、boa服務器開機自動啟動,以及設置我們的應用程序開機自啟動。
init進程是內核加載的第一個用戶空間的進程,PID為1,負責加載用戶空間的服務和程序。如:
在嵌入式Linux中,不同的文件系統有不同的init的實現。
對于Buildroot_2019.02,其支持兩種system init:BusyBox init、systemV。
對于Buildroot_2020.02,其支持四種system init:BusyBox init、systemV、systemd及OpenRC。
BusyBox init非常適合在嵌入式系統開發中使用,被譽為“嵌入式Linux的瑞士軍刀”,它可以為嵌入式系統提供只要的init功能,并且通過定制可以做得非常 精煉。inittab是幫助init完成系統配置的主要文件。
SystemV 是類 Unix 操作系統傳統的也是首款初始化系統。SystemV為服務啟動設置嚴格的順序。每個服務都分配有一個優先級編號,init會按優先級順序啟動服務。如果需要確保網絡連接后啟動服務,則必須手動為服務分配更高的優先級。
System V初始化腳本都存儲在/etc/rc.d/init.d/或/etc/init.d目錄中。這些腳本用于控制系統的啟動和關閉。
systemd是Linux下的一套中央化系統及設置管理程序(init),包括有守護進程、程序庫以及應用軟件。其開發目標是提供更優秀的框架以表示系統服務間的依賴關系,并依此實現系統初始化時服務的并行啟動,同時達到降低Shell的系統開銷的效果,最終代替現在常用的System V與BSD風格init程序。目前絕大多數的Linux發行版都已采用systemd代替原來的System V。
OpenRC是一個基于依賴關系的rc系統,可以和系統所提供任何init程序配合運行,一般指的是/sbin/init。但是她不是用來取代/sbin/init的。
上面我們簡單地了解了相關地概念。我這里地開發板用的是Buildroot_2020.02,初始化系統用的是SystemV。下面我們基于這個環境做一些簡單的程序自啟動的實踐。
我這里的System V初始化腳本都存儲在/etc/init.d目錄中:
init進程啟動之后,會對/etc/inittab文件的解釋及執行。
我們看看/etc/inittab文件里有什么內容:
可以看到里面用到了兩個腳本文件:
其中,可以看出/etc/init.d/rcS是在系統開機之后執行的腳本;/etc/init.d/rcK是在系統關機時執行的腳本。
下面看看/etc/init.d/rcS里面的內容:
從里面的信息我們可以知道,這個rcS腳本會循環調用/etc/init.d文件夾下的以S+數字開頭的腳本文件,即:
其中,S后面的數字表示啟動的順序,數字小的先啟動。
下面我們一起來簡單驗證一些是不是這樣的。
示例代碼:
test.c
// 微信公眾號:嵌入式大雜燴
#include <stdio.h>
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傳到開發板的home目錄:
scp test root@192.168.1.8:/home
在開發板/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文件:
表明我們已經可以設置我們的程序開機自啟動了。上面只是進行簡單地演示,S100Test啟動腳本可能不夠規范,我們可以模仿/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 $?
以上就是本次關于程序自啟動的一些學習分享。
回到文章開頭的問題,我們就可以用類似的方法來設置我們的板子,讓其開機自動配置網絡、自動啟動boa服務器,為了圖方便,我直接把相關執行命令加入到/etc/init.d/rcS中,如:
重啟,可以看到,相關程序已經自啟動了:
巨人肩膀:
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
猜你喜歡:
嵌入式必備之Git的使用
分享一些可以快速入門的嵌入式教程
嵌入式、C語言位操作的一些常見用法歸納
C語言、嵌入式重點知識:回調函數
1024G 嵌入式資源大放送!包括但不限于C/C++、單片機、Linux等。私信回復1024,即可免費獲取!
統環境: centos7
filebeat版本: 7.2
1. 進入自啟動目錄:
cd /lib/systemd/system
vim filebeat.service
2.編寫filebeat.service
[Unit]
Description=filebeat
Wants=network-online.target
After=network-online.target
[Service]
User=root
ExecStart=/var/filebeat/filebeat -e -c /var/filebeat/filebeat.yml #/var/filebeat為filebeat的安裝目錄
Restart=always #設置為掉線自動重啟,進程強制殺掉后會自動重新啟動
[Install]
WantedBy=multi-user.target
3.啟動驗證
必大家都遇到過這種情況,每次電腦開機時,總是會自己偷偷啟動很多軟件,如果電腦配置低一些,就需要開機之后等好久才能使用,就算電腦配置高也會影響開機速度。你是不是很納悶,明明自己沒有設置為何軟件會自啟動?該如何才能解決這個問題?
我們口中的軟件自啟動,其實專業術語叫做"開機啟動項",這個功能最初的本意是為了更方便我們的使用。不過后來一些軟件為了提高自身使用率,就鉆了這個空子。
有些良心的軟件在裝的時候,會讓你選擇是否開啟自啟動。而有些軟件則是默認開啟的,只要你一不注意,就有多了一個軟件自啟動。所以在裝軟件時一定要仔細一些,防止一些軟件鉆空子。
1. Windows7
首先我們直接輸入快捷鍵【win+R】,然后桌面右下角就會彈出窗口,接著在窗口輸入【MSConfig】,再點擊【確定】進入下一頁面。
在這個頁面中,選擇【啟動】。
然后就能看到我們電腦哪些軟件會在開機時自啟動了,只需把不想其自啟動的軟件,取消勾選即可,最后點擊【確定】就可以了。
2. Windows8/10
Windows8/10系統的設置方法還更簡單,我們先將鼠標移動到桌面底部任務欄,然后點擊鼠標右鍵,再選擇【任務管理器】。
進入任務管理器頁面之后,我們點擊【啟動】。接著就可以清楚的看到電腦上自啟動的軟件了,而且還能看到軟件對電腦的影響程度。如果你想要禁止某些軟件自啟動的話,先選擇該軟件,然后點擊右下角的禁用就可以了。
很多愛看電影的朋友,都在自己的電腦上存了不少好看的電影。不過看離線電影經常會遇到,由于格式原因不能播放的問題。其實我們可以使用【迅捷視頻轉換器】,就能輕松的把各種格式轉換為常用的MP4格式,這樣就能正常播放了。
以上就是今天分享的內容,學會之后再也不用擔心電腦開機時慢了。你的電腦用了多少年?又會不會卡呢?