KR20200080234A - 장치 설계를 위한 코드 모듈 선택 - Google Patents

장치 설계를 위한 코드 모듈 선택 Download PDF

Info

Publication number
KR20200080234A
KR20200080234A KR1020207011257A KR20207011257A KR20200080234A KR 20200080234 A KR20200080234 A KR 20200080234A KR 1020207011257 A KR1020207011257 A KR 1020207011257A KR 20207011257 A KR20207011257 A KR 20207011257A KR 20200080234 A KR20200080234 A KR 20200080234A
Authority
KR
South Korea
Prior art keywords
code
module
code module
code modules
list
Prior art date
Application number
KR1020207011257A
Other languages
English (en)
Other versions
KR102368200B1 (ko
Inventor
리처드 데이빗 영
쉬암 크리슈나무르티
로버트 피. 코크란
리처드 배리
Original Assignee
아마존 테크놀로지스, 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 아마존 테크놀로지스, 인크. filed Critical 아마존 테크놀로지스, 인크.
Publication of KR20200080234A publication Critical patent/KR20200080234A/ko
Application granted granted Critical
Publication of KR102368200B1 publication Critical patent/KR102368200B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/33Intelligent editors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2111/00Details relating to CAD techniques
    • G06F2111/20Configuration CAD, e.g. designing by assembling or positioning modules selected from libraries of predesigned modules
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/34Graphical or visual programming

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Stored Programmes (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)

Abstract

장치를 구축하기 위한 코드 모듈을 제공하는 기술이 설명되어 있다. 장치를 설계할 때 사용될 하드웨어 구성요소의 표시가 수신될 수 있다. 장치의 사용 사례가 수신될 수 있다. 하드웨어 구성요소와 호환되는 코드 모듈의 리스트가 제공될 수 있다. 코드 모듈의 리스트는 장치의 사용 사례를 기반으로 할 수 있다. 하드웨어 구성요소와 호환되는 코드 모듈의 리스트로부터 코드 모듈의 선택이 수신될 수 있다. 코드 모듈은 장치를 설계하는데 사용하기 위해 제공될 수 있다.

Description

장치 설계를 위한 코드 모듈 선택
전자 장치 및 컴퓨팅 시스템은 사회의 많은 측면에서 항상 존재하게 되었다. 직장, 가정 또는 학교에서 장치를 찾을 수 있다. 컴퓨팅 시스템은 데이터를 처리하고 저장하기 위한 컴퓨팅 및 데이터 저장 시스템을 포함할 수 있다. 일부 컴퓨팅 시스템은 서비스 제공 업체 환경으로 알려진 중앙 집중식 가상 컴퓨팅 옵션을 제공하기 시작하여, 전체 비용을 줄이고 가용성을 향상시키며 확장성을 개선하고 새로운 응용 프로그램을 배치하는 시간을 단축하고 있다.
통신 기술의 진보는 비교적 간단한 전자 장치조차도 컴퓨터 네트워크를 통해 다른 장치 및 컴퓨팅 시스템과 통신할 수 있게 한다. 예를 들어 사물 인터넷(IoT)은 기존 인터넷 인프라를 사용하여 전 세계에 흩어져 있는 컴퓨팅 장치들의 상호 연결이다. 이러한 장치들은 데이터를 캡처할 수 있고, 장치는 네트워크를 통해 데이터를 중앙 집중식 컴퓨팅 서비스(예를 들어, 서비스 제공자 환경)와 안전하게 통신할 수 있다.
전자 장치(예를 들어, IoT 장치 또는 내장 장치)는 산업 장비, 농기계, 가전 제품, 제조 장치, 산업용 프린터, 자동차, 온도 조절기, 스마트 신호등, 차량, 건물, 등과 같은 다양한 물리적 장치 또는 제품에 포함될 수 있다. 이러한 물리적 장치에는 전자 장치, 소프트웨어, 센서 및 네트워크 연결 기능이 내장되어 있어 물리적 장치가 데이터를 수집하고 보낼 수 있다. 전자 장치(예: IoT 장치, 등)는 환경 모니터링, 농업, 인프라 관리, 산업적 응용, 빌딩 및 홈 자동화, 에너지 관리, 의료 및 건강 관리 시스템, 운송 시스템 등과 같은 여러 응용분야에 유용할 수 있다.
도 1a는 본 기술의 예에 따라 장치를 설계하기 위한 코드 모듈을 제공하기 위한 시스템 및 관련 동작을 도시한다.
도 1b는 본 기술의 예에 따른 서비스 제공자 환경에서 장치 이미지 구축 서비스를 통해 장치를 설계하기 위한 장치 이미지를 제공하기 위한 시스템 및 관련 동작을 도시한다.
도 2는 본 기술의 예에 따른 장치를 설계하기 위한 코드 모듈을 제공하기 위한 네트워크 시스템의 예시이다.
도 3은 본 기술의 예에 따른 장치를 설계하기 위한 코드 모듈을 제공하기 위한 시스템 및 관련 동작을 도시한다.
도 4는 본 기술의 예에 따른 코드 모듈을 테스트하기 위한 시스템 및 관련 동작을 도시한다.
도 5는 본 기술의 예에 따른 보조 장치 이미지에 대한 OTA(over-the-air) 업데이트를 수행하기 위한 시스템 및 관련 동작을 도시한다.
도 6은 코드 모듈을 제공하기 위한 예시적인 방법의 흐름도이다.
도 7은 코드 모듈을 제공하기 위한 다른 예시적인 방법의 흐름도이다.
도 8은 코드 모듈을 제공하기 위한 또 다른 예시적인 방법의 흐름도이다.
도 9는 본 기술의 일례에 따른 서비스 제공자 환경의 블록도이다.
도 10은 본 기술에 채용될 수 있는 컴퓨팅 장치의 예시적인 예시를 제공하는 블록도이다.
IoT 장치와 같은 장치에 대한 코드 모듈을 제공하기 위한 기술이 설명된다. 코드 모듈은 장치의 설계 프로세스 동안 장치에 대해 선택될 수 있다. 코드 모듈(예를 들어, 소프트웨어 모듈, 프로그램 모듈, 기능 모듈, 실행 파일)은 장치에 포함될 하드웨어 구성요소에 해당할 수 있다. 선택 후, 코드 모듈은 장치로(예를 들어, 장치 이미지 내) 전송되어 장치에 설치될 수 있다. 코드 모듈은 장치에 포함된 하드웨어 구성요소가 올바르게 기능하게 할 수 있다. 일 예에서, 코드 모듈은 장치의 하드웨어 구성요소가, 장치에서 실행되는 RTOS(real-time operation system) 또는 다른 유형의 내장된 운영 체제와 정확하게 인터페이스할 수 있게 한다.
일 구성에서, 장치 구성 서비스는 하드웨어 구성요소 리스트로부터 장치 이미지에 포함될 하드웨어 구성요소를 결정할 수 있고, 하드웨어 구성요소는 설계되고 있는 장치에 포함될 수 있다. 장치 구성 서비스에 사용가능한 각 하드웨어 구성요소는 인증 기관(예: 컴퓨팅 서비스 공급자)에 의해 인증되고 사전 승인을 받을 수 있으며, 인증되지 않은 하드웨어 구성요소는 장치 구성 서비스에서 선택할 수 없다. 인증된 하드웨어 구성요소는 장치 구성 서비스에서 로딩할 수 있는 적절한 코드 모듈을 가진 것으로 인증될 수 있다. 하드웨어 구성요소는 마이크로컨트롤러, DSP(digital signal processing) 칩, 센서, 트랜시버, 카메라, 마이크로폰, 스피커 등을 포함할 수 있다. 일 예에서, 장치 구성 서비스는 사용자가 장치에 포함될 하드웨어 구성요소를 선택할 수 있도록, 서비스 제공자 환경을 통해 액세스 가능한 사용자 인터페이스를 통해 하드웨어 구성요소의 리스트를 제공할 수 있다. 따라서, 장치 구성 서비스는 사용자 인터페이스를 통해 수신된 사용자 선택에 기초하여 하드웨어 구성요소를 결정하는데 사용될 수 있다.
대안으로서, 장치 구성 서비스는 사용자 인터페이스를 통해 장치에 대한 장치 성능 정의(device capability definition)를 수신할 수 있고, 장치 성능 정의는 장치의 사용 사례를 기술할 수 있다. 장치의 사용 사례는 온도 조절 장치, 강우 센서, 비디오 스트리밍, 이미지 캡처, 모션 감지 등일 수 있다. 장치 성능 정의에 기초하여, 장치 구성 서비스는 장치에 포함될 하드웨어 구성요소(예를 들어, 비디오 인코더, 고화질(HD) 카메라, 온도 센서 등)를 추천할 수 있다.
일 구성에서, 장치 구성 서비스는 선택된 하드웨어 구성요소와 호환되는 코드 모듈의 리스트를 제공할 수 있다. 코드 모듈의 리스트는 장치 성능 정의에 기초하여 생성될 수 있다. 코드 모듈의 리스트는 사용자가 코드 모듈을 선택할 수 있게 하는 사용자 인터페이스를 통해 제공될 수 있다. 장치 구성 서비스에 사용 가능한 각 코드 모듈은 특정 하드웨어 구성요소와 호환되는 것으로 인증될 수 있다. 또한, 특정 인증 코드 모듈은 개별 하드웨어 구성요소와 호환 가능할 수 있으며, 동일 기능을 가진 상이한 하드웨어 구성요소(예를 들어, 다른 모델 유형 또는 다른 제조사의 하드웨어 구성요소)와 호환되지 않을 수 있다. 코드 모듈은 마이크로컨트롤러 모듈, DSP(digital signal processing) 모듈, 센서 모듈, 트랜시버 모듈, 카메라 모듈, 마이크로폰 모듈, 스피커 모듈, 등을 포함할 수 있다. 코드 모듈은 펌웨어, 장치 드라이버, 실행 코드, 라이브러리, 구성 파일 등을 포함할 수 있다. 다른 구성에서, 장치 구성 서비스는 선택된 하드웨어 구성요소에 기초하여 코드 모듈을 자동으로 검출할 수 있다.
일 구성에서, 장치 구성 서비스는 장치 상에 다운로드하기 위해 선택된 인증 코드 모듈을 제공할 수 있다. 예를 들어, 장치 구성 서비스는 코드 모듈을 사용자 컴퓨팅 장치에 제공할 수 있다. 사용자 컴퓨팅 장치는 장치에 설치될 수 있는 장치 이미지를 생성하기 위해 코드 모듈을 조립할 수 있다. 장치 이미지는 (장치에 포함된 하드웨어 구성요소에 대응하는) 코드 모듈을 포함하는 컴퓨터 파일 또는 이미지 일 수 있다. 장치 이미지의 설치는 서비스 제공자 환경에서 실행되는 서비스에 대한 연결 기능(예를 들어, IoT 서비스에 연결하기 위한 무선 네트워킹 기능)과 같은, 장치 하드웨어에 대응하는 장치 기능을 장치에 제공할 수 있다. 대안으로서, 장치 이미지의 설치는 장치가 로컬 무선 네트워크에서 컴퓨팅 허브에 연결될 수 있게 하고, 컴퓨팅 허브는 서비스 제공자 환경에서 실행되는 서비스에 연결될 수 있다.
도 1a는 장치(130)(예를 들어, IoT 장치)를 설계하기 위한 코드 모듈(114)을 제공하기 위한 예시적인 시스템 및 관련 동작을 도시한다. 코드 모듈(114)은 서비스 제공자 환경(100)에서 동작하는 장치 구성 서비스(110)로부터 제공될 수 있다. 장치 구성 서비스(110)는 설계 프로세스의 선택 가능한 요소로서 하드웨어 구성요소(136) 및 코드 모듈(114)(예를 들어, 소프트웨어 모듈, 프로그램 모듈, 기능 모듈, 실행 모듈))을 사용하여 장치(130)를 설계 및 구성하기 위한 플랫폼을 제공할 수 있다. 장치 구성 서비스(110)는 장치 구성 서비스(110)로부터 수신되도록 사용자 인터페이스(122)(예를 들어, 브라우저 기반 인터페이스의 장치 구성 사용자 인터페이스)를 제공하기 위해 사용자 컴퓨팅 장치(120)와 통신할 수 있다. 대안으로서, 장치 구성 서비스(110)는 사용자 컴퓨팅 장치(120) 상에 로딩된 애플리케이션과 통신할 수 있고, 애플리케이션은 장치 구성 서비스(110)로부터 수신되도록 사용자 인터페이스(122)를 제시할 수 있다.
장치 구성 서비스(110)는 사용자 인터페이스(122)를 통해 사용자 컴퓨팅 장치(120)로부터 수신된 입력에 기초하여 장치(130)에 대한 코드 모듈(114)을 제공할 수 있다. 사용자 컴퓨팅 장치(120)는 유선 또는 무선 연결을 통해 장치(130)에 연결될 수 있다. 장치(130)는 실시간 운영 체제(RTOS)(132)(예를 들어, Free RTOS) 또는 다른 유형의 내장 운영 체제를 실행하도록 구성될 수 있다. RTOS(132)는 감소된 버퍼 지연으로 실시간으로 하드웨어 리소스를 관리하고, 애플리케이션을 호스팅하며, 수신 데이터를 처리할 수 있다. 또한, 장치(130)는 장치 구성 서비스(110)로부터 수신된 코드 모듈(114)에 기초하여 구성될 수 있는 하드웨어 구성요소(136)를 포함할 수 있고, 코드 모듈(114)은 장치(130)상에서 실행되는 RTOS(132)와 호환될 수 있다.
일 구성에서, 장치 구성 서비스(110)는 장치(130)를 설계 및 구축할 때 이용 가능한 하드웨어 구성요소(112)의 리스트를 제공할 수 있다. 장치 구성 서비스(110)는 하드웨어 구성요소(112)의 리스트를 사용자 인터페이스(122)를 통해 사용자 컴퓨팅 장치(120)에 제공할 수 있다. 하드웨어 구성요소(112)의 리스트는 장치(130)를 설계 및 구축할 때 이용 가능한 다양한 유형의 마이크로컨트롤러, 센서, 트랜시버, 카메라, 마이크로폰, 스피커, I/O 인터페이스(예를 들어, USB 컨트롤러), 주변 장치 등을 포함할 수 있다.
일 예에서, 장치 구성 서비스(110)는 사용자 인터페이스(122)를 통해 수신된 기준(예를 들어, 키워드 검색 또는 장치 유형)에 기초하여 하드웨어 구성요소(112)의 리스트를 필터링할 수 있다. 예를 들어, 장치 구성 서비스(110)는 사용자 인터페이스(122)를 통해 수신되는 피드백에 기초하여, 규정된 메모리 및/또는 프로세서 기능을 가진 마이크로컨트롤러, 특정 유형의 센서(예: 주변 광 센서) 또는 특정 해상도의 고화질(HD) 이미지를 캡처하는 카메라 유형 등의 하드웨어 구성요소 리스트를 제공할 수 있다. 장치 구성 서비스(110)는 사용자가 다양한 유형의 하드웨어 구성요소(136)를 비교할 수 있게 하는 규정된 포맷(예를 들어, 테이블 포맷 또는 리스팅 포맷)으로 하드웨어 구성요소(112)의 리스트를 제공할 수 있다.
일례에서, 구성 서비스(110)는 장치 성능 정의에 의해 지정된 장치의 사용 사례에 기초하여 하드웨어 구성요소(112)의 리스트를 필터링할 수 있다. 예를 들어, 사용자는 사용자 인터페이스(122)를 통해 장치(130)의 장치 성능 정의를 규정할 수 있고, 장치 성능 정의는 설계 및 구축되고 있는 장치(130)의 의도 된 사용 사례에 대응할 수 있다. 사용자 인터페이스(122)에 제공되는 하드웨어 구성요소(112)의 리스트는, 따라서, 장치 성능 정의에 기초하여 필터링될 수 있다.
대안으로서, 장치 구성 서비스(110)는 사용자 인터페이스(122)를 통해 사용자 컴퓨팅 장치(120)에 제공되는 하드웨어 구성요소(112)의 리스트를 필터링하지 않을 수 있다. 즉, 장치 구성 서비스(110)는 장치 구성 서비스(110)에 의해 지원되는 모든 하드웨어 구성요소(112)의 리스트를 제공할 수 있다.
일 예에서, 장치 구성 서비스(110)는 하드웨어 구성요소(112)의 리스트로부터 하드웨어 구성요소(136)의 선택을 수신할 수 있다. 장치 구성 서비스(110)는 사용자 인터페이스(122)를 통해 사용자 컴퓨팅 장치(120)로부터 선택을 수신할 수 있다. 선택된 하드웨어 구성요소들(136)은 사용될 것으로 예상되는 하드웨어 구성요소들(136) 또는 장치(130)를 구축하는데 사용되고 있는 하드웨어 구성요소들을 나타낼 수 있다.
일례에서, 선택된 하드웨어 구성요소들(136)은 장치 성능 정의에 의해 지정된 바와 같이 장치(130)의 사용 사례에 대응할 수 있다. 다시 말해서, 장치 성능 정의에 표시된 바와 같이 장치(130)의 용도 또는 목적에 따라(예를 들어, 비디오 스트리밍, 공장 모니터링), 적절한 하드웨어 구성요소(136)(예를 들어, 비디오를 인코딩하기 위한 하드웨어 인코더, 온도 센서, 주변 광 센서)는 사용자 인터페이스(122)를 통해 장치(130)에 대해 선택되거나 식별될 수 있다. 따라서, 사용자는 설계되고 구축되는 장치(130)의 유형에 따라 적절한 하드웨어 구성요소(136)를 선택할 수 있다.
일례에서, 장치 구성 서비스(110)는 선택된 하드웨어 구성요소(136)와 호환되는 코드 모듈(114)의 리스트를 제공할 수 있다. 하드웨어 구성요소(136)의 선택에 기초하여, 장치 구성 서비스(110)는 장치(130)에 대한 선택된 하드웨어 구성요소(136)에 대응하는 코드 모듈(114)을 식별할 수 있다. 장치 구성 서비스(110)는 사용자 인터페이스(122)를 통한 프리젠테이션을 위해 코드 모듈(114)의 리스트를 사용자 컴퓨팅 장치(120)에 제공할 수 있다. 코드 모듈(114)은 마이크로컨트롤러 모듈, 센서 모듈, 트랜시버 모듈, 무선 통신 모듈(예: 블루투스 및 Wi-Fi), 메시징 모듈(예: 메시지 큐 원격 측정 전송(MQTT), 전송 제어 프로토콜 및 인터넷 프로토콜(TCP/IP), 하이퍼텍스트 전송 프로토콜(HTTP)) 카메라 모듈, 마이크 모듈, 스피커 모듈 등을 포함할 수 있다. 코드 모듈(114)은 펌웨어, 장치 드라이버, 실행 코드, 라이브러리, 구성 파일, 운영 체제 등을 포함할 수 있다. 각각의 코드 모듈(114)은 대응하는 하드웨어 구성요소(136)에 링크될 수 있고(예를 들어, 특정 하드웨어 구성요소(136)와 함께 사용 가능한 하나 이상의 코드 모듈(114)이 있을 수 있음), 코드 모듈(114)은 장치(130)에서 동작하도록 대응하는 하드웨어 구성요소(136)를 구성할 수 있다. 장치 구성 서비스(110)는 사용자 인터페이스(122)를 통한 프리젠테이션을 위해 제공된 코드 모듈(114)이 서로 호환되도록 보장할 수 있다.
일례에서, 사용자 인터페이스(122)를 통해 사용자 컴퓨팅 장치(120)에 제공되는 코드 모듈(114)의 리스트는 장치 성능 정의에 표시된 바와 같이 장치(130)의 사용 사례에 의존할 수 있다. 예를 들어, 코드 모듈(114)의 리스트는 장치(130)의 사용 사례에 기초하여 필터링될 수 있다. 또한, 장치 구성 서비스(110)는 코드 모듈(114)에 대한 상황 정보를 제공할 수 있다. 예를 들어, 장치 구성 서비스(110)는 코드 모듈(114) 각각에 대해 칩셋 상에 사용된 메모리의 양에 관한 정보를 포함한다. 이는 코드 모듈(114)이 장치 이미지 크기의 제약 내에 적합할 수 있는지 여부를 설계자가 결정할 수 있게 한다. 일 예에서, 장치 구성 서비스(110)는 사용자에 의해 이용되는 코드 모듈(114)을 포함하는 사용자에 대한 개정 제어 시스템 저장소(revision control system repository)(예컨대, Git 저장소(repository))를 생성할 수 있고, 개정 제어 시스템 저장소는 개정 제어 시스템 저장소에 포함된 코드 모듈(114)에 다른 사용자들도 액세스할 수 있도록 복제 또는 복사될 수 있다.
일 예에서, 장치 구성 서비스(110)는 코드 모듈(114)의 리스트로부터 코드 모듈(114)의 선택을 수신할 수 있다. 또한, 장치 구성 서비스(110)는 장치(130)의 사용 사례에 기초하여, 선택된 코드 모듈(114)에 대한 구성 파라미터 세트(115)를 식별할 수 있다. 예를 들어, 장치 성능 정의에 의해 지정된 사용 사례에 기초하여, 장치 구성 서비스(110)는 선택된 코드 모듈(114)에 대해 특정 구성 파라미터(115)를 추천할 수 있다. 권장 구성 파라미터(115)는 장치(130)에 대해 선택된 코드 모듈(114) 및 특정 하드웨어 구성요소(136)와 연계될 수 있다. 구성 서비스(110)는 사용자 인터페이스(122)를 통해 사용자 컴퓨팅 장치(120)로부터 특정 구성 파라미터(115)의 선택을 수신할 수 있다. 따라서, 장치(130)를 위한 코드 모듈(114)을 단순히 선택하기보다, 코드 모듈(114)은 장치(130)의 사용 사례에 비추어 소정의 구성 파라미터(115)를 갖도록 구성될 수 있다.
일 예로서, 고객은 서비스 제공자 환경(100)에서 호스팅되는 애플리케이션과 통신하도록 구성된, 네트워크 연결된 온도 조절 장치에 대한 일반화된 사양을 장치 구성 서비스(110)에 제공할 수 있다. 고객에 의해 제공된 사양은 온도 센서 및 네트워킹 장치와 함께, 마이크로컨트롤러 및 마이크로컨트롤러와 호환되는 RTOS(132)와 같은 네트워크-연결 온도 조절 장치에 사용될 수 있는 하드웨어 구성요소(136)의식별을 위해 사용될 수 있다.
일 예에서, 장치 구성 서비스(110)는 코드 모듈(114) 및 구성 파라미터(115)를 사용자 컴퓨팅 장치(120)에 제공할 수 있다. 사용자 컴퓨터 장치(120)를 사용하는 개발자는 장치(130)에 대한 추가 사용자 정의(custom) 코드를 제공할 수 있고, 사용자 정의 코드는 코드 모듈(114) 및 구성 파라미터(115)에 추가될 수 있다. 그 후, 사용자 컴퓨팅 장치(120)는 선택된 코드 모듈(114)을 선택된 구성 파라미터(115)와 조립하여, 장치 이미지(116)를 생성할 수 있다. 사용자 컴퓨팅 장치(120)는 사용자 컴퓨팅 장치(120) 상에서 실행되는 통합 개발 환경(IDE)을 사용하여 장치 이미지(116)를 생성하기 위해, 선택된 코드 모듈(114) 및 선택된 구성 파라미터(115)를 조립(예를 들어, 컴파일, 링크 또는 결합)할 수 있다. 장치 이미지(116)는 선택된 코드 모듈(114) 및 구성 파라미터(115)를 갖는 컴퓨터 파일(예컨대, 디지털 이미지, 설치 이미지, 또는 압축 파일, 가령, ZIP 파일 또는 파일 그룹)일 수 있다. 조립 또는 컴파일 후, 장치 이미지(116)는 유선 또는 무선 연결을 통해 사용자 컴퓨팅 장치(120)로부터 장치(130)로 전송될 수 있다. 장치 이미지(116)는 소프트웨어 구성요소를 설치하고 선택된 하드웨어 구성요소(136)를 장치(130)에서 구성하는데 이용될 수 있다. 예를 들어, 장치 이미지(116)에 기초하여, 하드웨어 구성요소(136)는 장치(130)에서 실행되는 RTOS(132)와 인터페이스하도록 구성될 수 있다. 장치 이미지(116)는 장치(130) 상에서 실행되는 RTOS(132) 및 하드웨어 구성요소(136)에 대한 핵심 기능을 제공하기 위한 기본 빌드 패키지 또는 설치 패키지일 수 있다. 따라서, 장치 이미지(116)가 장치(130) 상에 로딩된 후, 사용자 컴퓨팅 장치(120) 상에서 실행되는 IDE는 장치(130)에 의해 수행될 특정 기능 또는 동작에 연동된 추가적인 사용자 정의 코드를 개발하는데 이용될 수 있다.
일례에서, 장치 구성 서비스(110)는 칩셋에 기초하여 장치(130)에 대한 선택 가능한 구성을 결정할 수 있다. 장치(130)를 위해 선택된 하드웨어 구성요소(136)에 따라, 장치 구성 서비스(110)는 장치(130)에서 하드웨어 구성요소(136)를 동작 시키기에 적절한 소프트웨어를 선택할 수 있다. 장치 구성 서비스(110)는 완전히 모듈식의 다운로드가능한 소프트웨어 스택을 제공할 수 있으며, 적절한우 소프트웨어가 요청에 따라 하드웨어 구성요소(136)를 위해 구성된다.
일 예에서, 사용자 컴퓨팅 장치(120) 상에서 실행되는 IDE는 장치 구성 서비스(110)에 의해 인증되지 않은 추가 코드 모듈을 개발 또는 통합하기 위해 이용될 수 있다. 이 예에서, IDE는 추가 코드 모듈에 대한 심층(shim layers)(의 프로그래밍)을 생성하는데 이용될 수 있고, 이는 추가 코드 모듈이 장치(130)상에서 실행되는 RTOS와 호환되게 할 수 있다.
또한, 장치 구성 서비스(110)는 코드 모듈을 제출하기 위한 오픈 소스 플랫폼을 제공할 수 있으며, 이는 그 후 테스트 및 인증될 수 있다. 이들 코드 모듈은 장치 구성 서비스(110)에 의해 제공되는 기존 코드 모듈에 비추어 테스트될 수 있다(예를 들어, 새로 생성된 심(shims)의 인터페이스는 장치 구성 서비스(110)에 의해 테스트될 수 있다). 인증된 후, 이들 코드 모듈은 장치(130)를 설계 및 구축하는 다른 고객이 장치 구성 서비스(110)를 이용가능하게 할 수 있다.
도 1b는 서비스 제공자 환경(100)에서 장치 이미지 구축 서비스(140)를 통해 장치(130)를 구축하기 위한 장치 이미지(116)를 제공하기 위한 예시적인 시스템 및 관련 동작을 도시한다. 예를 들어, 장치 구성 서비스(110)는 하드웨어 구성요소(112)의 리스트로부터 하드웨어 구성요소의 선택을 수신할 수 있다. 장치 구성 서비스(110)는 코드 모듈(114) 및 구성 파라미터(115)의 선택을 수신할 수 있다. 코드 모듈(114) 및 구성 파라미터(115)는 장치 이미지(116)를 생성할 수 있는 장치 이미지 구축 서비스(140)에 제공될 수 있다. 장치 이미지(142)는 사용자 컴퓨팅 장치(120)에 제공될 수 있다. 사용자 컴퓨팅 장치(120)는 장치 이미지(116)를 장치(130)로 전송할 수 있고, 장치 이미지(116)는 장치(130)에 설치될 수 있다. 대안으로서, 장치 이미지(142)는 장치 이미지 구축 서비스(140)로부터 장치(130)로 직접 제공될 수 있다.
과거의 솔루션에서, 장치 개발자들(예를 들어, IoT 장치 개발자들)은 장치들 및 장치들을 동작시키기 위한 소프트웨어 계층들을 설계 및 구축하는데 과도한 시간을 소비할 수 있었다. 예를 들어, 장치 개발자는 장치에서 사용할 칩셋 코드를 작성하는 데 통상적으로 3-6 개월을 소요하고 있다. 장치 개발자는 장치에 구현된 하드웨어 구성요소에 따라 개별 하드웨어 사양 문서를 참조해야할 수 있다. 그런 다음 장치 개발자는 장치를 설계하고 구축할 때 다양한 하드웨어 구성요소 간의 호환성을 보장하기 위해 추가 시간을 소비할 수 있다. 일반적으로 장치 개발자는 기본 기능(예: 메모리 할당, CPU 예약, 기본 주변 장치(예: USB, 카메라 등))을 얻는 데 과도한 시간을 소비하지만, 이는 장치의 용도 또는 목적에 따라 사용자 정의 기능 개발에 소요된 시간은 포함하지 않았다. 결과적으로 과거의 솔루션에서는 장치 개발이 번거롭고 많은 시간 및 자원이 소요되었다.
또한, 과거의 해결책에서, 상이한 하드웨어 구성요소가 새로운 버전의 장치에 사용될 때, 장치에 사용된 칩셋(들)에 대한 코드를 수동으로 재작성했어야 했다. 예를 들어, 하드웨어 구성요소 공급 업체가 변경되고 그 결과 새 버전의 장치에서 상이한 하드웨어 구성요소가 사용된 경우(장치의 기능이 장치의 버전간에 동일하게 유지된 경우에도) 새로운 하드웨어 구성요소에 맞게 장치의 코드를 수동으로 다시 작성해야하므로 장치 개발 프로세스가 지나치게 번거로워진다.
본 기술에서, 장치 구성 서비스 또는 장치 개발자는 하드웨어 구성요소의 리스트로부터 선택할 수 있다. 하드웨어 구성요소는 장치 구성 서비스에 의해 이전에 승인되었을 수 있다. 장치 구성 서비스 또는 장치 개발자는 하드웨어 구성요소와 호환되는 코드 모듈 리스트에서 선택할 수 있으며, 코드 모듈 리스트는 장치의 사용 사례에 맞게 조정될 수 있다. 예를 들어, 장치 개발자는 사용자 인터페이스를 통해, 개발 중인 장치의 사용 사례 및 선택된 하드웨어 구성요소와의 호환성에 따라 코드 모듈을 선택할 수 있다. 각각의 코드 모듈은 특정 하드웨어 구성요소에 링크된 코드를 포함할 수 있다. 코드 모듈이 선택된 후, 코드 모듈을 포함하도록 장치 이미지가 생성된 후, 장치 이미지가 장치에 다운로드되어 설치될 수 있다. 따라서 장치 개발자는 장치의 각 하드웨어 구성요소에 대한 코드를 수동으로 작성하지 않아도 된다. 대신, 장치 개발자는 승인된 하드웨어 구성요소 리스트에서 하드웨어 구성요소를 선택한 다음, 이러한 하드웨어 구성요소에 해당하는 코드 모듈을 자동으로 얻을 수 있다. 결과적으로, 장치 개발 프로세스는 단순화될 수 있고 시간 단축을 수반할 수 있다.
도 2는 서비스 제공자 환경(200)에서 본 기술의 일례의 구성요소들을 도시한다. 서버 제공자 환경(200)은 장치 구성 서비스(210)를 운영할 수 있다. 장치 구성 서비스(210)는 장치(280)(가령, IoT 장치)에 코드 모듈(244)을 제공하기 위해 하나 이상의 컴퓨팅 인스턴스(220) 및 데이터 저장소(들)(data store(s))(240)를 이용할 수 있다. 장치 구성 서비스(210)는 사용자 컴퓨팅 장치(270)를 통해 장치(280) 상에 다운로드 및 설치를 위한 코드 모듈(244)을 제공할 수 있다. 장치 구성 서비스(210)는 네트워크(260)를 통해 사용자 컴퓨팅 장치(270)와 통신할 수 있다. 사용자 컴퓨팅 장치(270)는 사용자가 장치(280)에서 사용하기 위해 다양한 코드 모듈(244) 및 구성 파라미터(246)를 선택할 수 있게 하는 사용자 인터페이스(272)를 포함할 수 있다.
일 예에서, 데이터 저장소(240)는 하드웨어 구성요소(242)의 리스트를 포함할 수 있다. 하드웨어 구성요소(242)의 리스트는 장치 구성 서비스(210)에 의해 제공되는 하드웨어 구성요소(282)를 포함할 수 있고, 이러한 하드웨어 구성요소(282)는 장치(280)를 설계 및 구축할 때 사용될 수 있다. 예를 들어, 하드웨어 구성요소(282)는 해당 코드 모듈이 장치 구성 서비스(210)에 의해 이미 테스트되고 인증된 하드웨어 구성요소를 포함할 수 있다. 하드웨어 구성요소(242)의 리스트는 장치 구성 서비스(210)에 의해 테스트 및 인증하지 받지 못한 대응하는 코드 모듈에 대한 하드웨어 구성요소를 포함하지 않을 수 있다. 하드웨어 구성요소(242)의 리스트는 장치(280)를 설계할 때 사용될 수 있는 다양한 부류의 하드웨어 구성요소(282)를 포함할 수 있다. 예를 들어, 하드웨어 구성요소(242)의 리스트는 무선 통신 구성요소, 가령, Wi-Fi 칩셋, Bluetooth 칩셋, BLE(Bluetooth Low Energy) 칩셋, ZigBee 칩셋 또는 LTE(Long Term Evolution) 칩셋을 포함할 수 있다. 하드웨어 구성요소(242)의 리스트는 다양한 레벨의 프로세싱 및 메모리 능력을 갖는 다양한 유형의 임베디드 마이크로컨트롤러 및 SoC(systems on chip)를 포함할 수 있다. 하드웨어 구성요소(242)의 리스트는 다양한 유형의 센서, 가령, 온도 센서, 근접 센서, 위치 센서, 광 센서, 수분/습도 센서, 모션 센서, 가속 및 방위 센서, 마이크로폰, 화학/가스 센서 등을 포함할 수 있다. 하드웨어 구성요소(242)의 리스트는 다양한 유형의 카메라 및 비디오 레코더를 포함할 수 있다. 또한, 하드웨어 구성요소(242)의 리스트는 다양한 유형의 디스플레이 스크린, 스피커 시스템, 전력 유닛(예를 들어, 배터리), 및 장치(280)에 포함될 수 있는 다른 하드웨어 구성요소(242)를 포함할 수 있다.
일례에서, 데이터 저장소(240)는 코드 모듈(244)(예를 들어, 소프트웨어 모듈, 프로그램 모듈, 기능 모듈, 실행 파일)을 포함할 수 있다. 코드 모듈(244)은 장치 구성 서비스(210)에 의해 제공될 수 있고 코드 모듈(244)은 장치(280)를 설계 및 구축하는데 이용 가능한 하드웨어 구성요소(282)에 대응할 수 있다. 코드 모듈(244)은 장치(280) 상에 설치될 모듈형 소프트웨어 구성요소일 수 있다. 코드 모듈(244)은 하드웨어 구성요소(282)의 특정 유형 및/또는 모델에 대응할 수 있다. 코드 모듈(244)은 펌웨어, 장치 드라이버, 실행 코드, 라이브러리, 구성 파일 등을 포함할 수 있다. 코드 모듈(244)은 대응하는 하드웨어 구성요소(282)가 장치(280)에서 올바르게 기능할 수 있도록 장치(280)에 설치되거나 복사될 수 있다. 코드 모듈(244)은 무선 통신 모듈(예를 들어, 블루투스 모듈 또는 Wi-Fi 모듈), 메시징 프로토콜(예: MQTT, TCP/IP 또는 HTTP)을 지원할 수 있는 메시징 모듈, 마이크로컨트롤러 모듈, 센서 모듈, 카메라 모듈, 비디오 레코더 모듈, 디스플레이 화면 모듈, 스피커 시스템 모듈, 전원 관리 모듈, 또는 장치(280)에 포함될 수 있는 하드웨어 구성요소(282)(가령, 기본 하드웨어 또는 하드웨어 주변 장치)의 기능을 구현할 수 있는 다른 유형의 소프트웨어를 포함할 수 있다.
일 예에서, 데이터 저장소(240)는 구성 파라미터(246)를 포함할 수 있다. 구성 파라미터(246)는 코드 모듈(244)과 관련될 수 있다. 예를 들어, 구성 파라미터(246)는 코드 모듈(244)에서 규정된 다양한 설정, 파라미터, 구성, 변수 등을 포함할 수 있다. 구성 파라미터들(246)은 장치(280)에 대한 장치 성능 정의(250)에 기초하여 정의될 수 있다. 따라서, 구성 파라미터들(246)은 장치(280)의 사용 사례에 기초하여 정의될 수 있다. 일 예에서, 장치 구성 서비스(210)는 사용자 인터페이스(272)를 통해 사용자 컴퓨팅 장치(270)에 일련의 질문을 제공할 수 있고, 코드 모듈(244)에 대한 구성 파라미터(246)는 사용자 컴퓨팅 장치(270)로부터 수신된 사용자 입력에 기초하여 선택되거나 구성될 수 있다. 예로서, 코드 모듈(244)에 대한 구성 파라미터(246)는 장치(280) 내의 대응하는 하드웨어 구성요소(282)가 온도 감지, 비디오 스트리밍, 농기계, 등을 지원하는데 사용되는지에 좌우될 수 있다.
일 예에서, 데이터 저장소(240)는 종속성 트리(248)를 포함할 수 있다. 종속성 트리(248)는 장치(280)를 설계할 때 호환 가능한 복수의 하드웨어 구성요소(282)에 복수의 코드 모듈(244)을 매핑할 수 있다. 종속성 트리(248)는 어떤 코드 모듈(244)이 규정된 하드웨어 구성요소(282)와 호환되는지를 또한 표시할 수 있다. 또한, 종속성 트리(248)는 어느 코드 모듈(244)이 다른 코드 모듈(244)과 호환되는지 또는 이에 의존 하는지를 나타낼 수 있다. 이는 장치(280) 상에서 동작하기 위해 어떤 코드 모듈(244)이 다수의 종속성을 가짐을 나타낼 수 있다. 종속성 트리(248)에서 특정 코드 모듈(244) 사이의 종속성 링크가 없다는 것은 그러한 특정 코드 모듈(244)이 서로 호환되지 않음을 나타낼 수 있다. 따라서, 코드 모듈(244)은 종속성 트리(248)에 따라 장치 이미지(248)에 포함되도록 선택되지 않을 수 있다.
비 제한적인 예로서, 종속성 트리(248)는 마이크로컨트롤러가 특정 블루투스 칩셋 및 특정 센서와 호환 가능함을 나타낼 수 있고, 따라서 마이크로컨트롤러 코드 모듈은 대응하는 블루투스 코드 모듈 및 센서 코드 모듈과 호환 가능하다. 종속성 트리(248)는 또한 블루투스 모듈과 센서 모듈이 서로 호환 가능함을 나타낼 수 있다. 대안으로서, 종속성 트리(248)는 블루투스 모듈과 센서 모듈이 각각 마이크로컨트롤러 코드 모듈과 호환 가능하지만 블루투스 모듈과 센서 모듈이 서로 호환되지 않음을 나타낼 수 있다. 따라서, 이 경우에, 이 특정 블루투스 칩셋은 장치(280)를 설계할 때 이 특정 센서와 함께 사용되지 않을 수 있다.
일 예에서, 데이터 저장소(240)는 장치 성능 정의(250)를 포함할 수 있다. 장치 성능 정의(250)는 장치 능력 및 장치(280)의 사용 사례를 정의할 수 있다. 장치(280)의 장치 성능 정의(250)는 사용자 컴퓨팅 장치(270) 상의 사용자 인터페이스(272)를 통해 수신될 수 있다. 장치 성능 정의(250)는 장치(280)와 관련된 사용 사례, 용도 또는 목적(예를 들어, 온도 캡처, 물 감지, 침입 감지, 오디오 스트리밍, 비디오 스트리밍, 이미지 캡처)을 정의할 수 있다. 장치 성능 정의(250)는 장치 구성 서비스(210)로부터 사용자 인터페이스(272)를 통해 사용자 컴퓨팅 장치(270)에 제공되는 일련의 질문에 응답하여 수신된 사용자 입력에 기초하여 정의될 수 있다. 장치 성능 정의(250)는 장치(280)가 사용될 위치 또는 세팅 유형(가령, 농장, 공장, 가정)을 정의할 수 있다. 장치 성능 정의(250)는 장치(280)에 의해 수집 및 업로드될 데이터의 유형(예를 들어, 온도 데이터, 수분 데이터, 모션 데이터 및 이미지 데이터)을 정의할 수 있고, 장치 사양 정의(250)는 데이터의 수집 및 업로드를 위한 주기성을 규정할 수 있다. 장치 성능 정의(250)는 또한 장치(280)가 특정 위치에서 유사한 장치(280)들의 그룹 내에서 기능하는지 여부를 또한 정의할 수 있다.
장치 구성 서비스(210)에 의해 운영되는 컴퓨팅 인스턴스(들)(220)는 장치(280)에 코드 모듈(244)을 제공하기 위해 다수의 모듈을 이용할 수 있다. 컴퓨팅 인스턴스(들)(220)는 하드웨어 구성요소 선택 모듈(222), 코드 선택 모듈(224), 코드 전달 모듈(226), 및 상세하게 논의되지 않은 다른 애플리케이션, 서비스, 프로세스, 시스템, 엔진 또는 기능을 포함할 수 있다.
하드웨어 구성요소 선택 모듈(222)은 설계되는 장치(280)에 대한 하드웨어 구성요소(282)를 식별하도록 구성될 수 있다. 하드웨어 구성요소 선택 모듈(222)은 사용자 인터페이스(272)를 통해 사용자 컴퓨팅 장치(270)로부터 수신된 선택에 기초하여 하드웨어 구성요소(282)를 식별할 수 있다. 예를 들어, 사용자는 장치(280)의 목적 또는 사용 사례를 달성하기 위해 하드웨어 구성요소(282)의 선택을 제공할 수 있다. 대안으로서, 하드웨어 구성요소 선택 모듈(222)은 사용자 인터페이스(272)를 통해 사용자 컴퓨팅 장치(270)로부터 수신된 사용 사례 및 장치 성능 정의(250)에 기초하여 특정 하드웨어 구성요소(282)를 추천하거나 자동으로 선택할 수 있다.
코드 선택 모듈(224)은 설계되는 장치(280)에 대한 코드 모듈(244)을 식별하도록 구성될 수 있다. 코드 선택 모듈(224)은 장치(280)를 위해 선택된 하드웨어 구성요소(282)와 관련된 코드 모듈(244)을 자동으로 식별할 수 있다. 대안으로서, 코드 선택 모듈(224)은 이미 선택된 하드웨어 구성요소(282)와 호환되는 코드 모듈(244)의 리스트를 제공할 수 있고, 코드 선택 모듈(224)은 사용자 인터페이스(272)를 통해 사용자 컴퓨팅 장치(270)로부터 수신된 사용자 입력에 기초하여 특정 코드 모듈(244)을 식별할 수 있다. 사용자 컴퓨팅 장치(270)에 제공되는 코드 모듈(244)의 리스트는 장치 성능 정의(250)에서 규정된 바와 같이, 장치(280)의 사용 사례에 기초하여 맞춤화 또는 필터링될 수 있다. 또한, 코드 선택 모듈(224)은 사용자 컴퓨팅 장치(270)로부터 사용자 인터페이스(272)를 통해 수신된 사용자 입력에 기초하여 코드 모듈(244)에 대한 다양한 구성 파라미터(246)를 선택할 수 있다. 예를 들어, 코드 선택 모듈(224)은 장치 성능 정의(250)에 규정된 바와 같이, 장치(280)의 사용 사례에 맞게 맞춤화되도록 구성 파라미터(246)를 선택할 수 있다.
코드 전달 모듈(226)은 네트워크(260)를 통해 선택된 코드 모듈(244) 및 선택된 구성 파라미터(246)를 사용자 컴퓨팅 장치(270)에 제공할 수 있다. 코드 전달 모듈(226)은, 사용자 컴퓨팅 장치(270)를 이용하여 개발자가 코드 모듈(244) 및 구성 파라미터(246)로부터 장치 이미지를 설계 및 생성할 수 있도록, 코드 모듈(244) 및 구성 파라미터(246)를 제공할 수 있다. 그 다음에 장치 이미지가 장치(280)에 로딩될 수 있다.
사용자 인터페이스(272)를 갖는 사용자 컴퓨팅 장치(270)는 예를 들어 프로세서 기반 시스템일 수 있다. 사용자 컴퓨팅 장치(270)는 데스크탑 컴퓨터, 랩탑 또는 노트북 컴퓨터, 태블릿 컴퓨터, 핸드 헬드 컴퓨터, 워크스테이션, 네트워크 컴퓨터, 또는 유사한 능력을 가진 다른 장치를 포함할 수 있지만, 이에 제한되지는 않는다.
장치(280)(예를 들어, IoT 장치)는 예를 들어 프로세서 기반 시스템 또는 내장 시스템일 수 있다. 비제한적인 예로서, 장치(280)는 소비자 제품(예를 들어, 밥솥, 텔레비전, 프린터 또는 스캐너), 홈 자동화 제품(예를 들어, 스마트 온도 조절기, 스마트 냉장고, 난방, 에어컨 등), 제조 장치, 농기계, 공장 장치, 산업용 금속 스탬핑 장치, 산업용 로봇, 센서, 드론 또는 고유 식별자를 할당받은, 그리고 네트워크(260)를 통해 데이터를 전달할 수 있는 기타 장치를 포함할 수 있다. 상용 장치도 장치(280)의 정의에 포함될 수 있고, 상업용 인쇄기, 상업용 냉동고, 상업용 가마, 상업용 믹서 또는 기타 상업용 장비를 포함한다. 장치(280)는 기계 또는 시스템에 전자 제어를 제공하는 다른 유형의 내장 장치일 수 있다.
서비스 제공자 환경(200) 내에 포함된 다양한 프로세스 및/또는 다른 기능은 하나 이상의 메모리 모듈과 통신하는 하나 이상의 프로세서에서 실행될 수 있다. 서비스 제공자 환경(200)은 예를 들어 하나 이상의 서버 뱅크 또는 컴퓨터 뱅크 또는 다른 장치군에 배열된 다수의 컴퓨팅 장치를 포함할 수 있다. 컴퓨팅 장치는 하이퍼바이저, VMM(Virtual Machine Manager) 및 기타 가상화 소프트웨어를 사용하여 컴퓨팅 환경을 지원할 수 있다.
용어 "데이터 저장소"는 임의의 중앙 집중식, 분산형, 또는 클러스터 환경으로 임의의 조합 및 개수의 데이터 서버, 관계형 데이터베이스, 객체 지향 데이터베이스, 클러스터 저장 시스템, 데이터 저장 장치, 데이터웨어 하우스, 플랫 파일 및 데이터 스토리지 구성을 포함할 수 있는, 데이터를 저장, 액세스, 조직화 및/또는 불러올 수 있는 임의의 장치 또는 장치들의 조합을 지칭할 수 있다. 데이터 저장소의 저장 시스템 구성요소는 SAN(Storage Area Network), 가상화 저장 네트워크, 휘발성 또는 비휘발성 RAM, 광학 매체 또는 하드 드라이브 타입 매체와 같은 저장 시스템을 포함할 수 있다. 데이터 저장소는 알다시피 복수의 데이터 저장소를 나타낼 수 있다.
네트워크(260)는 인트라넷, 인터넷, 로컬 네트워크, 광역 네트워크, 무선 데이터 네트워크, 또는 임의의 다른 이러한 네트워크 또는 이들의 조합을 포함하는 임의의 유용한 컴퓨팅 네트워크를 포함할 수 있다. 이러한 시스템에 이용되는 구성요소는 선택된 네트워크 및/또는 환경의 유형에 적어도 부분적으로 의존할 수 있다. 네트워크를 통한 통신은 유선 또는 무선 연결 및 이들의 조합에 의해 가능할 수 있다.
도 2는 이 기술과 관련하여 소정의 처리 모듈이 논의될 수 있고 이들 처리 모듈이 컴퓨팅 서비스로서 구현될 수 있음을 도시한다. 하나의 예시적인 구성에서, 모듈은 서버 또는 다른 컴퓨터 하드웨어에서 실행되는 하나 이상의 프로세스를 갖는 서비스로 간주될 수 있다. 이러한 서비스는 요청을 수신하는, 그리고 다른 서비스 또는 소비자 장치에 출력을 제공할 수 있는, 중앙 호스팅 기능 또는 서비스 응용프로그램일 수 있다. 예를 들어, 서비스를 제공하는 모듈은 서버, 가상화 서비스 환경, 그리드 또는 클러스터 컴퓨팅 시스템에서 호스팅되는 주문형 컴퓨팅으로 간주될 수 있다. 제 2 모듈이 제 1 모듈에 요청을 전송하고 제 1 모듈로부터 출력을 수신할 수 있도록 API가 각각의 모듈에 제공될 수 있다. 이러한 API는 또한 제3자가 모듈과 인터페이싱하여 요청을 하고 모듈로부터 출력을 받을 수 있도록 한다. 도 2는 상기 기술들을 구현할 수 있는 시스템의 예를 도시하며, 많은 다른 유사하거나 상이한 환경이 가능하다. 위에서 논의되고 예시된 예시적인 환경은 단지 대표적인 것이며 제한적이지 않다.
도 3은 장치(330)(예를 들어, IoT 장치)를 구축하기 위한 코드 모듈(316)을 제공하기 위한 예시적인 시스템 및 관련 동작을 도시한다. 코드 모듈(316)은 서비스 제공자 환경(300)에서 동작하는 장치 구성 서비스(310)로부터 제공될 수 있다. 장치 구성 서비스(310)는 장치 구성 서비스(310)로부터 수신되도록 사용자 인터페이스(322)(예를 들어, 장치 구성 사용자 인터페이스)를 제공하기 위해 사용자 컴퓨팅 장치(320)와 통신할 수 있다. 대안으로서, 장치 구성 서비스(310)는 사용자 컴퓨팅 장치(320)상에서 실행되는 애플리케이션과 통신할 수 있고, 애플리케이션은 장치 구성 서비스(310)로부터 수신되도록 사용자 인터페이스(322)를 제시할 수 있다. 장치 구성 서비스(310)는 사용자 인터페이스(322)를 통해 사용자 컴퓨팅 장치(320)로부터 수신된 사용자 입력에 기초하여 장치(330)에 대한 코드 모듈(316)을 제공할 수 있다.
일 예에서, 장치 구성 서비스(310)는 사용자 인터페이스(322)를 통해 사용자 컴퓨팅 장치(320)로부터 장치 성능 정의(312)를 수신할 수 있다. 장치 성능 정의(312)는 장치(330)의 사용 사례를 정의할 수 있다. 예를 들어, 장치 성능 정의(312)는 장치(330)가 온도 감지, 비디오 스트리밍, 공장 모니터링 등에 사용될 것임을 나타낼 수 있다.
따라서, 장치 구성 서비스(310)는 장치(330)를 설계 및 구축하기 위한 하드웨어 구성요소(336) 및 호환 가능한 코드 모듈(316)을 나타내는 장치 패키지를 추천할 수 있다. 예를 들어, 장치 구성 서비스(310)는 이전에 사용된 장치 패키지(318)의 데이터 저장소(317)에 대한 액세스에 기초하여 권장 장치 패키지를 식별할 수 있다. 다른 사용자는 (특정 사용 사례에 대해 이전에 사용된 하드웨어 구성요소 및 코드 모듈을 나타내는) 자신의 장치 패키지를 데이터 저장소(317)에 업로드할 수 있으며, 이 정보는 장치 구성 서비스(310)에 액세스 가능할 수 있다. 예를 들어, 장치 구성 서비스(310)는 사용자에 의해 이용된 이전에 사용된 장치 패키지(318)(코드 모듈을 포함할 수 있음)를 포함하는 사용자에 대한 개정 제어 시스템 저장소(가령, Git 저장소)를 생성할 수 있고, 개정 제어 시스템 저장소는 개정 제어 시스템 저장소에 포함된 (코드 모듈을 포함할 수 있는) 이전에 사용된 장치 패키지(318)에 다른 사용자가 액세스할 수 있도록 복제 또는 복사될 수 있다. 장치 구성 서비스(310)는 장치 성능 정의(312)의 기능에 의해 정의된 바와 같이, 장치(330)의 사용 사례에 대응하는 이전에 사용된 장치 패키지(318)를 검색할 수 있다. 장치 구성 서비스(310)가 (예를 들어, 장치 패키지와 관련된 태그, 필드, 키워드 또는 다른 디스크립터에 기초하여) 장치(330)의 사용 사례와 유사하거나 일치하는 이전에 사용된 장치 패키지(318)를 데이터 저장소(317)에서 식별할 때, 장치 구성 서비스(310)는 장치(330)를 설계 및 구축할 때 유사한 장치 패키지를 추천할 수 있다. 다시 말해서, 장치 구성 서비스(310)에 의해 추천되는 장치 패키지는 장치(330)의 특정 사용 사례에 맞춘 하드웨어 구성요소(336) 및 호환 가능한 코드 모듈(316)을 나타낼 수 있다. 예를 들어, 이러한 권장 하드웨어 구성요소(336)는 장치(330)에 대한 처리 및 메모리 사양, 장치(330)에 대한 센서 사양(예를 들어 온도 센서, 모션 검출기), 장치(330)의 무선 통신 사양(예: Bluetooth, Wi-Fi), 장치(330)의 메시징 또는 네트워킹 사양(예: MQTT, TCP/IP), 등을 고려할 수 있다. 장치 구성 서비스(310)는 장치 성능 정의(312)를 고려하여 하드웨어 구성요소(336) 및 코드 모듈(316)의 장단점에 대한 정보를 제공할 수 있다.
일 예에서, 장치 구성 서비스(310)는 사용자 컴퓨팅 장치(320)에 의해 지정된 구현 정의에 기초하여 권장 하드웨어 구성요소(336)를 정의하기 위해 장치 패키지를 선택할 수 있다. 예를 들어, 장치 구성 서비스(310)는 구현예에 기초하여 고급 하드웨어(가령, 프로세싱 및 메모리 성능이 우수한 하드웨어 구성요소)를 선택할 수 있고, 또는 대안으로서, 장치 구성 서비스(310)는 구현예에 기초하여 저사양 하드웨어 구성요소(336)(예를 들어, 비용 절감형 하드웨어 구성요소)를 선택할 수 있다.
일 예에서, 장치 구성 서비스(310)는 추천된 장치 패키지를 사용자 컴퓨팅 장치(320)에 제공할 수 있다. 장치 구성 서비스(310)는 사용자 인터페이스(322)를 통해 사용자 컴퓨팅 장치(320)로부터 추천된 장치 패키지의 선택을 미리 수신했을 수 있다. 이 예에서, 장치 구성 서비스(310)는 장치(330)에서 사용하기 위해 장치 패키지와 관련된 코드 모듈(316)을 제공할 수 있다.
대안적인 예에서, 장치 구성 서비스(310)는 장치 패키지와 관련없는 대체 코드 모듈(316)에 대한 요청과 함께 사용자 컴퓨팅 장치(320)로부터 추천 장치 패키지의 선택을 수신할 수 있다. 이 예에서, 장치 구성 서비스(310)는 장치(330) 상에서 사용하기 위한 대체 코드 모듈(316)을 제공할 수 있다. 즉, 사용자 컴퓨팅 장치(320)는 사용자 인터페이스(322)를 통해 장치 패키지와 관련된 코드 모듈(316)을 수용할 수 있거나, 또는 대안으로서, 사용자 컴퓨팅 장치(320)는 사용자 인터페이스(322)를 통해 장치 패키지와 관련된 일부 코드 모듈을 수정할 수 있다. 또한, 사용자는 권장 장치 패키지와 관련된 하드웨어 구성요소(336) 각각을 사용하는 것으로 제한되지 않을 수 있다. 오히려, 사용자는 장치 패키지에 표시된 소정의 하드웨어 구성요소(336)를 사용할 수 있고, 특정 장치 패키지에 포함되지 않은 대체 하드웨어 구성요소(336)를 선택하여, 권장 장치 패키지가 장치(330)의 설계 및 구축을 위한 출발점을 제공할 수 있게 된다.
도 4는 코드 모듈(440)을 테스트하기 위한 예시적 시스템 및 관련 동작을 도시한다. 코드 모듈(440)은 서비스 제공자 환경(400)에서 동작하는 장치 구성 서비스(410)에서 테스트 모듈(420)을 사용하여 테스트될 수 있다. 일 예에서, 수백 개의 코드 모듈(440)이, 장치를 설계하고 제작할 때, 고객에 의해 선택 및 활용될 수 있다. 코드 모듈(440)은 장치 구성 서비스(410)의 데이터 저장소(430)에 저장된 종속성 트리(432)에 매핑될 수 있다. 종속성 트리(432)는 코드 모듈(440) 사이의 종속성을 매핑할 수 있다. 코드 모듈(440)의 수가 시간에 따라 증가함에 따라, 코드 모듈(440)의 테스트와 관련된 복잡성이 증가한다. 따라서, 코드 모듈(440)은 코드 모듈(440)의 특정 조합이 기능할 가능성을 향상시키면서 복잡성을 감소시키는 테스트 매트릭스를 사용하여 테스트될 수 있다. 일례에서, 코드 모듈(440)이 테스트 모듈(420)에 의해 성공적으로 테스트된 경우, 이들 코드 모듈(440)은 장치 구성 서비스(410)에 의해 인증되고 이용 가능해질 수 있다. 증가된 수의 코드 모듈(440)이 테스트됨에 따라, 종속성 트리(432)는 증가된 수의 코드 모듈(440)을 포함할 수 있다.
일 예에서, 코드 모듈(440)의 각각의 조합을 테스트하는 대신에, 테스트 모듈(420)은 종속성 트리(432)에 표시된 바와 같이 서로 의존하는 선택된 코드 모듈(440) 사이의 인터페이스(450)를 테스트할 수 있다. 선택된 코드 모듈(440)은 장치를 설계 및 구축할 때 이용 가능한 복수의 코드 모듈(440)에 포함될 수 있다. 코드 모듈들(440) 사이의 인터페이스들(450)은 코드 모듈들(440) 사이의 적절한 기능을 보장하기 위해 테스트될 수 있다. 하나의 대안적인 예에서, 테스트 모듈(420)은 코드 모듈들(440) 사이의 인터페이스들(450)을 무작위로 샘플링할 수 있고, 테스트 모듈(420)은 시간이 지남에 따라 샘플링을 회전시켜서, 더 많은 수의 코드 모듈 조합이 테스트되도록 보장한다. 테스트 모듈(420)은 코드 모듈(440)의 테스트에 기초하여 테스트 메트릭(testing metrics)(422)을 생성할 수 있으며, 이는 인증된 코드 모듈(440) 및 인증되지 않은 코드 모듈(440)을 나타낼 수 있다.
일 예로서, 제 1 코드 모듈(예를 들어, 이더넷 드라이버, TCP/IP 라이브러리, IP 계층, MQTT 계층)은 특정 칩셋과 함께 사용될 때 5 개의 종속성(예를 들어, 제 1 코드 모듈에 의존하는 5 개의 다른 코드 모듈)을 가질 수 있다. 이 예에서, 테스트 모듈(420)은 제 1 코드 모듈과 5 개의 다른 코드 모듈 각각 사이의 인터페이스를 테스트하여, 제 1 코드 모듈과 5 개의 종속 코드 모듈 각각 사이의 호환성 및 유용성을 보장할 수 있다. 다른 예로서, 제 1 코드 모듈(예를 들어, MQTT 계층)은 제 2 코드 모듈(예를 들어, 이더넷 드라이버)을 직접 호출하지 않을 수 있다. 오히려 제 1 코드 모듈(예를 들어, MQTT 계층)이 제 3 코드 모듈(예를 들어, TCP/IP 계층)을 호출할 수 있지만, 제 2 코드 모듈(가령, 이더넷 드라이버)을 직접 호출하는 다른 모듈(예를 들어, TCP/IP 계층)이 있을 수 있다. 따라서, 테스트 모듈(420)은 서로 의존하는 모듈들(예를 들어, 제 1 및 제 3 코드 모듈뿐만 아니라 제 2 및 제 3 코드 모듈) 간의 인터페이스를 테스트할 수 있다.
도 5는 보조 장치 이미지(534)에 대한 OTA(over-the-air) 업데이트를 수행하기 위한 예시적인 시스템 및 관련 동작을 도시한다. OTA 업데이트는 서비스 제공자 환경(500)에서 동작하는 업데이트 서비스(530)에서 수행될 수 있다. OTA 업데이트는 데이터 저장소(532)에 저장된 보조 장치 이미지(534)를 장치(570)(예를 들어, IoT 장치) 상의 에이전트(572)에게 제공하는 과정을 수반하며, 보조 장치 이미지(534)가 장치(570) 상에 설치될 수 있다. (서비스 제공자 환경(500)에 액세스하기 위해 장치(570)의 진입점으로 간주될 수 있는) 장치 게이트웨이(550) 및 서비스 제공자 환경(500)에서의 공개/가입 장치 이미지 브로커(540)를 통해 장치(570)에 보조 장치 이미지(534)가 제공될 수 있다. 예를 들어, 장치(570)는 발행자/가입자 장치 이미지 브로커(540)에 의해 생성된 토픽(542)에 대한 가입(subscription)을 가질 수 있고, 이에 대해 업데이트 서비스(530)는 장치(570)에 전달하기 위해 보조 장치 이미지(530)를 게시할 수 있다.
일 예에서, 서비스 제공자 환경(500)의 장치 구성 서비스(510)는 코드 모듈(512)의 선택을 수신할 수 있다. 장치 구성 서비스(510)는 사용자 컴퓨팅 장치(560)로부터 선택을 수신할 수 있다. 장치 구성 서비스(510)는 사용자 컴퓨팅 장치(560)에 코드 모듈을 제공할 수 있다. 사용자 컴퓨팅 장치(560)는 보조 장치 이미지(534)를 생성하기 위해 코드 모듈(512)을 조립할 수 있다. 보조 장치 이미지(534)는 장치(570)에 새로운 기능을 제공하거나 장치(570)의 기존 기능을 보강할 수 있거나, 또는 보조 장치 이미지(534)가 장치(570)의 기존 문제를 해결할 수 있다.
사용자 컴퓨팅 장치(560)는 보조 장치 이미지(534)를 서비스 제공자 환경(500)의 데이터 저장소(532)에 업로드할 수 있다. 업데이트 서비스(530)는 장치(570)에서의 사용 또는 설치를 위해 보조 장치 이미지(534)를 안전하게 전달할 수 있다. 업데이트 서비스(530)는 보조 장치 이미지(534)를 장치(570)에 의해 무선으로 수신될 수 있는 데이터 블록들로 보조 장치 이미지(534)를 분할함으로써 다운로드(또는 푸시 전송)할 보조 장치 이미지(534)를 제공할 수 있다. 개별 데이터 블록들은 공개/구독 브로커(540)를 통해 메시지로 전송될 수 있다. 보조 장치 이미지(534)는 보조 장치 이미지(534)가 신뢰할 수 있는 소스로부터 온 것을 보장하기 위해 코드 서명 인증서를 사용하여 서명될 수 있다. 장치(570)는 업데이트 서비스(530)로부터 시작된 보조 장치 이미지(534)를 수신한 다음, 보조 장치 이미지(534)를 설치하여, 새로운 기능을 획득하고, 기존 기능을 증강시키며, 문제를 해결하는, 등의 기능을 할 수 있다.
도 6은 장치(예를 들어, IoT 장치)를 구축하기 위한 코드 모듈을 제공하기 위한 방법의 예를 도시한다. 블록(610)에서와 같이, 장치를 설계할 때 이용 가능한 하드웨어 구성요소의 리스트가 제공될 수 있다. 하드웨어 구성요소의 리스트는 서비스 제공자 환경에서 동작하는 장치 구성 서비스로부터 수신될 수 있다. 하드웨어 구성요소 리스트에 포함된 하드웨어 구성요소는 이전에 장치 구성 서비스에 의해 인증되었을 수 있다. 장치 구성 서비스는 하드웨어 구성요소 리스트에 포함되지 않은 하드웨어 구성요소를 제공하지 않을 수 있다.
블록(620)에서와 같이, 하드웨어 구성요소 리스트로부터 하드웨어 구성요소의 선택이 수신될 수 있다. 장치 구성 서비스는 하드웨어 구성요소 리스트로부터 하드웨어 구성요소를 선택할 수 있게 하는 사용자 인터페이스를 제공할 수 있다. 예로서, 사용자는 장치 유형(예를 들어, 진공 청소기, 스마트 홈 미터)에 기초하여 장치에 대한 사용자 인터페이스를 통해 적절한 하드웨어 구성요소를 선택할 수 있다.
블록(630)에서와 같이, 장치의 사용 사례를 정의하는 장치 성능 정의가 수신될 수 있다. 장치 성능 정의는 서비스 제공자 환경에서 동작하는 장치 구성 서비스로부터 수신될 수 있다. 장치 성능 정보는 사용자 컴퓨팅 장치로부터 수신될 수 있다. 장치 성능 정의는 구축될 장치의 의도 된 용도 또는 목적을 기술할 수 있다.
블록(640)에서와 같이, 선택된 하드웨어 구성요소와 호환 가능한 코드 모듈의 리스트가 제공될 수 있다. 인증된 코드 모듈의 리스트는 장치 성능 정의에 표시된 바와 같이 장치의 사용 사례에 기초하여 필터링될 수 있다. 또한 리스트의 인증된 코드 모듈은 사용자 인터페이스를 통해 이전에 선택한 하드웨어 구성요소와 호환될 수 있다. 코드 모듈은 펌웨어, 장치 드라이버, 실행 코드, 라이브러리, 구성 파일 등을 포함할 수 있다.
블록(650)에서와 같이, 코드 모듈의 리스트로부터 코드 모듈의 선택이 수신될 수 있다. 예를 들어, 장치 구성 서비스에 의해 제공되는 사용자 인터페이스는 코드 모듈의 리스트로부터 코드 모듈의 선택을 가능하게 할 수 있다. 코드 모듈은 하드웨어 구성요소가 장치에서 동작하도록 할 수 있다. 다시 말해서, 특정 코드 모듈은 장치 내의 특정 대응하는 하드웨어 구성요소의 동작 및/또는 인터페이스를 가능하게 할 수 있다.
코드 모듈은 블록 660에서와 같이 장치를 설계하기 위해 제공될 수 있다. 예를 들어, 장치 구성 서비스는 랩탑 또는 개인용 컴퓨터와 같은 사용자 컴퓨팅 장치에 코드 모듈을 제공할 수 있다. 사용자 컴퓨팅 장치는 코드 모듈로부터 장치 이미지를 생성한 다음, 장치 이미지를 IoT 장치와 같은 장치에 로딩할 수 있다. 장치 이미지가 장치에 설치되어, 장치의 하드웨어 구성요소를 올바르게 작동시킬 수 있다. 또한, 코드 모듈에는 일련의 구성 파라미터가 제공될 수 있다. 구성 파라미터 세트는 장치 성능 정의에 표시된 바와 같이 장치의 사용 사례에 기초하여 선택될 수 있고, 구성 파라미터 세트는 장치 이미지를 생성할 때 사용될 수 있다.
도 7은 장치(예를 들어, IoT 장치)를 구축하기 위한 코드 모듈을 제공하기 위한 방법의 예를 도시한다. 블록(710)에서와 같이, 장치에 대한 장치 성능 정의가 수신될 수 있다. 예를 들어, 서비스 제공자 환경에서 동작하는 장치 구성 서비스는 장치 성능 정의를 수신할 수 있는 사용자 인터페이스를 제공할 수 있다. 장치 성능 정의는 장치의 사용 사례를 기술할 수 있다. 다시 말해서, 장치 성능 정의는 장치가 설계될 때 장치에 대한 의도 된 사용 사례를 정의할 수 있다.
블록 720에서와 같이, 하드웨어 구성요소 및 호환 가능한 코드 모듈을 나타내는 장치 패키지가 장치를 구축하기 위해 권장될 수 있다. 장치 구성 서비스는 장치 성능 정의에 표시된 대로 장치의 사용 사례와 대응하는 이전에 사용된 장치 패키지로부터 장치에 권장되는 장치 패키지를 식별할 수 있다. 다시 말해서, 장치 구성 서비스는 현재 설계되는 장치와 비교하여 유사한 사용 사례를 갖는 장치 패키지를 식별할 수 있고, 장치 구성 서비스는 그러한 장치 패키지와 연관된 하드웨어 구성요소 및 호환 가능한 코드 모듈을 추천할 수 있다. 장치 구성 서비스는 장치 성능 정의에 기초하여 장치에 적합한 특징 또는 특성을 갖는 하드웨어 구성요소 및 호환 가능한 소프트웨어 구성요소를 갖는 장치 패키지를 추천할 수 있다.
블록(730)에서와 같이 장치 패키지의 선택이 수신될 수 있다. 예를 들어, 장치 구성 서비스에 의해 제공되는 사용자 인터페이스는 장치를 설계 및 구축하는 사용자에 의해 추천된 장치 패키지를 선택할 수 있다. 장치 패키지를 선택함으로써, 사용자는 장치 패키지와 연관된 하드웨어 구성요소 및 호환 가능한 코드 모듈을 선택할 수 있다. 코드 모듈은 하드웨어 구성요소가 장치에서 동작하도록 할 수 있다. 다시 말해서, 특정 코드 모듈은 장치 내의 특정 대응하는 하드웨어 구성요소의 동작 및/또는 인터페이스를 가능하게 할 수 있다.
블록(740)에서와 같이, 장치 패키지와 관련된 코드 모듈은 장치 상에 다운로드 및 설치를 위해 제공될 수 있다. 예를 들어, 장치 구성 서비스는 랩탑 또는 개인용 컴퓨터와 같은 사용자 컴퓨팅 장치에 코드 모듈을 제공할 수 있다. 사용자 컴퓨팅 장치는 코드 모듈로부터 장치 이미지를 생성한 다음, 장치 이미지를 IoT 장치와 같은 장치에 로딩할 수 있다.
도 8은 장치(예를 들어, IoT 장치)를 구축하기 위한 코드 모듈을 제공하기 위한 방법의 예를 도시한다. 블록(810)에서와 같이, 제한된 하드웨어 성능을 갖는 장치를 설계하는데 사용될 하드웨어 사양이 수신될 수 있다. 하드웨어 사양은 설계되는 장치에 사용될 하나 이상의 하드웨어 구성요소를 정의할 수 있다. 또한, 장치의 제한된 하드웨어 성능은 장치의 제한된 프로세싱 및 메모리 성능 뿐만 아니라 장치에 대한 특정 하드웨어 기능의 부재(예를 들어, Wi-Fi 기능, 블루투스 기능, 디지털 신호 처리(DSP) 기능 등의 부재)를 지칭할 수 있다.
블록(820)에서와 같이 장치에 대한 장치 구성이 수신될 수 있다. 장치 구성은 장치에 대한 사용 사례를 포함할 수 있다. 또한, 장치 구성은 장치에 로딩될 관심있는 코드 모듈에 관한 입력을 포함할 수 있다. 사용 사례는 장치의 특정 용도 또는 장치에 의해 달성될 특정 특징을 기술할 수 있다. 코드 모듈에 관한 입력은 사용자로부터 수신될 수 있다. 예를 들어, 입력은 장치를 설계할 때 사용자에게 관심있는 특정 코드 모듈을 기술할 수 있다.
블록(830)에서와 같이, 장치의 제한된 하드웨어 성능 및 장치의 장치 구성을 만족시키는 하드웨어 사양과 호환 가능한 코드 모듈의 리스트가 결정될 수 있다. 다시 말해서, 코드 모듈의 리스트는 장치의 제한된 하드웨어 성능을 만족시키는, 그리고, 이러한 하드웨어 사양과 호환되면서 장치의 장치 구성(관심있는 코드 모듈에 관한 사용자 입력 및/또는 사용 사례)과 대응하는, 코드 모듈(예를 들어, 장치에 포함된 것보다 더 많은 처리 및 메모리를 소비하지 않는 코드 모듈)을 포함하도록 결정될 수 있다.
코드 모듈 리스트는 블록 840에서와 같이 제공될 수 있다. 예를 들어, 코드 모듈 리스트는 사용자 인터페이스를 통해 제공될 수 있다. 코드 모듈은 펌웨어, 장치 드라이버, 실행 코드, 라이브러리, 구성 파일 등을 포함할 수 있다. 블록(850)에서와 같이, 코드 모듈의 리스트로부터 코드 모듈의 선택이 수신될 수 있다. 코드 모듈의 선택은 사용자 인터페이스를 통해 수신될 수 있다. 코드 모듈 리스트로부터 선택된 코드 모듈은 블록(860)에서와 같이 장치를 설계하는데 사용하기 위해 제공될 수 있다. 예를 들어, 선택된 코드 모듈은 장치 이미지를 생성하는데 사용될 수 있고, 장치 이미지는 장치에 로딩될 수 있다.
도 9는 본 기술이 실행될 수 있는 다수의 컴퓨팅 인스턴스(904a-d)를 실행하고 관리하는데 사용될 수 있는 예시적인 컴퓨팅 서비스(900)를 도시하는 블록도이다. 특히, 도시된 컴퓨팅 서비스(900)는 본 명세서에 기술된 기술이 사용될 수 있는 하나의 환경을 도시한다. 컴퓨팅 서비스(900)는 예를 들어 컴퓨팅 인스턴스(904a-d)를 호스팅하기 위해 사용될 수 있는 다양한 가상화된 서비스 자원을 포함하는 일 유형의 환경일 수 있다.
컴퓨팅 서비스(900)는 최종 수신자의 커뮤니티에 소프트웨어 서비스로서 컴퓨팅, 스토리지 및 네트워킹 용량을 전달할 수 있다. 일 예에서, 컴퓨팅 서비스(900)는 조직에 의해 또는 조직을 대신하여 조직에 대해 확립될 수 있다. 즉, 컴퓨팅 서비스(900)는 "프라이빗 클라우드 환경"을 제공할 수 있다. 다른 예에서, 컴퓨팅 서비스(900)는 다중-테넌트 환경을 지원할 수 있으며, 여기서는 복수의 고객이 독립적으로 운영할 수 있다(즉, 퍼블릭 클라우드 환경). 일반적으로 말하면, 컴퓨팅 서비스(900)는 다음과 같은 모델: "IaaS"(Infrastructure as a Service), "PaaS"(Platform as a Service), 및/또 "SaaS"(Software as a Service)을 제공할 수 있다. 다른 모델이 제공될 수 있다. IaaS 모델의 경우, 컴퓨팅 서비스(900)는 컴퓨터를 물리적 또는 가상 머신 및 다른 리소스로서 제공할 수 있다. 가상 머신은 후술하는 바와 같이 하이퍼바이저에 의해 게스트로서 실행될 수 있다. PaaS 모델은 운영 체제, 프로그래밍 언어 실행 환경, 데이터베이스 및 웹 서버를 포함할 수 있는 컴퓨팅 플랫폼을 제공한다.
애플리케이션 개발자는 기본 하드웨어 및 소프트웨어의 구매 및 관리 비용을 발생시키지 않으면서 컴퓨팅 서비스 플랫폼 상에서 그들의 소프트웨어 솔루션을 개발 및 실행할 수 있다. SaaS 모델은 컴퓨팅 서비스(900)에서 애플리케이션 소프트웨어의 설치 및 동작을 허용한다. 최종 고객은, 예를 들어 웹 브라우저 또는 기타 경량 클라이언트 애플리케이션을 실행하는, 데스크탑 컴퓨터, 랩탑, 태블릿, 스마트 폰 등과 같은 네트워크 클라이언트 장치를 사용하여 컴퓨팅 서비스(900)에 액세스할 수 있다. 당업자는 컴퓨팅 서비스(900)가 "클라우드" 환경으로 설명될 수 있음을 인식할 것이다.
특히 예시된 컴퓨팅 서비스(900)는 복수의 서버 컴퓨터(902a-d)를 포함할 수 있다. 서버 컴퓨터(902a-d)는 물리적 호스트로도 알려져 있다. 4대의 서버 컴퓨터가 표시되어 있지만 임의의 개수를 사용할 수 있으며 대규모 데이터 센터에는 수천 대의 서버 컴퓨터가 포함될 수 있다. 컴퓨팅 서비스(900)는 컴퓨팅 인스턴스(904a-d)를 실행하기 위한 컴퓨팅 리소스를 제공할 수 있다. 컴퓨팅 인스턴스(904a-d)는 예를 들어 가상 머신일 수 있다. 가상 머신은 물리적 머신처럼 애플리케이션을 실행하는 머신(즉, 컴퓨터)의 소프트웨어 구현의 인스턴스일 수 있다. 가상 머신의 이러한 예에서, 각각의 서버 컴퓨터(902a-d)는 인스턴스를 실행할 수 있는 인스턴스 관리자(908a-d)를 실행하도록 구성될 수 있다. 인스턴스 관리자(908a-d)는 하이퍼바이저, 가상 머신 관리자(VMM), 또는 단일 서버 상에서 다수의 컴퓨팅 인스턴스(904a-d)를 실행할 수 있도록 구성된 다른 유형의 프로그램일 수 있다. 부가적으로, 각각의 컴퓨팅 인스턴스(904a-d)는 하나 이상의 애플리케이션을 실행하도록 구성될 수 있다.
서버(914)는 본 기술을 구현하거나 컴퓨팅 서비스(900) 및 컴퓨팅 인스턴스(904a-d)의 동작을 관리하기 위한 소프트웨어 구성요소를 실행하기 위해 예약될 수 있다. 예를 들어, 서버 컴퓨터(914)는 장치 구성 서비스(915)를 실행할 수 있다. 장치 구성 서비스(915)는 장치를 설계할 때 사용될 하드웨어 구성요소의 표시를 수신할 수 있다. 장치 구성 서비스(915)는 하드웨어 구성요소와 호환되는 코드 모듈의 리스트를 제공할 수 있다. 코드 모듈의 리스트는 장치의 사용 사례를 기반으로 할 수 있다. 장치 구성 서비스(915)는 하드웨어 구성요소 리스트로부터 선택된 하드웨어 구성요소와 호환되는 코드 모듈의 리스트로부터 코드 모듈의 선택을 수신할 수 있다. 장치 구성 서비스(915)는 장치에서 사용하기 위한 코드 모듈을 제공할 수 있다.
서버 컴퓨터(916)는 관리 구성요소(918)를 실행할 수 있다. 고객은 관리 구성요소(918)에 액세스하여, 고객이 구매한 컴퓨팅 인스턴스(904a-d)의 동작의 다양한 양태를 구성할 수 있다. 예를 들어, 고객은 컴퓨팅 인스턴스(904a-d)를 설정하고 컴퓨팅 인스턴스(904a-d)의 구성을 변경할 수 있다.
배치 구성요소(922)는 고객이 컴퓨팅 인스턴스(904a-d)의 배치를 돕는 데 사용될 수 있다. 배치 구성요소(922)는 계정 소유자의 이름, 신용 카드 정보, 소유자의 국가 등과 같은 컴퓨팅 인스턴스(904a-d)와 관련된 계정 정보에 액세스할 수 있다. 배치 구성요소(922)는 컴퓨팅 인스턴스(904a-d)가 어떻게 구성될 수 있는지를 설명하는 데이터를 포함하는 구성을 고객으로부터 수신할 수 있다. 예를 들어, 구성은 운영 체제를 포함하고, 컴퓨팅 인스턴스(904a-d)에 설치될 하나 이상의 애플리케이션을 제공하고, 컴퓨팅 인스턴스(904a-d)를 구성하기 위해 실행될 스크립트 및/또는 다른 유형의 코드를 제공하고, 애플리케이션 캐시가 어떻게 준비되어야하는지와 기타 유형의 정보를 명시하는 캐시 로직을 제공할 수 있다. 배치 구성요소(922)는 컴퓨팅 인스턴스(904a-d)를 구성, 프라이밍(prime) 및 시작하기 위해 고객 제공 구성 및 캐시 로직을 이용할 수 있다. 이러한 구성, 캐시 로직 및 다른 정보는 고객이 관리 구성요소(918)에 액세스함으로써, 또는, 이 정보를 직접 배치 구성요소(922)에 제공함으로써, 특정될 수 있다.
고객 계정 정보(924)는 다중-테넌트 환경의 고객과 관련된 임의의 원하는 정보를 포함할 수 있다. 예를 들어, 고객 계정 정보는 고객에 대한 고유 식별자, 고객 주소, 청구 정보, 라이센스 정보, 인스턴스 시작을 위한 사용자 정의 파라미터, 스케줄링 정보 등을 포함할 수 있다. 전술한 바와 같이, 고객 계정 정보(924)는 또한 API 요청에 대한 비동기 응답의 암호화에 사용되는 보안 정보를 포함할 수 있다. "비동기"는 API 응답이 초기 요청 후 언제라도 상이한 네트워크 연결로 이루어질 수 있음을 의미한다.
네트워크(910)는 컴퓨팅 서비스(900)와 서버 컴퓨터(902a-d, 916)를 상호 연결하는데 이용될 수 있다. 네트워크(910)는 근거리 통신망(LAN) 일 수 있고 WAN(Wide Area Network)(912) 또는 인터넷에 접속될 수 있어서, 최종 고객이 컴퓨팅 서비스(900)에 액세스할 수 있게 된다. 또한, 네트워크(910)는 서버(902a-d) 사이의 통신을 제공하기 위해 물리적 네트워크 상에 오버레이된 가상 네트워크를 포함할 수 있다. 도 9에 도시된 네트워크 토폴로지는 단순화되어 있는데, 여기서, 개시되는 다양한 컴퓨팅 시스템을 서로 연결하기 위해 더 많은 네트워크 및 네트워킹 장치가 사용될 수 있기 때문이다.
도 10은 이 기술의 모듈 또는 코드 구성요소가 실행될 수 있는 컴퓨팅 장치(1010)를 도시한다. 이러한 기술의 높은 수준의 예를 실행할 수 있는 컴퓨팅 장치(1010)가 도시되어있다. 컴퓨팅 장치(1010)는 메모리 장치(1020)와 통신하는 하나 이상의 프로세서(1012)를 포함할 수 있다. 컴퓨팅 장치는 컴퓨팅 장치의 구성요소에 대한 로컬 통신 인터페이스(1018)를 포함할 수 있다. 예를 들어, 로컬 통신 인터페이스는 로컬 데이터 버스 및/또는 원하는 임의의 관련 어드레스 또는 제어 버스일 수 있다.
메모리 장치(1020)는 프로세서(들)(1012)에 의해 실행 가능한 모듈(1024) 또는 코드 구성요소 및 모듈(1024)에 대한 데이터를 포함할 수 있다. 모듈(1024)은 전술한 기능을 실행할 수 있다. 데이터 저장소(1022)는 또한 프로세서(들)(1012)에 의해 실행 가능한 운영 체제와 함께 모듈(1024) 및 기타 애플리케이션에 관련된 데이터를 저장하기 위해 메모리 장치(1020)에 위치될 수 있다.
다른 애플리케이션들은 또한 메모리 장치(1020)에 저장될 수 있고 프로세서(들)(1012)에 의해 실행 가능할 수 있다.이 설명에서 논의된 구성요소들 또는 모듈들은 이러한 방법들의 조합을 이용하여 소프트웨어 형태로 구현될 수 있는 하이 프로그래밍 레벨 언어를 소프트웨어 형태로 구현될 수 있다.
컴퓨팅 장치는 또한 컴퓨팅 장치에 의해 사용 가능한 I/O(입력/출력) 장치(1014)에 액세스할 수 있다. I/O 장치의 예로는 컴퓨팅 장치의 출력을 표시할 수 있는 디스플레이 화면이 있다. 다른 알려진 I/O 장치가 원하는대로 컴퓨팅 장치와 함께 사용될 수 있다. 네트워킹 장치(1016) 및 유사한 통신 장치가 컴퓨팅 장치에 포함될 수 있다. 네트워킹 장치(1016)는 인터넷, LAN, WAN 또는 다른 컴퓨팅 네트워크에 연결되는 유선 또는 무선 네트워킹 장치일 수 있다.
메모리 장치(1020)에 저장된 것으로 도시된 구성요소 또는 모듈은 프로세서(1012)에 의해 실행될 수 있다. "실행 가능"이라는 용어는 프로세서(1012)에 의해 실행될 수 있는 형태의 프로그램 파일을 의미할 수 있다. 예를 들어, 상위 언어의 프로그램이 메모리 장치(1020)의 랜덤 액세스 부분에 로드되어 프로세서(1012)에 의해 실행될 수 있는 포맷으로 머신 코드로 컴파일될 수 있고, 또는, 소스 코드가 다른 실행 가능 프로그램에 의해 로드되어, 프로세서에 의해 실행될 메모리의 랜덤 액세스 부분에서 명령어를 생성하도록 해석될 수 있다. 실행가능 프로그램은 메모리 장치(1020)의 임의의 부분 또는 구성요소에 저장될 수 있다. 예를 들어, 메모리 장치(1020)는 랜덤 액세스 메모리(RAM), 판독 전용 메모리(ROM), 플래시 메모리, 솔리드 스테이트 드라이브, 메모리 카드, 하드 드라이브, 광 디스크, 플로피 디스크, 자기 테이프 또는 기타 메모리 구성요소일 수 있다.
프로세서(1012)는 다수의 프로세서를 나타낼 수 있고 메모리(1020)는 처리 회로와 병렬로 동작하는 다수의 메모리 유닛을 나타낼 수 있다. 이것은 시스템의 프로세스 및 데이터에 대한 병렬 처리 채널을 제공할 수 있다. 로컬 인터페이스(1018)는 다수의 프로세서 및 다수의 메모리 중 임의의 것들 간의 통신을 용이하게 하기 위해 네트워크로서 사용될 수 있다. 로컬 인터페이스(1018)는 로드 밸런싱, 벌크 데이터 전송 및 유사한 시스템과 같이, 통신을 조정하도록 설계된 추가 시스템을 사용할 수 있다.
이 기술에 대해 제시된 흐름도는 특정 실행 순서를 내포할 수 있지만, 실행 순서는 도시된 것과 다를 수 있다. 예를 들어, 2 개 이상의 블록의 순서가 도시된 순서와 다르게 재배열될 수 있다. 또한, 연속적으로 도시된 둘 이상의 블록이 병렬로 또는 부분 병렬 방식으로 실행될 수 있다. 일부 구성에서, 흐름도에 도시된 하나 이상의 블록은 생략되거나 건너뛸 수 있다. 향상된 유틸리티, 계정, 성능, 측정, 문제 해결 또는 유사한 이유로 임의의 개수의 카운터, 상태 변수, 경고 세마모어(semaphores) 또는 메시지가 논리 흐름에 추가할 수 있다.
본 명세서에 기술된 일부 기능 유닛은 그들의 구현 독립성을 보다 특히 강조하기 위해 모듈로서 라벨링되어 있다. 예를 들어, 모듈은 커스텀 VLSI 회로 또는 게이트 어레이, 오프-더-쉘프 반도체, 가령, 로직 칩, 트랜지스터 또는 다른 개별 구성요소를 포함하는 하드웨어 회로로서 구현될 수 있다. 모듈은 또한 필드 프로그램 가능 게이트 어레이, 프로그램 가능 어레이 로직, 프로그램 가능 로직 장치 등과 같은 프로그램 가능 하드웨어 장치로 구현될 수 있다.
모듈은 다양한 유형의 프로세서에 의한 실행을 위해 소프트웨어로 또한 구현될 수도 있다. 실행 가능한 코드의 식별된 모듈은 예를 들어, 하나 이상의 컴퓨터 명령어 블록을 포함할 수 있으며, 이는 객체, 절차 또는 함수로서 구성될 수 있다. 그러나, 식별된 모듈의 실행 파일들이 물리적으로 함께 위치될 필요는 없지만, 모듈을 포함하고 논리적으로 함께 결합될 때 모듈에 대해 명시된 용도를 달성하도록 모듈을 포함하는 상이한 위치에 저장된 이질적 명령어들을 포함할 수 있다.
실제로, 실행 가능한 코드의 모듈은 단일 명령어 또는 다수의 명령어일 수 있으며, 상이한 프로그램들 사이에서, 그리고 여러 메모리 장치들에 걸쳐, 여러 상이한 코드 세그먼트들 간에 분산될 수 있다. 유사하게, 동작 데이터는 본 명세서에서 모듈 내에서 식별되고 예시될 수 있으며, 임의의 적절한 형태로 구현되고 임의의 적절한 유형의 데이터 구조 내에서 구성될 수 있다. 운영 데이터는 단일 데이터 세트로 수집되거나, 상이한 저장 장치를 포함한, 상이한 위치에 분산될 수 있다. 모듈은 원하는 기능을 수행하도록 동작 가능한 에이전트를 포함하여 수동적이거나 능동적 일 수 있다.
여기에 기술된 기술은 또한 컴퓨터 판독 가능 명령어, 데이터 구조, 프로그램 모듈, 또는 기타 데이터와 같은 정보의 저장을 위한 임의의 기술로 구현된 휘발성 및 비휘발성, 분리형 및 비 분리형 매체를 포함하는 컴퓨터 판독 가능 저장 매체에 저장될 수 있다. 컴퓨터 판독 가능 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기술, CD-ROM, DVD(digital versatile disk) 또는 다른 광학 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치 또는 다른 자기 저장 장치, 또는 요망 정보 및 설명된 기술의 저장에 사용될 수 있는 그외 다른 컴퓨터 저장 매체를 포함하지만 이에 제한되지는 않는다.
본 명세서에 기술된 장치는 또한 장치가 다른 장치와 통신할 수 있도록 통신 연결 또는 네트워킹 장치 및 네트워킹 연결을 포함할 수 있다. 통신 연결은 통신 매체의 예이다. 통신 매체는 통상적으로 컴퓨터 판독 가능 명령어, 데이터 구조, 프로그램 모듈 및 다른 데이터를 반송파 또는 다른 전송 메커니즘과 같은 변조된 데이터 신호로 구현하고, 임의의 정보 전달 매체를 포함한다. "변조된 데이터 신호"는 신호에 정보를 인코딩하는 방식으로 설정되거나 변경된 특성 중 하나 이상을 갖는 신호를 의미한다. 예로서, 통신 매체는 유선 네트워크 또는 직접 유선 연결과 같은 유선 매체와, 음향, 무선 주파수, 적외선 및 기타 무선 매체와 같은 무선 매체를 포함하지만 이에 제한되지는 않는다. 본 명세서에서 사용되는 컴퓨터 판독 가능 매체라는 용어는 통신 매체를 포함한다.
도면에 도시된 예를 참조하였고, 이를 설명하기 위해 특정 언어가 사용되었다. 그럼에도 불구하고 기술의 범위의 제한이 의도되지 않는다는 것이 이해될 것이다. 관련 기술 분야의 통상의 기술자에게 발생하고 본 개시를 소유하는 본 명세서에 예시된 특징들 및 본 명세서에 예시된 바와 같은 예들의 추가 적용들의 변경 및 추가 수정이 본 설명의 범위 내에서 고려되어야 한다.
상술한 사항은 다음의 조항에 비추어 더 잘 이해될 수 있다:
1. 하나 이상의 프로세서에 의해 실행되는 명령어를 구현한 비일시적 머신 판독 가능 저장 매체로서,
서비스 제공자 환경에서 동작하는 장치 구성 서비스로부터, 장치를 설계할 때 이용 가능한 하드웨어 구성요소의 리스트를 제공하는 단계;
하드웨어 구성요소의 리스트로부터 하드웨어 구성요소의 선택을 수신하는 단계;
장치의 사용 사례를 정의하는 장치 성능 정의를 수신하는 단계;
선택된 하드웨어 구성요소와 호환되는 코드 모듈의 리스트를 제공하는 단계 - 코드 모듈의 리스트는 장치의 사용 사례에 기초하여 필터링됨;
코드 모듈의 리스트로부터 코드 모듈의 선택을 수신하는 단계 - 코드 모듈은 하드웨어 구성요소의 리스트로부터 선택된 하드웨어 구성요소가 장치에서 동작할 수 있게 함; 및
장치 설계를 위한 코드 모듈을 제공하는 단계를 포함하는, 비일시적 머신 판독 가능 저장 매체.
2. 제 1 항에 있어서,
장치의 사용 사례에 부분적으로 기초하여 코드 모듈에 대한 구성 파라미터 세트를 식별하는 단계; 및
코드 모듈과 함께 상기 구성 파라미터 세트를 제공하는 단계를 더 포함하는, 비일시적 머신 판독 가능 저장 매체.
3. 제 1 항에 있어서, 상기 장치에서 사용하기 위해 상기 코드 모듈을 자동으로 선택하는 종속성 트리를 생성하는 단계를 더 포함하는, 비일시적 기계 판독 가능 저장 매체.
4. 제한된 하드웨어 성능을 갖는 장치를 설계하는데 사용될 하드웨어 사양을 수신하는 단계;
상기 장치에 대한 장치 구성을 수신하는 단계 - 상기 장치 구성은 상기 장치에 대한 사용 사례를 포함함;
상기 장치의 제한된 하드웨어 성능 및 장치 구성을 만족시키는 상기 하드웨어 사양과 호환되는 코드 모듈의 리스트를 결정하는 단계;
상기 코드 모듈의 리스트를 제공하는 단계;
상기 코드 모듈의 리스트로부터 코드 모듈의 선택을 수신하는 단계; 및
장치를 설계하는데 사용하기 위한 코드 모듈의 리스트로부터 선택된 코드 모듈을 제공하는 단계를 포함하는, 방법.
5. 제 4 항에 있어서,
서비스 제공자 환경에서 장치 이미지 구축 서비스를 사용하여 코드 모듈을 포함하는 장치 이미지를 생성하는 단계; 및
상기 장치에 전달 및 설치하기 위한 장치 이미지를 제공하는 단계를 더 포함하는, 방법.
6. 제 4 항에 있어서, 상기 장치에 대한 장치 구성을 정의하는 장치 성능 정의를 수신하는 단계를 더 포함하고, 상기 장치 구성은 상기 장치 상에 로딩될 관심있는 코드 모듈에 관한 입력을 더 포함하는, 방법.
7. 제 4 항에 있어서, 상기 장치에서 사용될 코드 모듈은 상기 장치에서 실행되는 실시간 운영 체제(RTOS)와 호환되는, 방법.
8. 제 4 항에 있어서, 상기 장치에서 사용될 코드 모듈의 선택을 가능하게 하는 사용자 인터페이스를 제공하는, 방법.
9. 제 4 항에 있어서, 상기 장치를 설계할 때 이용 가능한 복수의 코드 모듈에 포함된 코드 모듈 사이의 인터페이스를 테스트하는 단계를 더 포함하고, 상기 코드 모듈 사이의 인터페이스는 상기 복수의 코드 모듈에 대한 적절한 기능성을 보장하기 위해 테스트되는, 방법.
10. 제 4 항에 있어서,
코드 모듈 리스트로부터 선택된 코드 모듈로부터 보조 장치 이미지를 생성하는 단계 - 상기 보조 장치 이미지는 서비스 제공자 환경에서 동작하는 업데이트 서비스에 업로드 됨; 및
상기 업데이트 서비스로부터, 상기 보조 장치 이미지를 상기 장치에 설치하기 위한 업데이트로서 제공하는 단계 - 상기 보조 장치 이미지는 상기 장치에 대해 이전에 수신된 장치 이미지의 기능을 증대시킴 - 를 더 포함하는, 방법.
11. 제 4 항에 있어서,
상기 장치의 구성에 부분적으로 기초하여 상기 코드 모듈에 대한 구성 파라미터 세트를 수정하는 단계; 및
코드 모듈과 함께 상기 구성 파라미터 세트를 제공하는 단계를 더 포함하는, 방법.
12. 제 4 항에 있어서, 서비스 제공자 환경에서 동작하는 장치 구성 서비스로부터 상기 코드 모듈을 제공하는 단계를 더 포함하는, 방법.
13. 제 4 항에 있어서, 상기 종속성 트리에 정의된 소프트웨어 종속성에 따라 상기 장치에서 사용하기 위해 상기 코드 모듈을 자동으로 선택하는 종속성 트리를 생성하는 단계를 더 포함하는, 방법.
14. 제 4 항에 있어서, 상기 장치의 코드 모듈은 마이크로컨트롤러 모듈, 디지털 신호 처리(DSP) 모듈, 통신 모듈, 센서 모듈, 카메라 모듈, 트랜시버 모듈 또는 전원 관리 모듈 중 하나 이상을 포함하는, 방법.
15. 시스템에 있어서,
적어도 하나의 프로세서;
복수의 데이터 및 명령어를 저장하기 위한 데이터 저장소를 포함하는 적어도 하나의 메모리 장치를 포함하되, 상기 복수의 데이터 및 명령어가 실행될 때, 상기 시스템은,
장치에 대한 장치 성능 정의를 수신할 수 있고, 여기서, 상기 장치 성능 정의는 상기 장치의 사용 사례를 기술하고;
장치를 구축하기 위한 하드웨어 구성요소 및 호환 가능한 코드 모듈을 나타내는 장치 패키지를 추천할 수 있으며, 여기서, 상기 장치에 권장되는 장치 패키지는 장치의 사용 사례에 대응하는 이전에 사용된 장치 패키지로부터 식별되고;
장치 패키지의 선택을 수신할 수 있고; 그리고,
장치에서 사용하기 위해 장치 패키지와 관련된 코드 모듈을 제공할 수 있는, 시스템.
16. 제 15 항에 있어서, 상기 복수의 데이터 및 명령어가 실행될 때, 상기 시스템은,
장치 패키지와 관련없는 대체 코드 모듈에 대한 요청과 함께 장치 패키지의 선택을 수신할 수 있고; 그리고,
장치를 설계할 때 사용할 대체 코드 모듈을 제공할 수 있는, 시스템.
17. 제 15 항에 있어서, 상기 복수의 데이터 및 명령어가 실행될 때, 상기 시스템은, 상기 코드 모듈로부터 장치 이미지를 생성하여 상기 장치에 설치할 수 있도록 상기 코드 모듈을 제공할 수 있는, 시스템.
18. 제 15 항에 있어서, 상기 복수의 데이터 및 명령어가 실행될 때, 상기 시스템은,
서비스 제공자 환경에서 동작하는 장치 구성 서비스에서, 상기 장치에 대한 보충 코드 모듈의 선택을 수신할 수 있고,
상기 장치 상에서 사용하기 위한 보충 코드 모듈을 제공할 수 있으며, 여기서, 상기 보충 코드 모듈은 서비스 제공자 환경에서 동작하는 업데이트 서비스에 업로드되는 보조 장치 이미지를 생성하는데 사용되며; 그리고,
업데이트 서비스로부터, 장치에 설치하기 위한 업데이트로서 보조 장치 이미지를 제공할 수 있고, 여기서, 보조 장치 이미지는 장치에 대해 이전에 수신된 장치 이미지의 성능을 증대시키는, 시스템.
19. 제 15 항에 있어서, 상기 복수의 데이터 및 명령어가 실행될 때, 상기 시스템은,
장치의 사용 사례에 부분적으로 기초하여 코드 모듈에 대한 구성 파라미터 세트를 식별할 수 있고, 그리고
코드 모듈과 함께 상기 구성 파라미터 세트를 제공할 수 있는, 시스템.
20. 제 15 항에 있어서, 상기 복수의 데이터 및 명령어가 실행될 때, 상기 시스템은, 상기 장치 패키지의 선택을 가능하게 하는 사용자 인터페이스를 제공할 수 있는, 시스템.
또한, 설명된 특징, 구조 또는 특성은 하나 이상의 예에서 임의의 적절한 방식으로 결합될 수 있다. 전술한 설명에서, 기술된 기술의 예에 대한 철저한 이해를 제공하기 위해 다양한 구성의 예와 같은 다수의 특정 세부 사항이 제공되었다. 그러나, 관련 기술 분야의 통상의 기술자는 기술이 하나 이상의 특정 세부 사항없이 또는 다른 방법, 구성요소, 장치 등으로 실시될 수 있음을 인식할 것이다. 다른 경우에, 공지된 구조 또는 동작은 기술의 양태를 모호하게 하는 것을 피하기 위해 상세하게 도시되거나 설명되지 않는다.
본 주제가 구조적 특징 및/또는 동작에 대해 특정한 언어로 설명되었지만, 첨부된 청구 범위에 정의된 주제는 전술한 특정 특징 및 동작으로 반드시 제한되는 것은 아니라는 것을 이해해야 한다. 오히려, 전술한 특정 특징 및 동작은 청구 범위를 구현하는 예시적인 형태로서 개시된다. 기술된 기술의 사상 및 범위를 벗어나지 않으면서 다수의 수정 및 대안적인 구성이 고안될 수 있다.

