Azure Sphere에서 스토리지 사용

이 항목에서는 Azure Sphere 디바이스에서 스토리지를 사용하는 방법을 설명합니다. Azure Sphere는 읽기 전용 플래시 스토리지와 변경 가능한 스토리지의 두 가지 유형의 스토리지를 제공합니다.

읽기 전용 스토리지는 애플리케이션을 업데이트하지 않고 콘텐츠를 수정할 수 없도록 디바이스에 애플리케이션 이미지 패키지를 저장하는 데 사용됩니다. 여기에는 사용자 인터페이스 자산, 정적 구성 데이터, 외부 MCU를 업데이트하는 데 사용되는 펌웨어 이미지를 포함한 이진 리소스 또는 변경 가능한 스토리지에 대한 초기화 데이터와 같은 모든 데이터가 포함될 수 있습니다. 애플리케이션에 사용할 수 있는 메모리는 사용 가능한 스토리지 양에 대한 추가 세부 정보를 제공합니다.

변경 가능한 스토리지는 디바이스를 다시 부팅할 때 유지되는 데이터를 저장합니다. 예를 들어 현지 표준 시간대를 사용하여 시스템 시간을 관리 하려는 경우 변경 가능한 스토리지에 표준 시간대 설정을 저장할 수 있습니다. 다른 예로는 사용자가 수정할 수 있는 설정 또는 다운로드한 구성 데이터가 있습니다. 변경 가능한 스토리지 샘플은 애플리케이션에서 변경 가능한 스토리지를 사용하는 방법을 보여 줍니다.

참고

플래시를 반복적으로 업데이트하면 결국 플래시가 마모되어 유효하지 않습니다. 따라서 플래시의 불필요한 업데이트를 방지하기 위해 코드를 디자인해야 합니다. 예를 들어 다시 시작한 후 저장된 상태를 복구할 수 있도록 종료하기 전에 애플리케이션 상태를 저장하려면 상태가 변경된 경우에만 애플리케이션의 상태를 플래시에 저장하는 것이 좋습니다.

읽기 전용 스토리지 사용

이러한 Applibs 함수를 사용하여 읽기 전용 스토리지를 관리할 수 있습니다. 이러한 함수를 사용하는 예제는 curl을 사용하여 웹 서비스에 연결을 참조하세요.

읽기 전용 스토리지 요구 사항

읽기 전용 스토리지를 사용하는 애플리케이션에는 적절한 헤더 파일이 포함되어야 합니다.

프로젝트에 스토리지 및 존재하지 않는 헤더를 포함합니다.

#include <unistd.h>
#include <applibs/storage.h>

이미지 패키지에 파일 추가

Azure Sphere 디바이스의 읽기 전용 스토리지에 파일을 추가하려면 프로젝트에 리소스로 추가하고 애플리케이션의 이미지 패키지에 포함할 수 있습니다.

  • azsphere_target_add_image_package 사용하여 빌드할 때 포함할 이미지 패키지 파일 및 리소스 파일을 지정합니다. 예를 들어:

    azsphere_target_add_image_package(${PROJECT_NAME} RESOURCE_FILES "file1.dat" "file2.dat")

이제 "file1.dat" 및 "file2.dat" 파일이 이미지 패키지에 표시됩니다. 이러한 함수에 대한 자세한 내용은 CMake 함수 사용을 참조하세요.

참고

절대 경로는 RESOURCE_FILES 지원되지 않습니다.

변경 가능한 스토리지 사용

애플리케이션에 대해 변경 가능한 스토리지를 구성하면 애플리케이션의 구성 요소 ID에 할당되며 다른 구성 요소 ID를 가진 애플리케이션에서 액세스할 수 없습니다. 애플리케이션의 구성 요소 ID가 변경되면 새 애플리케이션은 이전 애플리케이션의 변경 가능한 스토리지에 액세스할 수 없습니다.

디바이스에서 애플리케이션을 삭제하면 애플리케이션에 할당된 변경 가능한 스토리지도 삭제됩니다. 동일한 애플리케이션이 디바이스에 다시 로드되면 변경 가능한 스토리지가 비어 있습니다. 그러나 애플리케이션을 삭제하지 않고 업데이트하면 변경 가능한 스토리지 콘텐츠가 유지됩니다.

