1. 程式人生 > 其它 >SIMcom嵌入式Linux平臺通用配置

SIMcom嵌入式Linux平臺通用配置

技術標籤:SDK二次開發嵌入式linux應用嵌入式linux

修訂記錄修訂日期修訂作者修訂備註
建立第一版2020.02.14[email protected]文件版本V1.0.0

文章目錄

第一部分 SIMcom嵌入式Linux平臺通用配置

1. 1 開發環境中的必要指令碼

1.1.1 SIMcom提供的備份指令碼

  • 首先檢視開發環境內sim_rootfs/etc/init.d路徑下是否有SIMcom提供的備份指令碼helloworld_auto_restore.sh,該指令碼主要負責:

    1、備份/data/helloworld應用程式,即所有應用程式的入口應用程式。

    2、備份可選的指令碼檔案/data/helloworld_monitor.sh/data/monitor.sh

    3、備份動作只發生在每次啟動系統該檔案不存在且對應的備份原始檔存在的情況下。

1.1.2 ibeelink提供的備份指令碼

  • 其次檢視開發環境內sim_rootfs/etc/init.d路徑下是否有ibeelink提供的備份指令碼ibeelink_restore.sh

    ,該指令碼主要負責:

    1、備份開發的業務APP程式,即main_app等必要的應用程式。

    2、備份業務APP所需要的配置檔案。例如APP的引數設定。

    3、備份永遠不會更改的只讀檔案,例如可以用於恢復出廠設定的檔案。

    4、ibeelink提供的指令碼需要連結到/etc/rc5.d/S99xxxx,其中xxxx為指令碼名稱。

1.1.3 SIMcom提供的啟動指令碼

  • 最後檢視開發環境內sim_rootfs/etc/init.d路徑下是否有SIMcom提供的啟動指令碼start_helloworld.sh,該指令碼主要負責:

    1、啟動入口應用程式/data/helloworld,由此調起使用者的其他業務APP。

    2、啟動可選指令碼檔案/data/monitor.sh,用於緊急情況下作為除錯手段的入口。

    3、利用start-stop-daemon守護程序工具對入口應用程式進行啟停守護。

  • 若原廠沒有提供啟動指令碼,將啟動指令碼複製到相應目錄後,使用軟連結進行指令碼連結,在開發環境最外層目錄下舉例:sudo ln -sf ../init.d/start_helloworld sim_rootfs/etc/rc5.d/S99start_helloworld

1.2 開發環境通用配置方法

1.2.1 /data和/cache分割槽內檔案的備份

  • /data和/cache分割槽內的檔案為可讀可寫檔案,因此面臨著極限狀態下檔案丟失的風險。

  • 根據SIMcom的建議,採用雙向備份的方式對該分割槽的檔案進行備份:

    1、啟動時發現丟失/data下的重要檔案,則檢查/cache下的對應檔案,若存在則從/cache下複製。

    2、啟動時發現丟失/cache下的重要檔案,則檢查/data下的對應檔案,若存在則從/data下複製。

  • /data/helloworld檔案由指令碼helloworld_auto_restore.sh負責備份,其他在這兩個區內的檔案均由指令碼檔案ibeelink_restore.sh負責備份。注意:當前僅支援在指令碼中指定的檔案的備份。

  • 注意:雖然這兩個區域內檔案同時丟失的概率極小,但仍然無法保證百分百。

1.2.2 只讀檔案(Read-only)的備份方法

  • 在開發環境sim_rootfs路徑下可以使用root許可權寫入檔案到任意子目錄下。
  • 例如將需要備份的網路配置檔案auto_net_cfg_file寫入到sim_rootfs/home路徑下。
  • 最後在ibeelink_restore.sh指令碼中將該檔案的備份原始檔位置設定為/home/auto_net_cfg_file,當/data/auto_net_cfg_file檔案丟失後,系統啟動時會自動從只讀區域/home複製該檔案。

1.2.3 系統預設模組PID模式配置方法

  • 在開發環境sim_usrfs路徑或其子路徑中找到檔案boot_hsusb_composition

  • boot_hsusb_composition連結到/sbin/usb/compositions/9001或者/sbin/usb/compositions/9011

  • 若需要將系統預設模組PID模式配置為9011模式,則執行指令ln -sf /sbin/usb/compositions/9011 boot_hsusb_composition

  • 注意:

    1、boot_hsusb_composition檔案所在路徑使用指令ls -l命令核對模組PID是否配置為想要的模式。若不是則使用上述方法更改。

    2、只要開發環境不再更改,該配置只需要配置一次即可。