Claims (15)

  1. 하나 이상의 프로세서에 의해 실행되는 명령어를 구현한 비일시적 머신 판독 가능 저장 매체로서,
    서비스 제공자 환경에서 동작하는 장치 구성 서비스로부터, 장치를 설계할 때 이용 가능한 하드웨어 구성요소의 리스트를 제공하는 단계;
    하드웨어 구성요소의 리스트로부터 하드웨어 구성요소의 선택을 수신하는 단계;
    장치의 사용 사례를 정의하는 장치 성능 정의를 수신하는 단계;
    선택된 하드웨어 구성요소와 호환되는 코드 모듈의 리스트를 제공하는 단계 - 코드 모듈의 리스트는 장치의 사용 사례에 기초하여 필터링됨;
    코드 모듈의 리스트로부터 코드 모듈의 선택을 수신하는 단계 - 코드 모듈은 하드웨어 구성요소의 리스트로부터 선택된 하드웨어 구성요소가 장치에서 동작할 수 있게 함; 및
    장치 설계를 위한 코드 모듈을 제공하는 단계를 포함하는, 비일시적 머신 판독 가능 저장 매체.
  2. 제 1 항에 있어서,
    장치의 사용 사례에 부분적으로 기초하여 코드 모듈에 대한 구성 파라미터 세트를 식별하는 단계; 및
    코드 모듈과 함께 상기 구성 파라미터 세트를 제공하는 단계를 더 포함하는, 비일시적 머신 판독 가능 저장 매체.
  3. 제 1 항에 있어서, 상기 장치에서 사용하기 위해 상기 코드 모듈을 자동으로 선택하는 종속성 트리를 생성하는 단계를 더 포함하는, 비일시적 기계 판독 가능 저장 매체.
  4. 제한된 하드웨어 성능을 갖는 장치를 설계하는데 사용될 하드웨어 사양을 수신하는 단계;
    상기 장치에 대한 장치 구성을 수신하는 단계 - 상기 장치 구성은 상기 장치에 대한 사용 사례를 포함함;
    상기 장치의 제한된 하드웨어 성능 및 장치 구성을 만족시키는 상기 하드웨어 사양과 호환되는 코드 모듈의 리스트를 결정하는 단계;
    상기 코드 모듈의 리스트를 제공하는 단계;
    상기 코드 모듈의 리스트로부터 코드 모듈의 선택을 수신하는 단계; 및
    장치를 설계하는데 사용하기 위한 코드 모듈의 리스트로부터 선택된 코드 모듈을 제공하는 단계를 포함하는, 방법.
  5. 제 4 항에 있어서,
    서비스 제공자 환경에서 장치 이미지 구축 서비스를 사용하여 코드 모듈을 포함하는 장치 이미지를 생성하는 단계; 및
    상기 장치에 전달 및 설치하기 위한 장치 이미지를 제공하는 단계를 더 포함하며,
    상기 장치에서 사용될 코드 모듈은 상기 장치에서 실행되는 실시간 운영 체제(RTOS)와 호환되는, 방법.
  6. 제 4 항에 있어서,
    상기 장치에 대한 장치 구성을 정의하는 장치 성능 정의를 수신하는 단계 - 상기 장치 구성은 상기 장치 상에 로딩될 관심있는 코드 모듈에 관한 입력을 더 포함함; 및
    상기 장치에서 사용될 코드 모듈의 선택을 가능하게 하는 사용자 인터페이스를 제공하는 단계를 더 포함하는, 방법.
  7. 제 4 항에 있어서, 상기 장치를 설계할 때 이용 가능한 복수의 코드 모듈에 포함된 코드 모듈 사이의 인터페이스를 테스트하는 단계를 더 포함하고, 상기 코드 모듈 사이의 인터페이스는 상기 복수의 코드 모듈에 대한 적절한 기능성을 보장하기 위해 테스트되는, 방법.
  8. 제 4 항에 있어서,
    코드 모듈의 리스트로부터 선택된 코드 모듈로부터 보조 장치 이미지를 생성하는 단계 - 상기 보조 장치 이미지는 서비스 제공자 환경에서 동작하는 업데이트 서비스에 업로드 됨; 및
    상기 업데이트 서비스로부터, 상기 보조 장치 이미지를 상기 장치에 설치하기 위한 업데이트로서 제공하는 단계 - 상기 보조 장치 이미지는 상기 장치에 대해 이전에 수신된 장치 이미지의 성능을 증대시킴 - 를 더 포함하는, 방법.
  9. 제 4 항에 있어서,
    상기 장치의 구성에 부분적으로 기초하여 상기 코드 모듈에 대한 구성 파라미터 세트를 수정하는 단계; 및
    코드 모듈과 함께 상기 구성 파라미터 세트를 제공하는 단계를 더 포함하는, 방법.
  10. 제 4 항에 있어서,
    서비스 제공자 환경에서 동작하는 장치 구성 서비스로부터 상기 코드 모듈을 제공하는 단계; 또는
    종속성 트리에 정의된 소프트웨어 종속성에 따라 상기 장치에서 사용하기 해 상기 코드 모듈을 자동으로 선택하는 상기 종속성 트리를 생성하는 단계를 포함하며,
    상기 장치의 코드 모듈은 마이크로컨트롤러 모듈, 디지털 신호 처리(DSP) 모듈, 통신 모듈, 센서 모듈, 카메라 모듈, 트랜시버 모듈 또는 전원 관리 모듈 중 하나 이상을 포함하는, 방법.
  11. 시스템에 있어서,
    적어도 하나의 프로세서;
    복수의 데이터 및 명령어를 저장하기 위한 데이터 저장소를 포함하는 적어도 하나의 메모리 장치를 포함하되, 상기 복수의 데이터 및 명령어가 실행될 때, 상기 시스템은,
    장치에 대한 장치 성능 정의를 수신할 수 있고, 여기서, 상기 장치 성능 정의는 상기 장치의 사용 사례를 기술하고;
    장치를 구축하기 위한 하드웨어 구성요소 및 호환 가능한 코드 모듈을 나타내는 장치 패키지를 추천할 수 있으며, 여기서, 상기 장치에 권장되는 장치 패키지는 장치의 사용 사례에 대응하는 이전에 사용된 장치 패키지로부터 식별되고;
    장치 패키지의 선택을 수신할 수 있고; 그리고,
    장치에서 사용하기 위해 장치 패키지와 관련된 코드 모듈을 제공할 수 있는, 시스템.
  12. 제 15 항에 있어서, 상기 복수의 데이터 및 명령어가 실행될 때, 상기 시스템은,
    장치 패키지와 관련없는 대체 코드 모듈에 대한 요청과 함께 장치 패키지의 선택을 수신할 수 있고; 그리고,
    장치를 설계할 때 사용할 대체 코드 모듈을 제공할 수 있는, 시스템.
  13. 제 15 항에 있어서, 상기 복수의 데이터 및 명령어가 실행될 때, 상기 시스템은,
    상기 코드 모듈로부터 장치 이미지를 생성하여 상기 장치에 설치할 수 있도록 상기 코드 모듈을 제공할 수 있고, 또는,
    장치 패키지의 선택을 수신할 수 있게 하는 사용자 인터페이스를 제공할 수 있는, 시스템.
  14. 제 15 항에 있어서, 상기 복수의 데이터 및 명령어가 실행될 때, 상기 시스템은,
    서비스 제공자 환경에서 동작하는 장치 구성 서비스에서, 상기 장치에 대한 보충 코드 모듈의 선택을 수신할 수 있고,
    상기 장치 상에서 사용하기 위한 보충 코드 모듈을 제공할 수 있으며, 여기서, 상기 보충 코드 모듈은 서비스 제공자 환경에서 동작하는 업데이트 서비스에 업로드되는 보조 장치 이미지를 생성하는데 사용되며; 그리고,
    업데이트 서비스로부터, 장치에 설치하기 위한 업데이트로서 보조 장치 이미지를 제공할 수 있고, 여기서, 보조 장치 이미지는 장치에 대해 이전에 수신된 장치 이미지의 성능을 증대시키는, 시스템.
  15. 제 15 항에 있어서, 상기 복수의 데이터 및 명령어가 실행될 때, 상기 시스템은,
    장치의 사용 사례에 부분적으로 기초하여 코드 모듈에 대한 구성 파라미터 세트를 식별할 수 있고, 그리고
    코드 모듈과 함께 상기 구성 파라미터 세트를 제공할 수 있는, 시스템.
