修订记录 | 修订日期 | 修订作者 | 修订备注 |
---|---|---|---|
创建第一版 | 2020.02.14 | forwardxiang@163.com | 文档版本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自启动该脚本,即可完成文件备份的工作。