1. 程式人生 > >[從0到1搭嵌入式工程]啟動韌體

[從0到1搭嵌入式工程]啟動韌體

介紹三種應用程式的啟動方式。

第一種是init程序

linux 核心啟動之後,會執行1號使用者程序init,然後由它來啟動後面的任務,掛載檔案系統,啟動服務等,init會執行init.rc檔案, 最後由init.rc執行到我們的init.sh指令碼。

init作為1號程序,預設的啟動放在/etc/inittab中,/etc/init.d/rcS檔案也就是init.rc檔案,在這個指令碼合適的位置,加入我們自己程式的啟動指令碼。


第二種是systemd

systemd作為引導程序,會首先執行default.target,在/usr/lib/systemd/system中,會指向multi-user.target,而這個target將自己的子單元放在目錄“/etc/systemd/system/multi-user.target.wants”裡。啟動一個target的時候,會啟動target裡面所有的service,/etc/systemd/system中,從一個mystartservice開始:

# cat mystartup.service 
[Unit]
Description=startup script
[Service]
ExecStart=/usr/local/bin/startup
StandardOutput=journal+console
[Install]
WantedBy=multi-user.target

指定我們開始執行的sh指令碼 /usr/local/bin/startup。

第三種,對於在openwrt linux系統中,使用了另外一種啟動程式叫做procd。

procd作為1號程序,會依次執行/etc/rc.d下面的指令碼, 按照名字字母順序排序,依次執行。

可以在最後,加入S9999mystart檔案即可,procd會自動去執行。

以上是執行到我們自己啟動指令碼init.sh的三種方式。

在init.sh中,繼續建立需要的目錄,掛載檔案系統,在啟動真正的myapp之前,判斷是否升級。 

執行ifconfig wlan0 up啟動wifi ,  ulimit -c unlimited 生成coredump檔案, ulimit -s 1024設定執行緒棧的大小(單位KBytes), 啟動telentd, rtspd等。

最後按順序啟動我們自己的使用者程序。

這樣, 我們的韌體應用程式就跑起來了。