KR1020207011257A 2017-11-07 2018-11-05 장치 설계를 위한 코드 모듈 선택 KR102368200B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/805,875 US10678975B2 (en) 2017-11-07 2017-11-07 Code module selection for device design
US15/805,875 2017-11-07
PCT/US2018/059262 WO2019094340A1 (en) 2017-11-07 2018-11-05 Code module selection for device design

Publications (2)

Publication Number Publication Date
KR20200080234A true KR20200080234A (ko) 2020-07-06
KR102368200B1 KR102368200B1 (ko) 2022-02-28

Family

ID=64870543

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207011257A KR102368200B1 (ko) 2017-11-07 2018-11-05 장치 설계를 위한 코드 모듈 선택

Country Status (7)

Country Link
US (1) US10678975B2 (ko)
EP (1) EP3707594A1 (ko)
JP (1) JP7090152B2 (ko)
KR (1) KR102368200B1 (ko)
CN (1) CN111417925B (ko)
AU (1) AU2018365860B2 (ko)
WO (1) WO2019094340A1 (ko)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190138994A1 (en) * 2017-09-27 2019-05-09 Krishan Deegalla System and method for implementing an integrated b2b digital mobile customer experience
US10564940B2 (en) * 2018-05-03 2020-02-18 International Business Machines Corporation Systems and methods for programming drones
US10904078B2 (en) * 2018-07-12 2021-01-26 Honeywell International Inc. Systems and methods for autonomous creation of a domain specific industrial internet of things gateway using a conversational interface
US10579370B2 (en) * 2018-08-03 2020-03-03 EMC IP Company LLC Method to disintegrate a monolith service to microservices
US20200401904A1 (en) * 2019-06-24 2020-12-24 GE Precision Healthcare LLC Adaptive medical imaging device configuration using artificial intelligence
CN110737426B (zh) * 2019-09-06 2022-05-06 未鲲(上海)科技服务有限公司 程序块创建方法、装置、计算机设备和存储介质
CN116668311A (zh) * 2020-07-12 2023-08-29 华为技术有限公司 一种数据采集方法及设备
CN112068895B (zh) * 2020-08-10 2023-12-19 深圳市鼎盛光电有限公司 代码配置方法、装置、视频播放设备及存储介质
US11677746B2 (en) 2020-10-30 2023-06-13 Microsoft Technology Licensing, Llc Device capability model sharing
CN112560369B (zh) * 2020-12-21 2023-06-27 上海逸集晟网络科技有限公司 内存设计方法、装置、终端及存储介质
US11825299B2 (en) 2021-02-08 2023-11-21 Hewlett Packard Enterprise Development Lp Customized code bundle to enable secure communication from internet of things devices at wireless networks
KR20230142999A (ko) * 2022-04-04 2023-10-11 두산로보틱스 주식회사 기능 모듈의 추가 및 삭제가 가능하고 타사 제품과의 연동을 지원하는 관리 장치 및 방법

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010104622A (ko) * 1998-10-14 2001-11-26 추후기재 반도체 설계의 구성 및 기능을 관리하는 방법 및 장치

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4371516B2 (ja) * 1999-02-08 2009-11-25 キヤノン株式会社 管理サーバ装置及び印刷処理方法及び情報処理装置及び印刷制御方法及びコンピュータ読取可能な記憶媒体
US6968286B1 (en) * 1999-07-28 2005-11-22 Lsi Logic Corporation Functional-pattern management system for device verification
US20020188434A1 (en) 2001-06-12 2002-12-12 Pauline Shulman System and method for providing cross-development application design tools and services via a network
US20060230383A1 (en) 2005-04-12 2006-10-12 Moulckers Ingrid M Solutions dynamic runtime assembly
US8589866B2 (en) * 2007-08-29 2013-11-19 Ricoh Company, Ltd. Automatically generating capability-based computer peripheral device drivers
US8214548B2 (en) * 2007-08-29 2012-07-03 Ricoh Company, Ltd. Capability-based control device driver of a computer peripheral device
US9753712B2 (en) * 2008-03-20 2017-09-05 Microsoft Technology Licensing, Llc Application management within deployable object hierarchy
US8732588B2 (en) * 2008-09-09 2014-05-20 Applied Systems, Inc. Method and apparatus for remotely displaying screen files and efficiently handling remote operator input
US20110252163A1 (en) 2010-04-09 2011-10-13 Microsoft Corporation Integrated Development Environment for Rapid Device Development
US9397885B2 (en) * 2011-09-28 2016-07-19 Apperian, Inc. Conveyance of configuration information in a network
US9055120B1 (en) * 2011-12-16 2015-06-09 Google Inc. Device capability filtering
US9128724B2 (en) 2012-08-28 2015-09-08 International Business Machines Corporation Configuring assembly of a system using supplied architectural artifacts
US10628136B2 (en) 2013-05-24 2020-04-21 Tata Consultancy Services Limited Internet of things (IoT) application development
US9465658B1 (en) * 2014-03-27 2016-10-11 Amazon Technologies, Inc. Task distribution over a heterogeneous environment through task and consumer categories
US9900369B2 (en) * 2014-07-10 2018-02-20 Oracle International Corporation Device characteristics detection and emulation
US9882775B1 (en) * 2014-10-22 2018-01-30 Amazon Technologies, Inc. Dependent network resources
CN104391690B (zh) * 2014-11-04 2019-06-11 中国石油天然气股份有限公司 一种应用开发***及方法
US9529950B1 (en) * 2015-03-18 2016-12-27 Altera Corporation Systems and methods for performing profile-based circuit optimization using high-level system modeling
US9859255B1 (en) * 2016-10-01 2018-01-02 Intel Corporation Electronic device package
US10911323B2 (en) * 2017-01-24 2021-02-02 Texas Instruments Incorporated System-on-chip (SoC) assembly, configurable IP generation and IP integration utilizing distributed computer systems

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010104622A (ko) * 1998-10-14 2001-11-26 추후기재 반도체 설계의 구성 및 기능을 관리하는 방법 및 장치