第二部分 SIMcom嵌入式Linux平臺選用配置

2.1 auto-net撥號上網配置方法

2.1.1 為什麼要使用該方法

  • 由於高通更新了部分資源,導致SIMcom未能及時配置相關引數,這也導致了SIM7600CE-CNSE模組無法同SIM7600CE-T一樣正常使用9011模式下的RNDIS撥號(需要一直插上USB線才能正常上網)。
  • auto_net方式,無需應用操作。強烈要求和推薦SIM7600CE-CNSE模組使用該方法。

2.1.2 如何配置auto-net撥號上網

  • 在開發環境打包映象時將sim_usrfs目錄(掛載後為/data)下auto_net_cfg_file檔案始終存在且寫1(釋出的版本沒有該檔案)。
  • 在備份腳本里備份auto_net_cfg_file檔案,且建議備份源放在只讀檔案系統下,例如/home資料夾。
  • 在開發環境打包映象時將sim_usrfs目錄下檔案mobileap_cfg.xml檔案和mobileap_cfg.xsd檔案中MobileAPEnableAtBootup應該分別置為1(釋出的CNSE版本有誤)。無需備份。
  • 在開發環境打包映象時sim_usrfs目錄或其子目錄中將boot_hsusb_composition連結到/sbin/usb/compositions/9001(預設就是該值,建議檢查一下即可)。

2.2 未配置指令碼的檔案備份補救方法

2.2.1 為什麼需要補救措施

  • 由於歷史遺留問題,導致一些裝置在沒有做檔案備份的功能前提下就生產交付了。
  • 檔案備份的指令碼存放在只讀檔案系統中,無法通過遠端升級寫入指令碼的方法進行補救。
  • 雖然無法通過指令碼進行備份,但是可以在應用程式中主動備份。

2.2.2 如何採取補救措施

  • 由於/data/helloworld檔案由SIMcom提供的指令碼進行備份,固可以在該應用程式中進行備份操作。

  • 首先需要更新/data/helloworld檔案以便寫入備份邏輯。下面以使用業務APP更新該檔案為例。

    1、在業務APP啟動後呼叫http_upgrade介面去蜜連平臺拉取最新的helloworld檔案。

    2、注意拉取成功後,需要上報給伺服器最新版本號,防止該檔案被重複拉取。

    3、使用的介面工程程式碼地址:整包HTTP遠端升級介面,研發人員可以克隆後直接測試。

  • helloworld程式中備份邏輯為:

    1、若模組PID不是9011,則更改為9011後重啟系統。

    2、先檢查/data目錄下需要備份的檔案是否丟失,若丟失,則從對應的備份源複製。

    3、再檢查/cache目錄下需要備份的檔案,若丟失,則從/data目錄下複製。

    4、若發生備份操作,則使用UDP協議上報給日誌伺服器47.102.121.15:9898,用於記錄。

    5、若裝置因無法上網導致上報失敗,則再下次啟動時繼續上報。

    6、helloworld程式中備份邏輯程式碼地址:備份邏輯程式碼地址

第三部分 SIMcom嵌入式Linux平臺配置原理

3.1 應用程式自啟動原理

3.1.1 helloworld應用程式是誰啟動的

  • 在指令碼start_helloworld.sh的原始碼中我們可以看到如下程式碼:

    start-stop-daemon -S -b -a /data/helloworld
    

    這說明,helloworld應用程式是由start-stop-daemon這個啟停工具啟動的。關於該工具的作用請自行百度或谷歌進行了解。

3.1.2 start_helloworld.sh指令碼程式是誰啟動的

  • /etc/rc5.d/目錄下可以找到S99start_helloworld檔案,這是個連結檔案,使用命令ls -l可以清楚的檢視到其指向的原始檔就是start_helloworld.sh這個指令碼檔案。
  • Linux系統在每次啟動時都會按優先順序次序去啟動各個指令碼檔案或應用程式。
  • 本節舉例中,rc5.d表示該目錄下的檔案執行級為5級,而S99則表示啟動優先順序為99。

3.2 應用程式備份原理

3.2.1 如何實現應用程式備份

  • 將需要備份的檔案和備份邏輯寫入指令碼中。
  • 連結該指令碼到自啟動目錄下。
  • 由Linux自啟動該指令碼,即可完成檔案備份的工作。