恢复库实现了一个API,允许您配置不同支持的恢复命令并重新启动到恢复模式。这个库安装在Digi Embedded Yocto提供的工具链中,因此您可以使用它来开发自己的自定义应用程序,支持触发恢复命令。看到应用程序开发。
使用库
要使用该库,您需要:
在应用程序中包含恢复头文件。
# include < recovery.h >
指向已包含在预编译工具链中的恢复静态库的链接。该库提供了一个pkg-config文件
recovery.pc
,安装在工具链中。要配置正确的编译标志和链接库,请在makefile中添加以下行:[…CFLAGS += $(shell pkg-config——CFLAGS recovery) LDLIBS += $(shell pkg-config——libs——static recovery)[…]
实现的功能
以下是当前版本中实现的功能:
函数 | 描述 |
---|---|
Int encrypt_partitions(char *to_encrypt, char *to_unencrypt, unsigned char force) |
配置恢复命令来加密/不加密提供的分区。如果force不等于0,则库在配置命令之前不会要求确认。成功时返回0,失败时返回-1,在没有恢复命令集的情况下返回1。 要完成(非)加密过程,必须调用 |
Int update_firmware(const char *swu_path) |
配置恢复命令,使用中指定的包更新固件 要启动更新过程,必须调用 |
Int set_encryption_key(const char *key, unsigned char force) |
使用实例配置恢复命令设置新的文件系统加密密钥。如果key为空或 要设置新配置的加密密钥,必须调用 |
Int reboot_recovery(unsigned Int reboot_timeout) |
之后重新启动到恢复模式 以恢复模式启动后,配置的恢复命令将被应用。 |
int wipe_update_partition(空白) |
配置恢复命令擦除和格式化更新分区。成功时返回0,失败时返回-1。 要启动擦除进程,必须调用 |
示例代码
下面的摘录(不可直接编译)演示了如何使用该库:
# include< recovery.h >int主要(int命令行参数个数,字符* argv []) {intret =0;无符号字符need_reboot =0;/*读取和解析命令行*/parse_options(命令行参数个数,argv);/ **解析命令行后的变量:** swu_package:软件升级包路径* key_set:设置新的加密密钥的布尔标志* key:新的加密密钥* to_encrypt:需要加密的分区列表,以逗号分隔* to_unencrypt:需要解密的分区列表,以逗号分隔* wipe_update:布尔标记是否擦除' update '分区* reboot_timeout:等待重启的时间* /如果(set_key) {/*配置恢复命令设置fs加密密钥*/Ret = set_encryption_key(key, force);如果(ret <0){打印(“错误:set_encryption_key\ n");转到;}其他的如果(ret = =0) {/ **只有在严格必要时才重启,因为功能如果没有设置恢复命令,*可能会成功*(例如,如果用户取消操作)。* /need_reboot + +;}其他的{ret =0;}}如果(swu_package) {/*配置恢复命令更新固件*/Ret = update_firmware(swu_package);如果(ret) {printf(“错误:update_firmware\ n");转到;} need_reboot + +;}如果(wipe_update) {/*配置恢复命令格式化'update'分区*/Ret = wipe_update_partition();如果(ret) {printf(“错误:wipe_update_partition\ n");转到;} need_reboot + +;}如果(to_encrypt || to_unencrypt) {/*配置恢复命令加密/不加密分区*/Ret = encrypt_partitions(to_encrypt, to_unencrypt, force);如果(ret <0){打印(“错误:encrypt_partitions\ n");转到;}其他的如果(ret = =0) {/ **只有在严格必要时才重启,因为功能如果没有设置恢复命令,*可能会成功*(例如,如果您尝试加密分区*已经加密)。* /need_reboot + +;}其他的{ret =0;}}如果(need_reboot >0) {/*重启恢复*/Ret = reboot_recovery(reboot_timeout);如果(ret) {printf(“错误:reboot_recovery\ n");转到;}} print ("\ n没有配置恢复命令。\ n");出:返回受潮湿腐烂;}