Also Published As

Publication number Publication date
JP2021500686A (ja) 2021-01-07
US20190138678A1 (en) 2019-05-09
EP3707594A1 (en) 2020-09-16
AU2018365860B2 (en) 2023-06-01
CN111417925B (zh) 2024-04-05
US10678975B2 (en) 2020-06-09
CN111417925A (zh) 2020-07-14
JP7090152B2 (ja) 2022-06-23
WO2019094340A1 (en) 2019-05-16
AU2018365860A1 (en) 2020-05-28
KR102368200B1 (ko) 2022-02-28

Similar Documents

Publication Publication Date Title
KR102368200B1 (ko) 장치 설계를 위한 코드 모듈 선택
CN111279320B (zh) 实现微服务配置和管理的api储存库
US10503493B2 (en) Distributed versioning of applications using cloud-based systems
AU2018200011B2 (en) Systems and methods for blueprint-based cloud management
US20190028360A1 (en) Visual devops systems and methods
US9311161B2 (en) Automatically configured management service payloads for cloud IT services delivery
US11245579B1 (en) Preconfigured device representations
US20180089005A1 (en) Generating an Application Programming Interface
US11163552B2 (en) Federated framework for container management
JP2021502732A (ja) ゲートウェイ管理コンソールにアクセスするためのコンピュータ処理方法、装置、システム、およびプログラム
US10656939B2 (en) Modeling lifetime of hybrid software application using application manifest
US10817280B1 (en) Overriding shared service interfaces
US11159404B1 (en) Definition schema for device capabilities
US11366865B1 (en) Distributed querying of computing hubs

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant