[從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等。
最後按順序啟動我們自己的使用者程序。
這樣, 我們的韌體應用程式就跑起來了。