天天看點

AliOS Things 3.3.0 : KV元件介紹

概述

對于嵌入式系統應用中,頻繁使用的參數存儲,過程變量存儲等操作,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值。

繼續閱讀