概述
對于嵌入式系統應用中,頻繁使用的參數存儲,過程變量存儲等操作,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
目錄結構
│ ├── 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配置
KV_CONFIG_TOTAL_SIZE: 4096
kv分區号,預設HAL_PARTITION_PARAMETER_2,可按照實際需要修改yaml配置如:
KV_CONFIG_PARTITION: 2
kv block bit大小,預設12,可修改yaml配置如:
KV_CONFIG_BLOCK_SIZE_BITS: 2
kv 資源回收任務優先級,預設32,可修改yaml配置如:
KV_CONFIG_TASK_PRIORITY: 31
kv 資源回收任務棧大小,預設1024,可修改yaml配置如:
KV_CONFIG_TASK_STACK_SIZE: 2048
kv 存儲key最大長度,預設為128,可修改yaml配置如:
KV_CONFIG_MAX_KEY_LEN: 256
kv 存儲value最大長度,預設為512,可修改yaml配置如:
KV_CONFIG_MAX_VAL_LEN: 256
API說明
參考 kv_aos_api
使用示例
元件使用示例相關的代碼下載下傳、編譯和固件燒錄均依賴AliOS Things配套的開發工具 alios-studio ,是以首先需要參考《aos-studio使用說明之搭建開發環境》,下載下傳安裝 alios-studio 。
待開發環境搭建完成後,可以按照以下步驟進行示例的測試。
步驟1 建立或打開工程
打開已有工程
如果用于測試的案例工程已存在,可參考《aos-studio使用說明之打開工程》打開已有工程。
建立新的工程
元件的示例代碼可以通過編譯連結到AliOS Things的任意案例(solution)來運作,這裡選擇helloworld_demo案例。helloworld_demo案例相關的源代碼下載下傳可參考《aos-studio使用說明之建立工程》。
步驟2 添加元件
案例下載下傳完成後,需要在helloworld_demo元件的package.yaml中添加對元件的依賴:
depends:
- kv: dev_aos # helloworld_demo中引入kv元件
步驟3 下載下傳元件
在已安裝了 alios-studio 的開發環境工具欄中,選擇Terminal -> New Terminal啟動終端,并且預設工作路徑為目前工程的workspace,此時在終端指令行中輸入:
aos install kv
上述指令執行成功後,元件源碼則被下載下傳到了./components/kv路徑中。
步驟4 添加示例
在kv元件的package.yaml中添加example示例代碼:
- "src/*.c"
- "example/kv_example.c" # add kv_example.c
步驟5 編譯固件
在示例代碼已經添加至元件的配置檔案,并且helloworld_demo已添加了對該元件的依賴後,就可以編譯helloworld_demo案例來生成固件了,具體編譯方法可參考《aos-studio使用說明之編譯固件》。
步驟6 燒錄固件
helloworld_demo案例的固件生成後,可參考《aos-studio使用說明之燒錄固件》來燒錄固件。
步驟7 打開序列槽
固件燒錄完成後,可以通過序列槽檢視示例的運作結果,打開序列槽的具體方法可參考《aos-studio使用說明之檢視日志》。
當序列槽終端打開成功後,可在序列槽中輸入help來檢視已添加的測試指令。
步驟8 測試示例
CLI指令行輸入:
關鍵日志
CLI日志:
注意事項
如果需要使用kv的安全加解密(mbedtls version),就需要對接兩個接口:kv_secure_get_key and kv_secure_get_iv。(declare in kv_adapt.h)
Example:
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值。