az sphere device app show-quota 명령은 현재 사용 중인 변경 가능한 스토리지의 양을 표시합니다.

Azure Sphere OS에는 중요한 구성 상태 및 파일 시스템 메타데이터의 손상을 방지하기 위한 전원 손실 보호 메커니즘이 있습니다. 변경 가능한 스토리지 API는 이러한 기능의 이점을 누릴 수 있습니다. 그러나 변경 가능한 스토리지의 실제 콘텐츠는 버퍼가 플러시되는지 여부와 순서에 따라 달라지므로 복구 후 전원 손실 시 보류 중인 모든 변경 내용이 파일 자체에 반영된다는 보장은 없습니다.

다음 Applibs 함수를 사용하여 변경 가능한 스토리지 데이터를 관리할 수 있습니다.

변경 가능한 스토리지 요구 사항

변경 가능한 스토리지를 사용하는 애플리케이션은 적절한 헤더 파일을 포함하고 변경 가능한 스토리지 설정을 애플리케이션 매니페스트에 추가해야 합니다.

변경 가능한 스토리지에 대한 헤더 파일

프로젝트에 스토리지 및 존재하지 않는 헤더를 포함합니다.

#include <unistd.h>
#include <applibs/storage.h>

애플리케이션 매니페스트

이 항목의 API를 사용하려면 애플리케이션 매니페스트MutableStorage 기능을 추가한 다음 필드를 설정 SizeKB 해야 합니다. SizeKB 필드는 변경 가능한 스토리지의 크기를 키비바이트 단위로 지정하는 정수입니다. 최대값은 64이고 스토리지는 디바이스의 지우기 블록 크기에 따라 할당됩니다. 할당은 값이 디바이스의 블록 크기의 전체 배수가 아닌 경우 SizeKB 값을 다음 블록 크기로 반올림하여 수행됩니다.

참고

MT3620의 지우기 블록 크기는 8KB이므로 8의 배수가 아닌 값은 모두 반올림됩니다. 예를 들어 'MutableStorage' 기능에서 12KB를 지정하면 MT3620에서 16KB를 받게 됩니다.

아래 예제에서 MutableStorage 스토리지 기능은 크기가 8KB인 애플리케이션 매니페스트에 추가됩니다.

{
  "SchemaVersion": 1,
  "Name" : "Mt3620App_Mutable_Storage",
  "ComponentId" : "9f4fee77-0c2c-4433-827b-e778024a04c3",
  "EntryPoint": "/bin/app",
  "CmdArgs": [],
   "Capabilities": {
    "AllowedConnections": [],
    "AllowedTcpServerPorts": [],
    "AllowedUdpServerPorts": [],
    "MutableStorage": { "SizeKB": 8 },
    "Gpio": [],
    "Uart": [],
    "WifiConfig": false,
    "NetworkConfig": false,
    "SystemTime": false
  }
}

영구 데이터 쓰기

영구 스토리지에 데이터를 쓰려면 먼저 Applibs 함수 Storage_OpenMutableFile 호출하여 영구 데이터 파일에 대한 파일 설명자를 검색합니다. 그런 다음 함수를 write 호출하여 영구 데이터 파일에 데이터를 씁니다. 작성하려는 데이터의 양이 변경 가능한 스토리지 할당을 초과하면 쓰기 함수가 성공할 수 있습니다. 그러나 기록된 유일한 데이터는 스토리지 할당을 초과하지 않는 부분입니다. 모든 데이터가 기록되도록 하려면 함수 호출의 write 반환 값을 검사 합니다.

영구 데이터 읽기

영구 스토리지 호출에서 데이터를 읽으려면 Storage_OpenMutableFile 영구 데이터 파일에 대한 파일 설명자를 검색한 다음 함수를 read 호출하여 데이터를 읽습니다.

영구 데이터 삭제

영구 스토리지 호출에서 데이터를 삭제하려면 Storage_DeleteMutableFile.