概述
對于嵌入式系統應用中,頻繁使用的參數存儲,過程變量存儲等操作,AliOS-Things為用戶提供了一種更加直觀易于理解的基于鍵值對的存儲方式,如報警溫度=50度,可以通過定義一個鍵值對:{"AlarmTemp":50}來進行存儲。獲取時,也只需通過AlarmTemp這個關鍵字(鍵/KEY)即可快速獲取和重新寫入。KV將用戶的指定片內flash扇區或eeprom虛擬為有一個存儲空間,并且幫助用戶管理鍵值對之間的映射關系,用戶無需關心具體的值被寫到哪里了,僅需要通過對鍵的操作即可完成數據的存取。該組件目前針對Nor flash設備。組件支持以下功能:
key-value pair set
key-value pair get
key-value pair delete
key-value pair delete for group (same prefix)
版權信息
Apache license v2.0
目錄結構
├── src
│ ├── kv_adapt.c # kv和flash的適配層
│ ├── kv_aos.c # kv的aos api接口
│ ├── kv.c # kv的核心實現代碼
│ ├── kv_cli.c # kv cli注冊命令
│ └── kv_secure.c # kv的安全存儲適配層
├── include
│ ├── aos
│ │ └── kv.h # kv的對外AOS API
│ └── kv_api.h # kv_開頭的API
├── internal # 內部頭文件
├── package.yaml # 編譯配置文件
└── example
└── kv_example.c # kv示例代碼
依賴組件
rhino
cli
常用配置
系統中相關配置已有默認值,如需修改配置,統一在YAML中def_config節點修改,具體如下:
kv分區大小:默認8K bytes, 如需修改,在YAML中修改KV_CONFIG_TOTAL_SIZE配置
def_config:
KV_CONFIG_TOTAL_SIZE: 4096
kv分區號,默認HAL_PARTITION_PARAMETER_2,可按照實際需要修改YAML配置如:
def_config:
KV_CONFIG_PARTITION: 2
kv block bit大小,默認12,可修改YAML配置如:
def_config:
KV_CONFIG_BLOCK_SIZE_BITS: 2
kv 資源回收任務優先級,默認32,可修改YAML配置如:
def_config:
KV_CONFIG_TASK_PRIORITY: 31
kv 資源回收任務棧大小,默認1024,可修改YAML配置如:
def_config:
KV_CONFIG_TASK_STACK_SIZE: 2048
kv 存儲key最大長度,默認為128,可修改YAML配置如:
def_config:
KV_CONFIG_MAX_KEY_LEN: 256
kv 存儲value最大長度,默認為512,可修改YAML配置如:
def_config:
KV_CONFIG_MAX_VAL_LEN: 256
API說明
參考 kv_aos_api
使用
示例組件使用示例相關的代碼下載、編譯和固件燒錄均依賴AliOS Things配套的開發工具,所以首先需要參考《AliOS Things集成開發環境使用說明之搭建開發環境》,下載安裝。待開發環境搭建完成后,可以按照以下步驟進行示例的測試。
步驟1 創建或打開工程
打開已有工程
如果用于測試的案例工程已存在,可參考《AliOS Things集成開發環境使用說明之打開工程》打開已有工程。
創建新的工程
組件的示例代碼可以通過編譯鏈接到AliOS Things的任意案例(solution)來運行,這里選擇helloworld_demo案例。helloworld_demo案例相關的源代碼下載可參考《AliOS Things集成開發環境使用說明之創建工程》。
步驟2 添加組件
案例下載完成后,需要在helloworld_demo組件的package.yaml中添加對組件的依賴:
depends:
- kv: dev_aos # helloworld_demo中引入kv組件
步驟3 下載組件
在已安裝了的開發環境工具欄中,選擇Terminal -> New Terminal啟動終端,并且默認工作路徑為當前工程的workspace,此時在終端命令行中輸入:
aos install kv
上述命令執行成功后,組件源碼則被下載到了./components/kv路徑中。
步驟4 添加示例
在kv組件的package.yaml中添加example示例代碼:
source_file:
- "src/*.c"
- "example/kv_example.c" # add kv_example.c
步驟5 編譯固件
在示例代碼已經添加至組件的配置文件,并且helloworld_demo已添加了對該組件的依賴后,就可以編譯helloworld_demo案例來生成固件了,具體編譯方法可參考《AliOS Things集成開發環境使用說明之編譯固件》。
步驟6 燒錄固件
helloworld_demo案例的固件生成后,可參考《AliOS Things集成開發環境使用說明之燒錄固件》來燒錄固件。
步驟7 打開串口
固件燒錄完成后,可以通過串口查看示例的運行結果,打開串口的具體方法可參考《AliOS Things集成開發環境使用說明之查看日志》。
當串口終端打開成功后,可在串口中輸入help來查看已添加的測試命令。
步驟8 測試示例
CLI命令行輸入:
kv_example
關鍵日志
CLI日志:
kv comp test success
注意事項
如果需要使用kv的安全加解密(mbedtls version),就需要對接兩個接口:kv_secure_get_key and kv_secure_get_iv。(declare in kv_adapt.h
)Example:
uint8_t aes_key[32] = {
0x86, 0xf6, 0xd2, 0xbe, 0x45, 0xb5, 0xab, 0x9c,
0xc7, 0xd5, 0x96, 0xf7, 0xaf, 0x45, 0xfa, 0xf7,
0xbe, 0x6a, 0x5d, 0xb0, 0x04, 0xc4, 0xde, 0xb5,
0xf5, 0x0c, 0x4f, 0xc3, 0x71, 0x19, 0x3e, 0xe8
};
uint8_t aes_iv[16] = {
0xef, 0x80, 0x18, 0xdc, 0xa3, 0x72, 0x72, 0x31,
0x99, 0x2e, 0x3a, 0xba, 0x60, 0xf5, 0x0b, 0xd4
};
uint8_t* kv_secure_get_key(uint32_t len)
{
if ((len <= 0) || (len > sizeof(aes_key))) {
return NULL;
}
return aes_key;
}
uint8_t* kv_secure_get_iv(uint32_t len)
{
if ((len <= 0) || (len > sizeof(aes_iv))) {
return NULL;
}
return aes_iv;
}
FAQ
Q1: 在不知道key值的情況下,可以遍歷kv分區嗎?
答:可以通過串口輸入cli命令kv list遍歷輸出所有的kv值。