KR20150120429A - 판독 전용 메모리의 부트 코드 패칭 - Google Patents

판독 전용 메모리의 부트 코드 패칭 Download PDF

Info

Publication number
KR20150120429A
KR20150120429A KR1020157025232A KR20157025232A KR20150120429A KR 20150120429 A KR20150120429 A KR 20150120429A KR 1020157025232 A KR1020157025232 A KR 1020157025232A KR 20157025232 A KR20157025232 A KR 20157025232A KR 20150120429 A KR20150120429 A KR 20150120429A
Authority
KR
South Korea
Prior art keywords
boot code
boot
execution
rom
memory
Prior art date
Application number
KR1020157025232A
Other languages
English (en)
Other versions
KR102026393B1 (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 KR20150120429A publication Critical patent/KR20150120429A/ko
Application granted granted Critical
Publication of KR102026393B1 publication Critical patent/KR102026393B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4406Loading of operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/66Updates of program code stored in read-only memory [ROM]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

본 발명은 판독 전용 메모리(ROM)의 부트 코드를 패치하기 위한 장치들 및 기법들을 기술한다. 일부 양상들에서, ROM으로부터의 부트 코드의 실행이 디바이스의 부트 프로세스를 시작하기 위해 개시된다. 그 다음, 상기 ROM으로부터의 부트 코드의 실행은, 다른 메모리로부터의 정정된 부트 코드(corrected boot code) 또는 추가적인 부트 코드와 같은 다른 부트 코드의 실행을 인에이블하도록 인터럽트된다. 일단, 상기 다른 부트 코드가 실행되면, 상기 ROM으로부터의 상기 부트 코드의 실행은 상기 컴퓨팅 디바이스를 부트시키는 것을 계속하도록 재개된다. 이렇게 함으로써, 정정된 부트 코드 또는 추가적인 부트 코드는 상기 ROM에 저장된 상기 부트 코드를 패치하기에 효력있는 부트 프로세스 동안 실행될 수 있다.

Description

판독 전용 메모리의 부트 코드 패칭{PATCHING BOOT CODE OF READ-ONLY MEMORY}
본 발명은 2013년 2월 22일자로 출원된 미국 가특허 출원 제61/768,097호의 우선권을 주장하며, 상기 출원의 내용은 그 전체가 본 명세서에 참조로서 포함된다.
본 명세서에서 제공되는 배경 설명은 본 발명의 배경을 개괄적으로 제시하기 위한 것이다. 본 배경기술란에서 기술되는 정도의 본 발명의 발명자들의 연구는 물론, 출원 시점에 달리 종래기술로서 볼 수 없는 본 발명의 양상들은, 본 발명에 대해 명시적으로나 암시적으로도 종래기술로서 인정되는 것은 아니다.
컴퓨팅 및 전자 디바이스들은 종종, 상기 디바이스의 리소스들 또는 컴포넌트들을 구성하기 위해 파워-업(power-up) 시, 부트 코드를 실행한다. 일단 리소스들 및 컴포넌트들이 구성되면, 운영 체제가 상기 부트 코드에 의해 로딩되어 실행된다. 그 다음, 상기 디바이스의 제어는 상기 디바이스의 기능들 또는 어플리케이션들을 구현하는 실행 운영 체제에 패스된다.
상기 디바이스 상에서의 허가되지 않은(unauthorized) 소프트웨어의 실행을 방지하기 위해, 상기 부트 코드는 상기 운영 체제 및 상기 부트 코드 상위의 소프트웨어 계층들(software layer)의 인증(authenticity)을 검증할 수 있다. 상기 부트 코드가 파워-온 시 실행되는 가장 낮은 레벨의 코드이기 때문에, 상기 부트 코드는 종종, 상기 부트 코드의 인증을 보장하기 위해 상기 디바이스의 하드웨어에 하드-코딩된다. 상기 부트 코드를 하드-코딩하는 것은 상기 부트 코드의 악성 수정(malignant modification)을 방지하지만, 이러한 하드-코딩은 또한 에러들을 정정하기 위한 상기 부트 코드의 수정도 방지한다. 따라서, 상기 부트 코드 내의 에러를 정정하기 위해, 상기 디바이스의 하드웨어는 종종, 재설계 및 재제작을 요하며, 이는 상당한 시간, 비용 및 자원들을 소모한다.
하나 이상의 구현들의 세부사항들이 첨부 도면들 및 하기 상세한 설명에 제시된다. 다른 특징들 및 장점들이 상세한 설명 및 도면들로부터 분명할 것이다. 따라서, 이 발명의 내용란은 필수 특징들을 기술하거나 청구된 발명의 범위를 한정하기 위해 사용되는 것으로 고려되어서는 안된다.
컴퓨팅 디바이스의 부트 프로세스를 시작하기 위해 제1 부트 코드의 실행을 판독 전용 메모리(ROM)로부터 개시하기 위한 방법이 기술된다. 그 다음, 상기 방법은 다른 메모리로부터의 제2 부트 코드의 실행을 인에이블하기 위해 제1 부트 코드의 실행을 인터럽트(interrupt)한다. 상기 제2 부트 코드가 실행된 후, 상기 제1 부트 코드의 실행은 컴퓨팅 디바이스의 부트 프로세스를 계속하기 위해 재개(resume)된다.
ROM으로부터의 부트 코드의 실행을 개시하기 위한 다른 방법이 기술되며, 상기 부트 코드의 실행은 프로그램 카운터를 통해 진전(advance)된다. 상기 프로그램 카운터가 상기 부트 코드 내의 미리 결정된 어드레스에 도달함에 응답하여, 상기 부트 코드의 실행이 인터럽트된다. 그 다음, 상기 방법은 ROM 내의 부트 코드의 일부 대신, 일회 프로그램가능(OTP) 메모리로부터의 대안적인 부트 코드를 실행한다. 상기 대안적인 부트 코드의 실행에 응답하여, 상기 프로그램 카운터는 ROM으로부터의 부트 코드의 실행을 재개하기에 효력있는(effective) 부트 코드 내의 어드레스에 리턴된다.
프로세서, ROM, OTP 메모리 및 인터럽트 관리자를 포함하는 시스템-온-칩(Soc)이 기술되며, 상기 인터럽트 관리자는 상기 프로세서의 프로그램 카운터가 부트 코드 내의 미리 결정된 어드레스에 접함(encountering)에 응답하여 ROM으로부터의 부트 코드의 프로세서에 의한 실행을 인터럽트하도록 구성된다. 인터럽트 관리자는 또한, 프로세서로 하여금 OTP 메모리로부터의 추가적인 부트 코드를 실행하게 하며, 그다음, 프로세서로 하여금 ROM으로부터의 부트 코드의 실행을 재개하게 하기에 효력있는 부트 코드 내의 어드레스에 프로그램 카운터를 리턴시키도록 구성된다.
하나 이상의 구현들의 세부사항이 첨부 도면들 및 하기 상세한 설명에 제시된다. 다른 특징들 및 장점들이 상세한 설명 및 도면들로부터 분명할 것이다.
도면들에서, 도면 부호의 가장 좌측 숫자(left-most digit)는 그 도면 부호가 처음 나타난 도면을 식별한다. 상세한 설명 및 도면들에서 서로 다른 예들에서의 동일한 도면 부호들의 사용은 유사한 요소들을 나타낸다.
도 1은 하나 이상의 양상들에 따른 컴퓨팅 디바이스들을 갖는 동작 환경을 예시한다.
도 2는 하나 이상의 양상들에 따른 컴퓨팅 디바이스의 예시적인 부트 아키텍쳐를 예시한다.
도 3은 판독 전용 메모리로부터의 부트 코드의 실행을 인터럽트하기 위한 방법을 예시한다.
도 4는 일회 프로그램가능 메모리로부터의 대안적인 부트 코드를 실행하기 위한 방법을 예시한다.
도 5는 하나 이상의 양상들에 따른 부트 코드 및 부트 코드 패치의 예들을 예시한다.
도 6은 부트 코드들을 일회 프로그램가능 메모리의 퓨즈들 내로 버닝(burning)하기 위한 방법을 예시한다.
도 7은 본 명세서에 기술된 기법들의 양상들을 구현하기 위한 시스템-온-칩(SoC) 환경을 예시한다.
판독 전용 메모리(ROM)의 부트 코드를 패치하기 위한 종래 기법들은 전형적으로, 상기 부트 코드가 기입(예컨대, 버닝)되는 ROM 하드웨어의 재제작을 요한다. 이러한 ROM 하드웨어의 재제작은 종종, 사전실리콘 검증, 실리콘 테이프 아웃(tape-out) 또는 마스킹, ROM 포팅(ROM porting), ROM 하드웨어의 제조 및 사후 실리콘 검증의 또다른 라운드(round)를 포함한다. 따라서, 부트 코드를 패치하기 위한 ROM 하드웨어의 재제작은 상당량의 시간, 돈 및 자원들을 소모한다.
본 발명은 ROM에 부트 코드를 패치하기 위한 장치들 및 기법들을 기술하며, 이는 다른 부트 코드(예컨대, 대안적인 또는 추가적인 부트 코드)가 부트 프로세스 동안 다른 메모리로부터 실행될 수 있게 한다. 일부 양상들에서, 다른 메모리는 일회 프로그램가능(OTP) 메모리이며, 다른 부트 코드가 ROM을 포함하는 하드웨어의 제작 후 이 OTP 메모리내로 버닝된다. 부트 코드가 SoC에 수록될 때, SoC는 다른 코드(예컨대, 패칭 코드)에 대한 로크아웃 메커니즘(lockout mechanism)을 제공할 수 있다. 예를 들어, 부트 코드가 수록된 제품(product)을 출하(shipping)하기에 앞서 상기 부트 코드(예컨대, BootROM)의 검증 후 어떤 패치도 필요하지 않은 것으로 결정되는 경우, SoC는 제품의 수명에 걸쳐 부트 코드의 보안을 보장하기 위해 그러한 특징을 디세이블시키는 능력을 제공할 수 있다. 유사하게, 부트 코드의 패치가 필수적인 경우, SoC는, 일단 부트 코드가 패치되면 그러나 다른 부트 코드의 보안을 보장하기 위한 하드웨어의 출하(shipment)에 앞서, OTP 메모리의 나머지 블록들을 로크아웃하기 위한 다른 능력을 제공할 수 있다.
다음의 설명은 동작 환경, 상기 동작 환경에서 이용될 수 있는 기법들 및 상기 동작 환경의 컴포넌트들이 구현될 수 있는 SoC를 기술한다. 하기 설명에서, 동작 환경에 대한 참조는 단지 예로서 이루어진다.
동작 환경
도 1은 컴퓨팅 디바이스들(102)을 갖는 동작 환경(100)의 예를 예시하며, 상기 디바이스들 각각은 다양한 데이터를 통신, 액세스, 제시 또는 프로세싱할 수 있다. 컴퓨팅 디바이스들(102)은 스마트폰(104), 태블릿 컴퓨터(106), 네트워크-결합 스토리지 드라이브(NAS drive)(108), 디지털 카메라(110) 및 인터넷 프로토콜 인에이블형 텔레비전(IP TV)(112)을 포함한다. 비록, 도시되지 않지만, 데스크탑 컴퓨터, 서버, 모바일-인터넷 디바이스(MID), 팩스 머신, 프린터, 디지털 캠코더, 넷북, 울트라-북, 게이밍 콘솔, 홈 자동화 단말, 모바일 핫스팟, 네트워킹 미디어 플레이어, 및 기타 등등과 같은 컴퓨팅 디바이스들(102)의 다른 구성들 역시 고려된다.
일반적으로, 컴퓨팅 디바이스들(102)은 "오프" 상태로부터 "온" 상태까지의 범위의 동작 상태들을 가진다. 이 동작 상태들은 완전한 오프 상태(기계적 오프), 동면 상태(hibernation state), 휴면 상태(sleep state), 서스펜드 상태(suspend state), 휴지 상태(idle state), 활성 상태 및 기타 등등을 포함할 수 있다. 더 하위(lower) 동작 상태로부터 더 상위(higher) 동작 상태로(예컨대, 오프 상태로부터 활성 상태로) 천이할 때, 컴퓨팅 디바이스(102)가 부트된다. 컴퓨팅 디바이스(102)를 부트시키는 것은, 운영 체제 또는 상위 레벨 어플리케이션들에 의한 액세스를 위해 컴퓨팅 디바이스(102)의 컴포넌트들 또는 리소스들을 구성하는 하위 레벨 코드(low-level code)(예컨대, 부트 코드 또는 바이너리)를 실행시키는 것을 포함한다.
각각의 컴퓨팅 디바이스(102)는 프로세서 코어(114)(예컨대, 어플리케이션 프로세서 코어) 및 컴퓨터 판독가능 스토리지 매체(CRM)(116)를 포함한다. 비록, 단일 코어로 도시되지만, 프로세서 코어(114)는 어떤 적절한 방식으로 구성될 수 있는(예컨대, 이종 멀티-코어 어플리케이션 프로세서) 어떤 적절한 수 및/또는 타입의 프로세싱 코어들 중 하나일 수 있다. 일부 경우들에서, 프로세서 코어(114)는 마이크로제어기, 내장식 제어기 또는 디지털-신호 프로세서의 코어로서 구현된다.
CRM(116)은 휘발성 메모리(118) 및 비-휘발성 메모리(120)를 포함하며, 이들은 어떤 적절한 타입, 조합 또는 수의 내부 및/또는 외부 메모리 디바이스들을 포함할 수 있다. CRM(116)의 각각의 메모리는 하드웨어의 온-칩 메모리 영역으로서 또는 데이터 인터페이스 또는 버스를 통해 프로세서 코어(114)와 데이터를 통신하는 오프-칩 메모리 디바이스로서 구현될 수 있다. 이 특별한 예에서, 휘발성 메모리(118)는 정적 랜덤 액세스 메모리(SRAM)(122) 및 동기식 동적 랜덤 액세스 메모리(DRAM)(124)를 포함한다. 대안적으로 또는 추가적으로, 휘발성 메모리(118)는 랜덤 액세스 메모리(RAM), 비동기 동적 RAM, 더블-데이터-레이트 RAM(DDR), 및 기타 등등과 같은 다른 적절한 타입의 메모리를 포함할 수 있다.
비휘발성 메모리(120)는 직렬 주변장치 인터페이스(SPI) 플래시(126), NAND 플래시(128), 판독 전용 메모리(130) 및 일회 프로그램가능(OTP) 메모리(132)를 포함한다. 고려되는 다른 비휘발성 메모리들은 비휘발성 RAM(NVRAM), 전기적으로 소거가능하고 프로그램가능한 ROM, 내장식 멀티미디어 카드(eMMC) 디바이스들, NOR 플래시, 단일-레벨 셀(SLC) 플래시, 멀티-레벨 셀(MLC) 플래시 및 기타 등등을 포함한다. 이 특별한 예에서, ROM(130) 및 OTP 메모리(132)는 온-칩 메모리 영역들로서 구현되며, 이 영역들은 칩의 다양한 금속성 및 반도체 층들 내로 제조된다.
비휘발성 메모리(120)는 파워 다운(power-down) 또는 서스펜드될 때 지속적으로(persistently) 컴퓨팅 디바이스(102)의 데이터를 저장한다. 컴퓨팅 디바이스(102)의 부트 코드는 SPI 플래시(126), NAND 플래시(128) 및 ROM(130)과 같은 하나 이상의 비휘발성 메모리 컴포넌트들에 저장된다. 예를 들어, 최하위-레벨 또는 보안 부트 코드는 ROM(130)을 포함하는 칩의 제조 동안 상기 ROM(130) 내로 기입 또는 버닝된다. 이렇게 함으로써, 부트-ROM으로도 지칭되는 ROM(130) 내의 부트 코드는 칩이 제조된 후 수정될 수 없다. ROM(130)의 수정불가능한 특성은 ROM(130)에 저장된 부트 코드의 인증 및 보안을 보장한다. 컴퓨팅 디바이스(102)의 상위 레벨 부트 코드는 SPI 플래시(126) 및 NAND 플래시(128) 각각에 저장된 부트 로더들로서 구현된다. SPI 플래시(126) 및 NAND 플래시(128)의 컨텐츠가 수정가능하거나 사용자에 의해 액세스가능하기 때문에, 이 디바이스들에 저장된 상위 레벨 부트 코드는 안전하지 않다.
일부 양상들에서, 부트 코드는 일회까지 기입될 수 있는 OTP 메모리(132)에 기입된다. OTP 메모리(132)는 퓨즈들의 블록들을 포함하고, 이들 각각은 설정가능한 바이너리 값을 표시한다. 특히, OTP 메모리(132)는, 모든 퓨즈들이 모든 일(1)들 또는 모든 제로(0)들의 블록들과 같은 버진(virgin) 또는 디폴트 상태로 설정된 채로 제조된다. 데이터를 OTP 메모리(132) 내로 기입하기 위해, 적절한 퓨즈들이 바람직한 바이너리 값을 나타내기 위해 이들의 디폴트 상태로부터 비-디폴트 상태로 버닝된다. 따라서, 일단 OTP 메모리(132)의 퓨즈가 비-디폴트 상태로 버닝되면, 퓨즈는 더이상 OTP 메모리(132)에 다른 데이터를 기입하기에 유용하지 않게 된다. 대안적으로 또는 추가적으로는, OTP 메모리(132)의 컨텐츠는 사용되지 않은 퓨즈 블록들의 퓨즈들 및 사용되지 않은 퓨즈 블록들과 관련된 에러 정정 코드 비트들을 버닝시킴으로써 영구적으로 로킹될 수 있다.
컴퓨팅 디바이스(102)의 운영 체제들, 어플리케이션들 또는 사용자 데이터(미도시)는 휘발성 메모리(118), 비휘발성 메모리(120) 또는 어떤 다른 적절한 타입의 CRM(116)에 의해 저장될 수 있거나 또는 이로부터 실행될 수 있다. 대안적으로 또는 추가적으로는, 컴퓨팅 디바이스(102)의 운영 체제들 및/또는 어플리케이션들은 펌웨어 또는 다른 프로세서로 실행가능한 명령어들, 바이너리들 또는 코드로서 구현될 수 있다. 컴퓨팅 디바이스(102)의 운영 체제들 및 어플리케이션들은 컴퓨팅 디바이스(102)의 사용자 인터페이스, 다양한 기능들 및/또는 서비스들을 제공하기 위해 프로세서 코어(114)에 의해 실행가능하다.
CRM(116)은 또한, 인터럽트 관리자(134)를 포함하며, 상기 인터럽트 관리자는 이 특별한 예에서, 다양한 기능들을 구현하기 위해 프로세서 코어(114)에 의해 실행가능한 프로세서로 실행가능한 명령어들로서 구현된다. 대안적으로 또는 추가적으로는, 인터럽트 관리자(134)는 펌웨어 또는 하드웨어(미도시) 또는 이들의 어떤 적절한 조합을 통해, 부분적으로 또는 전체적으로 구현될 수 있다. 일부 경우들에서, 인터럽트 관리자(134)는 ROM(130)의 또는 ROM(130)이 상주하는 칩의 제작(예컨대, 제조) 동안 ROM(130)의 부트 코드 내로 하드코딩된다. 인터럽트 관리자(134)는 ROM(130)으로부터 부트 코드의 실행을 인터럽트하여 부트 코드가 다른 메모리들로부터 실행될 수 있게 한다. 인터럽트 관리자(134)의 구현 및 사용은 다양하며, 하기에 기술된다.
컴퓨팅 디바이스(102)는 또한, I/O 포트들(136), 디스플레이(138) 또는 네트워크 인터페이스(들)(140)을 포함할 수 있다. I/O 포트들(136)은 컴퓨팅 디바이스(102)가 다른 디바이스들 또는 사용자들과 인터랙션할 수 있게 한다. I/O 포트들(136)은 USB 포트들, 오디오 포트들, 직렬 ATA(SATA) 포트들, PCI-고속 기반 포트들 또는 카드-슬롯들, 보안 디지털 입력/출력(SDIO) 슬롯들 및/또는 다른 레가시 포트들과 같은 내부 또는 외부 포트들의 어떤 조합을 포함할 수 있다. 다양한 주변기기들은 HID(human-input device)들, 외부 컴퓨터 판독가능 스토리지 매체 또는 다른 주변기기들과 같은 I/O 포트들(136)과 동작적으로 결합될 수 있다.
디스플레이(138)는 컴퓨팅 디바이스(102)의 운영 체제 또는 어플리케이션과 관련된 사용자 인터페이스 또는 렌더링되는 그래픽들을 제시할 수 있다. 디스플레이(138)는 터치 스크린 또는 터치 감응식 오버레이와 같은 터치 입력 센서(미도시)를 포함할 수 있다. 네트워크 인터페이스(들)(140)는 하나 이상의 네트워크들 및 이와 연결된 다른 디바이스들에 연결성을 제공한다. 네트워크 인터페이스들(140)을 통해 통신되는 데이터는 컴퓨팅 디바이스(102)가 통신하고 있는 통신 프로토콜 또는 표준에 따라 패킷화 또는 프레이밍될 수 있다. 네트워크 인터페이스들(140)은 로컬 네트워크, 인트라넷 또는 인터넷을 통한 통신을 위한 이더넷 또는 광섬유 인터페이스들과 같은 유선 인터페이스들을 포함할 수 있다. 네트워크 인터페이스들(140)은 또한, 무선 LAN들, 셀룰러 네트워크들 또는 무선 개인 영역 네트워크들(예컨대, 블루투스™)와 같은 무선 네트워크들을 통한 통신을 지원하는 무선 인터페이스들을 포함할 수 있다.
도 2는 도면부호(200)에서 하나 이상의 양상들에 따른 컴퓨팅 디바이스의 예시적인 부트 아키텍쳐를 예시한다. 부트 프로세스 동안 부트 코드의 실행은 컴퓨팅 디바이스의 하드웨어(202) 및 소프트웨어(204)에서 발생한다. 하드웨어(202)는 ROM(130)을 포함하며, 부트 코드의 바이너리(부트-ROM(206))는 ROM(130)의 제조 동안 상기 ROM 내로 버닝된다. 부트-ROM(206)은 컴퓨팅 디바이스의 부트 프로세스를 개시하기 위해 실행된다. 부트-ROM(206)이 ROM(130)에 버닝되어 수정불가능하기 E때문에, 부트-ROM(206)의 실행은 신뢰되는 부트 프로세스를 구현할 수 있는 바, 여기서 부트-ROM(206)은 "신뢰의 근본(root of trust)"으로서 기능한다. 특히, 일단 부트-ROM(206)이 ROM(130)에 기입되면, ROM(130)의 판독 전용 특성은 부트-ROM(206)의 인증 및 보안을 보장한다.
하드웨어(202)는 또한, OTP 메모리(132)를 포함하며, 이 OTP 메모리는 바이너리 값들을 저장할 수 있는 퓨즈들의 블록들로서 구성된다. 이 특별한 예에서, OTP 메모리(132)는 부트-ROM 패치(208)를 저장하며, 상기 부트-ROM 패치는 컴퓨팅 디바이스의 부트 시퀀스 동안 실행되는 바이너리 코드를 포함한다. 일부 경우들에서, 부트-ROM 패치(208)는, 가령 부트-ROM(206)의 일부가 에러 또는 버그를 포함할 때, 부트-ROM(206)의 일부 대신 실행되는 대안적인 부트 코드를 포함한다. 다른 경우들에서, 부트-ROM 패치(208)는 부트-ROM(206)과 연계하여 실행되는 추가적인 부트 코드를 포함한다. 이러한 경우들에서, 추가적인 부트 코드의 실행은 부트 시퀀스 동안 컴퓨팅 디바이스의 추가적인 기능들을 구현할 수 있다. OTP 메모리에 기입된 코드의 구현 및 사용은 다양하며, 하기에 기술된다.
부트 시퀀스 동안, 부트-ROM(206)의 실행은 소프트웨어(204) 내로 상위 레벨 부트 로더를 로딩하는 바, 상기 소프트웨어는 또한, 다른 상위 레벨 부트 로더를 로딩하며, 부트 시퀀스는 운영 체제가 로딩될 때까지 계속된다. 이 특별한 예에서, 부트-ROM(206)의 실행은 SPI 플래시(126)로부터 레벨 2의 부트 로더(210)를 로딩한다. 리소스들의 제어를 레벨 2의 부트 로더(210)에 전달하기 전에, 부트-ROM(206)은 암호 서명(cryptographic signature) 또는 해시를 검증함으로써 부트 로더의 코드의 인증을 검증한다. 이렇게 함으로써, 부트-ROM(206)은 다음 레벨 부트 로더가 안전해지게(예컨대, 조작(tamper)되지 않게) 하며, 신뢰의 체인이 "신뢰의 근본"으로부터 부트 시퀀스의 다음 단계까지 확립되게 한다.
일단, 리소스들의 제어가 부트-ROM(206)으로부터 레벨 2의 부트 로더(210)로 패스되면, 부트 로더의 실행은 또한, 컴퓨팅 디바이스의 리소스들을 구성하고 NAND 플래시(128)로부터 레벨 3의 부트 로더(212)를 로딩한다. 여기서, 신뢰의 체인을 지속하기 위해, 레벨 2의 부트 로더(210)는 리소스들의 제어가 레벨 3의 부트 로더(212)로 전달되기 전에 레벨 3의 부트 로더(212)의 인증을 검증한다. 도 2에 도시된 바와 같이, 부트 시퀀스는 어떤 수의 중간 부트 로더들을 통해 부트 시퀀스가 진행(progress)됨에 따라, 레벨 N의 부트 로더(214)가 로딩되고, 검증되며 그리고 실행될때까지 계속된다. 신뢰되는 부트 프로세스를 구현하기 위해, 부트 코드 또는 부트 로더의 각각의 레벨의 인증이 이전의 부트 로더에 의해 검증된다.
부트 시퀀스를 종료하기 위해, 레벨 N의 부트 로더(214)의 실행은 비휘발성 메모리(120)로부터 운영 체제(216)를 로딩하고, 운영 체제(216)와 관련된 암호 서명 또는 해시 값을 검증함으로써 운영 체제의 인증을 검증한다. 이렇게 함으로써, 신뢰되는 부트 프로세스는 컴퓨팅 디바이스 상에서 실행되는 소프트웨어가 인증된 것이며 허가됨(authorized)을 보장하도록 구현된다. 신뢰되는 부트 프로세스의 "신뢰의 근본"은 부트-ROM(206)이며, 부트-ROM은 일단 메모리가 제조되면 ROM(130)을 변경하지 못함(inability)으로 인해 안전한 것으로 보증된다.
판독 전용 메모리의 부트 코드를 패치하는 기법들
다음 설명은 판독 전용 메모리의 부트 코드를 패치하는 기법들을 기술한다. 이 기법들은 컴퓨팅 디바이스(102) 상에 구현된 도 1의 인터럽트 관리자(134)와 같은 이전에 기술된 환경 또는 엔티티들을 이용하여 구현될 수 있다. 이 기법들은 도 3, 4 및 6에 예시된 방법들을 포함하며, 이들 각각은 하나 이상의 엔티티들에 의해 수행되는 동작들의 세트로서 도시된다. 이들 방법들은 동작들을 수행하기 위한 도시된 순서에 반드시 제한되지는 않는다. 또한, 이들 방법들은 동일한 엔티티에 의해 수행되든, 별개의 엔티티들에 의해 수행되든 또는 이들의 조합에 의해 수행되든지 간에, 전체적으로 또는 부분적으로, 서로 연계하여 이용될 수 있다. 다음의 설명의 부분들에서, 도 1의 동작 환경(100) 및 도 2 및 5의 엔티티들에 대한 참조가 예로서 이루어질 것이다. 이러한 참조는 동작 환경(100)에 제한되는 것으로 고려되지 않으며, 오히려 다양한 예들 중 하나를 예시하는 것으로 고려된다.
도 3은 도 1의 인터럽트 관리자(134)에 의해 수행되는 동작들을 포함하는, 판독 전용 메모리로부터의 부트 코드의 실행을 인터럽트하기 위한 방법(300)을 도시한다.
단계(302)에서, 판독 전용 메모리(ROM)로부터의 제1 부트 코드의 실행이 개시된다. 제1 부트 코드의 실행을 개시하는 것은 컴퓨팅 디바이스의 부트 프로세스를 시작한다. 일부 경우들에서, 제1 부트 코드는 ROM의 제조 동안 하드웨어로 버닝되는 보안 부트-ROM이다. 제1 부트 코드의 실행을 개시하는 것은 컴퓨팅 디바이스의 파워-온 이벤트에 응답하여 이루어 질 수 있다. 예를 들어, 스마트폰 또는 태블릿 컴퓨터가 파워 온될 때, 마이크로제어기 또는 하드웨어 로직 회로가 부트-ROM 바이너리의 실행을 개시할 수 있다.
단계(304)에서, 제1 부트 코드의 실행은 다른 메모리로부터의 제2 부트 코드의 실행을 인에이블(enable)하도록 인터럽트된다. 제1 부트 코드의 실행은 제1 부트 코드의 실행을 중지(halt)하기에 효력있는 미리 결정된 포인트에서 인터럽트된다. 미리 결정된 포인트는 인터럽트, 브레이크, 점프 및 기타 등등을 트리거하는 제1 부트 코드 내의 어드레스 또는 명령어일 수 있다. 제1 부트 코드가 실행되지 않을 때, 컴퓨팅 디바이스의 다른 메모리로부터의 제2 부트 코드가 실행될 수 있다. 일부 경우들에서, 제2 부트 코드는 버그 또는 에러를 포함하는 부분과 같은 제1 부트 코드의 부분 대신 실행된다. 다른 경우들에서, 제2 부트 코드의 실행은 디바이스의 부트 프로세스 동안 추가적인 기능 또는 특징을 제공한다.
단계(306)에서, ROM으로부터의 제1 부트 코드의 실행은 제2 부트 코드의 실행 후 재개된다. ROM으로부터의 제1 부트 코드의 실행을 재개하는 것은 디바이스의 부트 프로세스를 계속한다. 일부 경우들에서, 제1 부트 코드의 실행은 리턴 어드레스와 같은 미리 결정된 리턴 포인트에서 재개된다. 제1 부트 코드의 계속되는 실행은 디바이스의 상위 레벨 부트 로더 또는 운영 체제를 로딩할 수 있다. 일부 경우들에서, 상위 레벨 부트 로더 또는 운영 체제의 인증이 디바이스 리소스들의 제어가 제1 부트 코드로부터 패스되기 전에 검증된다. 이는 신뢰되는 부트 프로세스를 구현하기에 효과적일 수 있는 바, 이 신뢰되는 부트 프로세스에서 부트 프로세스의 각각의 레벨 또는 계층은 디바이스의 제어가 하위-레벨 부트 로더로 전달되기 전에 검증된다. ROM 및 OTP 메모리로부터 근본 레벨 부트 코드를 실행함으로써, 이 메모리들의 수정불가능한 특성으로 인해 최하위 레벨 부트 코드의 보안이 보장된다.
도 4는 도 1의 인터럽트 관리자(134)에 의해 수행되는 동작들을 포함하는, 일회 프로그램가능 메모리로부터의 대안적인 부트 코드를 실행하기 위한 방법(400)을 도시한다.
단계(402)에서, 판독 전용 메모리(ROM)로부터의 부트 코드의 실행이 개시된다. ROM에 저장된 부트 코드는 컴퓨팅 디바이스를 부트하기 위해 실행되는 부트-ROM 바이너리를 포함할 수 있다. 일부 경우들에서, 부트-ROM은 ROM의 물리적 도체 또는 반도체 층들 내로 버닝되며 수정불가능하다. 이러한 경우들에서, 부트-ROM은 보안 부트-ROM이며, 신뢰되는 부트 프로세스에 대한 "신뢰의 근본"으로서 기능할 수 있다. 부트 코드의 실행은 각각의 어드레스와 관련된 명령어들의 실행이 이루어지게 하는 부트의 어드레스들을 통해 증분되는 프로그램 카운터에 의해 진전된다.
일례로서, 사용자가 도 1의 스마트 폰(104)을 파워-온함을 고려해보자. 여기서, 스마트 폰(104)은, 스마트 폰(104)의 컴포넌트들 및 리소스들이 파워 다운된 "오프" 상태로부터 "온" 상태로 부트됨을 가정한다. "온" 상태로 부트하기 위해, 부트-ROM(206)은 사용자가 스마트 폰(104)을 파워-온함에 응답하여 실행을 시작한다. 도 5에 도시된 바와 같이, 부트-ROM(206)은 어드레스들(502) 및 바이너리(504)를 포함하며, 이는 실행될 때, 바이너리로부터 머신 코드 명령어들(명령어들(506))로 변환된다. 스마트 폰(104)의 프로세서 코어(114)는, 프로그램 카운터(508)가 어드레스들(502)을 통해 진행함에 따라, 바이너리의 라인(a line of binary)(504) 또는 대응 명령어(506)를 실행시킨다.
단계(404)에서, ROM으로부터의 부트 코드의 실행이 인터럽트된다. 이는 프로그램 카운터가 부트 코드 내의 미리 결정된 어드레스에 도달함에 응답하여 이루어질 수 있다. 미리 결정된 어드레스는, 상기 미리 결정된 어드레스가 수정될 수 없게 하기 위해 일회 프로그램가능 메모리와 같은 다른 메모리에 저장될 수 있다. 일부 경우들에서, 인터럽트 서비스 루틴(예컨대, 하드웨어 기반의 인터럽트 로직)은 프로그램 카운터가 부트 코드 내의 미리 결정된 어드레스에 도달할 때 인터럽트를 발행(fire)하도록 구성되어 있다. 이러한 경우들에서, 발행된 인터럽트는 인터럽트 핸들러로 하여금 다른 코드를 실행하게 하기에 효과적일 수 있다. 미리 결정된 어드레스는 실행이 방지되어야 하는 에러 또는 버그를 포함하는 부트 코드의 라인을 나타낼 수 있다. 대안적으로 또는 추가적으로는, 미리 결정된 어드레스는 에러 또는 버그를 포함하는 부트 코드의 섹션의 제1 어드레스일 수 있다.
본 예의 맥락에서, 부트-ROM 섹션(510)이 에러를 포함하며 이 에러는 실행에 응답하여 스마트 폰이 파워 온되지 못하게 함을 가정하자. 따라서, 어드레스(512)(0x5E0123FC)가 "BNE" 명령어의 실행을 방지하도록 인터럽트 프로세스를 개시하기 위해 선택된다. 인터럽트를 발행하기 위해 선택된 어드레스는 인터럽트 어드레스(514)로서 부트-ROM 패치(208) 내로 기입된다. 프로그램 카운터(508)가 인터럽트 어드레스(514)에 도달할 때, 인터럽트 관리자(134)는 프로세서 코어(114)가 "BNE" 명령어를 실행하는 것을 방지하기에 효력있는 인터럽트를 발행한다.
단계(406)에서, 대안적인 부트 코드가 일회 프로그램가능(OTP) 메모리로부터 실행된다. 이 대안적인 부트 코드는 ROM에 저장된 부트 코드의 부분 대신 실행된다. 일부 경우들에서, 대안적인 부트 코드의 실행은 ROM으로부터 부트 코드의 실행 동안 발행되는 인터럽트에 응답하여 이루어진다. 이러한 경우들에서, 인터럽트는 대안적인 부트 코드를 실행하도록 구성된 인터럽트 핸들러에 의해 클리어(clear)될 수 있다. 이 인터럽트 핸들러는 부트 코드의 더 앞선 실행 동안 구현 또는 구성될 수 있다.
현 예를 지속하여, 인터럽트 핸들러(516)는 인터럽트 관리자(134)에 의해 발행된 인터럽트를 클리어한다. 부트-ROM(206)의 실행이 중지된 동안, 인터럽트 핸들러(516)는 OTP 메모리(132)에 저장된 부트-ROM 패치(208)의 패치 바이너리(518)를 실행한다. 여기서, 패치 바이너리(518)는 부트-ROM 섹션(510) 대신 실행되며, 부트-ROM 섹션(510) 내의 에러 코드(erroneous code)의 실행이 방지된다. 이렇게 함으로써, 부트-ROM 섹션(510)의 코드는 ROM(130)의 컨텐츠를 변경 또는 수정함이 없이 패치될 수 있다. 추가적으로, 패치 바이너리(518)가 OTP 메모리(132) 내로 버닝되기 때문에, 부트 코드의 "신뢰의 근본"이 유지된느 바, 이는 OTP 메모리의 컨텐츠가 일단 버닝되면 수정될 수 없기 때문이다.
단계(408)에서, 프로그램 카운터는 ROM으로부터 부트 코드의 실행을 재개하기에 효력있는 부트 코드 내의 어드레스에 리턴된다. 부트 코드 내의 리턴 어드레스는 부트 코드의 하나 이상의 명령어들이 스킵되도록 구성될 수 있다. 옵션에 따라서는, 방법(400)은 ROM으로부터 부트 코드의 실행을 인터럽트하기 위해 동작(404)에 리턴할 수 있다. 예를 들어, 일부 경우들에서, 부트 코드의 복수의 섹션들이 패치될 수 있다. 따라서, 방법(400)의 동작들(404 내지 408)의 반복(iteration)들이 ROM에 저장된 부트 코드를 패치하도록 추가적인 바이너리들을 실행하기 위해 어떤 적절한 횟수 수행될 수 있다.
현 예를 지속하여, 부트-ROM 섹션(510)을 뒤따르는 어드레스(520)(0x5E01241C)가 리턴 어드레스(522)로서 부트-ROM 패치(208) 내로 버닝됨을 가정하자. 여기서 인터럽트 핸들러(516)는 패치 바이너리(518)의 실행 후 어드레스(522)를 리턴하도록 프로그램 카운터(508)를 설정한다. 이는 프로세서 코어(114)로 하여금 부트-ROM 섹션(510)을 스킵하고 어드레스(520)에서 부트-ROM(206)의 실행을 재개하게 하는 데 효과적이다. 일단, 부트-ROM(206)의 실행이 스마트 폰(104)의 부트 로더를 로딩하면, 부트-ROM(206)은 부트 로더를 인증된 것으로서 검증하고, 스마트 폰(104)을 부트시키는 것을 계속하기 위해 부트 로더에 제어를 패스한다.
도 6은 일회 프로그램가능 메모리의 퓨즈들 내로 부트 코드를 버닝하기 위한 방법(600)을 도시한다.
단계(602)에서, 부트 코드는 일회 프로그램가능한 메모리의 퓨즈들 내로 버닝된다. 부트 코드는, 부트-ROM 바이너리와 같은 판독 전용 메모리(ROM)에 저장된 다른 부트 코드를 보충하는 대안적인 부트 코드 또는 추가적인 부트 코드일 수 있다. 예로서, 복수의 코드의 섹션들 - 이 섹션들 중 하나는 에러를 포함함 - 을 포함하는 신뢰되는 부트-ROM 바이너리를 고려해 보자. 부트-ROM의 에러 섹션 대신 실행되도록 설계된 패치 바이너리가 OTP 메모리의 퓨즈들 내로 버닝된다. 따라서, 부트 시퀀스 동안 퓨즈들 내로 버닝되는 부트 코드의 실행은 부트-ROM 내의 에러(또는 버그)를 패치하기에 효과적일 수 있다.
단계(604)에서, 인터럽트 서비스에 대한 제1 어드레스는 OTP의 퓨즈들 내로 버닝된다. OTP 메모리 내의 이 제1 어드레스의 포함은 프로그램 카운터가 제1 어드레스에 접할 때, 인터럽트 서비스로 하여금 인터럽트를 발행하게 하기에 효과적일 수 있다. 대안적으로 또는 추가적으로는, 제1 어드레스는 부트 시퀀스 동안 OTP 메모리로부터의 부트 코드의 실행이 이루어지게 하기에 효과적이다. 상기 예의 맥락에서, 부트-ROM 내의 에러 앞에 위치된 어드레스는 OTP 메모리의 퓨즈들 내로 버닝된다. 에러 앞에 있는 어드레스를 선택함으로써, 부트-ROM의 실행은 에러를 접하기 전에 인터럽트 서비스에 의해 인터럽트된다. 추가적으로, 프로그램 카운터가 이 어드레스에 도달할 때, 인터럽트 핸들러는 에러를 포함하는 부트-ROM의 섹션 대신 패치 바이너리를 실행하도록 될 수 있다.
단계(606)에서, 인터럽트 서비스에 대한 제2 어드레스가 OTP의 퓨즈들 내로 버닝된다. OTP 메모리 내의 이 제2 어드레스의 포함은 인터럽트가 서비스된 후 인터럽스 서비스로 하여금 제2 어드레스에 프로그램 카운터를 설정하게 하기에 효과적일 수 있다. 일부 경우들에서, 제2 어드레스는 부트-ROM과 같은 ROM으로부터 실행되는 부트 코드 내에 위치된다. 부트-ROM 내의 어드레스에 프로그램 카운터를 설정함으로써, 부트-ROM의 실행은 프로그램 카운터를 설정한 어드레스로부터 재개될 수 있다.
일부 경우들에서, 제2 어드레스는 인터럽트가 개시되는 어드레스를 바로 뒤따르지 않는다. 이러한 경우들에서, 이는 부트 코드의 특별한 부분 또는 섹션의 실행을 방지하기에 효과적일 수 있다. 현 예를 지속하여, 부트-ROM 내의 에러 후에 위치되는 어드레스가 OTP 메모리의 퓨즈들 내로 버닝된다. 따라서, OTP 메모리의 퓨즈들 내로 버닝되는 어드레스들 사이에 위치된 부트-ROM의 바이너리가 실행되지 않는다.
옵션에 따라 단계(608)에서, OTP 메모리의 추가적인 퓨즈들이 OTP 메모리 내로 이전에 버닝된 데이터를 보안하기 위해 버닝된다. 추가적인 퓨즈들은 OTP 메모리의 사용되지 않은 블록들의 퓨즈들 및 상기 사용되지 않은 블록들과 관련된 에러 정정 코드 비트들의 퓨즈들이다. 이렇게 함으로써, OTP 메모리는 수정될 수 없는 바, 이는 부트 코드 패치들과 같은 OTP 메모리의 컨텐츠를 보안하기에 효과적이다. 대안적으로 또는 추가적으로는, OTP 메모리와 관련된 재고-보관 단위(SKU: stock-keeping unit) 번호가 OTP 메모리 내에 버닝된 부트 코드에 의해 제공되는 기능을 반영하기 위해 갱신 또는 변경될 수 있다. 예를 들어, 부트-ROM 패치를 저장한 OTP 메모리를 포함하는 칩의 SKU 번호는 칩 내에 부트-ROM 패치의 포함을 반영하기 위해 수정(revise)될 수 있다.
시스템-온-칩
도 7은 복수의 메모리들로부터 부트 코드를 로딩하는 다양한 양상들을 구현할 수 있는 시스템-온-칩(SoC)(700)을 도시한다. SoC는 비디오 게임 콘솔, IP-인에이블식 텔레비전, 스마트폰, 랩탑 컴퓨터, 개인용 네비게이션 디바이스, 액세스 포인트, 무선 라우터, 셀룰러 브로드밴드 라우터, 태블릿 컴퓨터, 서버, 네트워크-인에이블식 프린터, 셋-탑 박스, 프린터, 스캐너, 카메라, 픽쳐 프레임, 가전 기기, 온도 조절기(thermostat), 홈 자동화 디바이스 및/또는 어떤 다른 타입의 전자 디바이스와 같은 어떤 적절한 디바이스에 구현될 수 있다.
SoC(700)에는 전자 회로망, 마이크로프로세서, 메모리, 입력-출력(I/O) 로직 제어, 통신 인터페이스들, 상기 나열된 디바이스들 중 어느 것과 같은 디바이스의 기능을 제공하기 위해 필요한 다른 하드웨어, 펌웨어 및/또는 소프트웨어가 통합될 수 있다. SoC(700)는 또한, 컴포넌트들 간의 데이터 통신을 위해 SoC의 다양한 컴포넌트들을 결합하는 통합 데이터 버스(미도시)를 포함할 수 있다. SoC(700)를 포함하는 전자 또는 컴퓨팅 디바이스는 또한, 서로 다른 컴포넌트들의 많은 조합들로 구현될 수 있다. 일부 경우들에서, 이 서로 다른 컴포넌트들은 다양한 내부 또는 외부 데이터 인터페이스들을 통해 본 명세서에서 기술되는 개념들을 구현하도록 구성될 수 있다.
이 예에서, SoC(700)는 (예컨대, 전자 회로망을 포함하기 위해) 입력-출력(I/O) 로직 제어(702) 및 마이크로프로세서(704)와 같은 다양한 컴포넌트들을 포함한다. SoC(700)는 또한, RAM, SRAM, DRAM, 플래시, 낮은 레이턴시의 비휘발성 메모리, ROM 및/또는 다른 적절한 전자 데이터 스토리지의 어떤 타입 및/또는 조합일 수 있는 메모리(706)를 포함한다. 적어도 일부 양상들에서, SoC(700)의 부트 코드는 ROM으로 구현되는 메모리(706)의 일부에 저장된다.
SoC(700)는 또한, 추가적인 또는 대안적인 부트 코드가 저장되는 일회 프로그램가능 메모리(132)(OTP 메모리(132))를 포함한다. 이 대안적인 또는 추가적인 부트 코드는 ROM의 부트 코드를 패치하는 하나 이상의 양상들을 구현하기 위해 본 명세서에 기술된 바와 같이 이용될 수 있다. 예로서 그리고 SoC(700)의 맥락에서, 요구되는 패치 어드레스에 트랩을 놓는(trap on) 능력은 OTP(132)의 일회 프로그램가능 퓨즈들에 근거하여 시스템-온-칩에 의해 구현되는 특징이다. 일단, 다른 부트 코드(예컨대, 패치 코드)가 요구되는 패치 어드레스에 접함에 응답하여 실행되면, ROM으로부터의 부트 코드의 실행은 SoC(700)가 구현되는 컴퓨팅 디바이스를 부팅하는 것을 계속하도록 재개된다.
대안적으로 또는 추가적으로는, SoC(700)는 외부 SRAM, DRAM 또는 플래시 메모리와 같은 추가적인 또는 외부 오프-칩 메모리에 액세스하기 위한 데이터 인터페이스들(미도시)을 포함할 수 있다. 비록 도시되지는 않지만, 외부 메모리(또는 메모리(706))는 도 1을 참조하여 기술되는 바와 같이, 복수의 각각의 부트 로더들 및/또는 부트 코드의 부분들을 저장하는 복수의 비휘발성 메모리 디바이스들을 포함할 수 있다. SoC(700)는 또한, 메모리(706)에 의해 유지되고 마이크로프로세서(704)에 의해 실행되는 컴퓨터 실행가능 명령어들일 수 있는 운영 체제(들)(708)과 같은 다양한 펌웨어 및/또는 소프트웨어를 포함할 수 있다. SoC(700)는 또한, 하드웨어, 펌웨어, 소프트웨어 또는 이들의 어떤 적절한 조합으로 구현되는 다른 다양한 통신 인터페이스들 및 컴포넌트들을 포함할 수 있다.
SoC(700)는 또한, 인터럽트 관리자(134)를 포함하며, 상기 인터럽트 관리자는 이산 또는 결합된 컴포넌트들, 로직, 루틴들 또는 서비스들로서 구현될 수 있다. 이 다양한 컴포넌트들, 기능들 및/또는 엔티티들 및 이들의 대응하는 기능t성의 예들은 도 2 및 5에 의해 예시되는 바와 같이 환경(100) 및 다양한 구성들의 각각의 컴포넌트들을 참조하여 기술된다. 인터럽트 관리자(134)는 독립적으로 또는 다른 엔티티들(예컨대, 인터럽트 서비스 루틴)과 결합하여, 본 명세서에 기술된 다양한 실시예들 및/또는 특징들을 구현하기 위해 메모리(706)에 의해 유지되고 마이크로프로세서(704)에 의해 실행되는 컴퓨터 실행가능 명령어들로 구현될 수 있다. 인터럽트 관리자(134)는 또한, 마이크로프로세서(704)와 관련된 하드웨어 인터럽트 로직 또는 SoC(700) 내의 다른 적절한 소프트웨어, 펌웨어 또는 하드웨어 컴포넌트와 같은 SoC의 다른 엔티티들과 일체로 제공될 수 있다. 대안적으로 또는 추가적으로는, 인터럽트 관리자(134) 및 다른 컴포넌트들은, SoC(700)의 I/O 로직 제어(702) 및/또는 다른 신호 프로세싱 및 제어 회로들과 연계하여 구현되는 하드웨어, 펌웨어, 고정된 로직 회로망 또는 이들의 다른 조합으로서 구현될 수 있다.
비록, 본 발명이 구조적 특징들 및/또는 방법론적 동작들에 특정한 언어로 기술되었지만, 첨부된 특허청구범위에 정의된 본 발명은 상기 기술된 특정 동작들이 수행되는 순서를 포함하여 상기 기술된 특정 특징들 또는 동작들에 반드시 제한되지 않음이 이해되어야 한다.

Claims (20)

  1. 방법으로서,
    판독-전용 메모리(ROM)으로부터, 컴퓨팅 디바이스의 부트 프로세스(boot process)를 시작하기 위해 제1 부트 코드의 실행을 개시하는 단계와;
    상기 컴퓨팅 디바이스의 부트 프로세스 동안, 다른 메모리로부터의 제2 부트 코드의 실행을 인에이블(enable)하기 위해 상기 제1 부트 코드의 실행을 인터럽트(interrupt)하는 단계와; 그리고
    상기 제2 부트 코드가 실행된 후, 상기 컴퓨팅 디바이스의 부트 프로세스를 계속하기 위해 상기 제1 부트 코드의 실행을 재개하는 단계를 포함하는 것을 특징으로 하는 방법.
  2. 제1항에 있어서,
    상기 다른 메모리는 일회 프로그램가능 메모리(one-time-programmable memory)이며, 상기 일회 프로그램가능 메모리에는 상기 제2 부트 코드가 버닝(burn)되는 것을 특징으로 하는 방법.
  3. 제1항에 있어서,
    상기 제1 부트 코드의 실행의 인터럽트에 응답하여, 상기 다른 메모리로부터의 상기 제2 부트 코드를 실행시키는 단계를 더 포함하는 것을 특징으로 하는 방법.
  4. 제1항에 있어서,
    상기 제1 부트 코드의 실행을 인터럽트하는 단계는 상기 제1 부트 코드의 실행 동안 하드웨어 기반의 인터럽트(hardware -based interrupt)가 발행(fire)됨에 응답하여 이루어지는 것을 특징으로 하는 방법.
  5. 제4항에 있어서,
    상기 하드웨어 기반의 인터럽트가 발행됨에 응답하여, 상기 발행된 하드웨어 기반의 인터럽트를 클리어(clear)하는 단계와, 상기 제2 부트 코드의 실행이 이루어지게 하는 단계와, 그리고 상기 제1 부트 코드의 실행을 미리 정의된 포인트에 리턴하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  6. 제5항에 있어서,
    상기 제1 부트 코드의 실행이 리턴될 미리 정의된 포인트는 상기 제1 부트 코드의 실행이 인터럽트되는 포인트와는 다른 것을 특징으로 하는 방법.
  7. 제1항에 있어서,
    상기 제1 부트 코드는 상기 ROM이 구현되는 디바이스 또는 칩의 제조 동안 상기 ROM 내로 기입되는 것을 특징으로 하는 방법.
  8. 방법으로서,
    판독 전용 메모리(ROM)로부터 제1 부트 코드의 실행을 개시하는 단계 - 상기 제1 부트 코드의 실행은 프로그램 카운터를 통해 진전(advance)됨 - 와;
    상기 프로그램 카운터가 상기 제1 부트 코드 내의 미리 결정된 어드레스에 도달함에 응답하여, 상기 제1 부트 코드의 실행을 인터럽트하는 단계와;
    상기 제1 부트 코드의 적어도 일부 대신, OTP 메모리로부터의 제2 부트 코드를 실행시키는 단계와; 그리고
    상기 제2 부트 코드를 실행시키는 것을 완료함에 응답하여, 상기 ROM으로부터 상기 제1 부트 코드의 실행을 재개하기에 효력있는 상기 제1 부트 코드 내의 어드레스에 상기 프로그램 카운터를 리턴하는 단계를 포함하는 것을 특징으로 하는 방법.
  9. 제8항에 있어서,
    상기 제1 부트 코드의 실행이 인터럽트되는 상기 미리 결정된 어드레스 또는 상기 프로그램 카운터가 리턴되는 어드레스는 상기 OTP 메모리에 저장되는 것을 특징으로 하는 방법.
  10. 제8항에 있어서,
    상기 제1 부트 코드 및 제2 부트 코드의 실행은 부트 로더를 로딩하기에 효과적이며, 상기 방법은 상기 부트 로더에 제어를 전달하기 전에, 상기 부트 로더의 인증(authenticity)을 보장하기 위해 상기 부트 로더의 암호 서명 또는 암호 해시를 검증하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  11. 제8항에 있어서,
    상기 제1 부트 코드의 실행을 인터럽트하는 단계는 인터럽트를 발행하는 것을 포함하고, 상기 방법은 상기 제2 부트 코드를 실행시키기 전에, 상기 발행된 인터럽트를 클리어하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  12. 제8항에 있어서,
    상기 제1 부트 코드의 적어도 일부는 코딩 에러를 포함하고, 상기 프로그램 카운터가 리턴되는 어드레스는 상기 코딩 에러가 실행되지 않도록 상기 제1 부트 코드에서 상기 코딩 에러에 후속하여 위치되는 것을 특징으로 하는 방법.
  13. 제8항에 있어서,
    상기 제1 부트 코드 및 제2 부트 코드의 실행이 신뢰되는 부트 프로세스(trusted boot process)의 적어도 일부를 구현하도록 상기 제1 부트 코드는 상기 ROM 내로 버닝되고, 상기 제2 부트 코드는 상기 OTP 메모리 내로 버닝되는 것을 특징으로 하는 방법.
  14. 시스템-온-칩(SoC)으로서,
    상기 SoC가 구현되어 있는 디바이스를 부트시키기 위해 코드를 프로그램 카운터를 통해 실행시키도록 구성된 프로세서와;
    상기 디바이스에 대한 제1 부트 코드를 저장한 판독 전용 메모리(ROM)와;
    제2 부트 코드를 저장한 일회 프로그램가능(OTP) 메모리와; 그리고
    인터럽트 관리자를 포함하며, 상기 인터럽트 관리자는:
    상기 프로그램 카운터가 상기 제1 부트 코드 내의 미리 결정된 어드레스에 접함(encounter)에 응답하여 상기 ROM으로부터의 상기 제1 부트 코드의 실행을 인터럽트하고,
    상기 프로세서로 하여금 상기 OTP 메모리로부터의 상기 제2 부트 코드를 실행하도록 하며, 그리고
    상기 제2 부트 코드가 실행된 후, 상기 ROM으로부터의 상기 제1 부트 코드의 실행을 재개하기에 효력있는 상기 제1 부트 코드 내의 어드레스에 상기 프로그램 카운터를 리턴하도록 구성된 것을 특징으로 하는 시스템-온-칩.
  15. 제14항에 있어서,
    상기 OTP 메모리는 데이터를 저장하기 위해 퓨즈들의 하나 이상의 블록들을 포함하고, 상기 제2 부트 코드는 상기 퓨즈들의 하나 이상의 블록들 내로 버닝되는 것을 특징으로 하는 시스템-온-칩.
  16. 제15항에 있어서,
    상기 퓨즈들의 사용되지 않은 블록들 및 상기 퓨즈들의 사용되지 않은 블록들과 관련된 에러 정정 코드 비트들은 상기 OTP 메모리의 컨텐츠가 수정될 수 없도록 버닝되는 것을 특징으로 하는 시스템-온-칩.
  17. 제14항에 있어서,
    상기 시스템-온-칩은, 상기 제2 부트 코드가 실행된 후 상기 프로그램 카운터가 리턴되는 어드레스를 저장하도록 구성된 어드레스 링크 레지스터를 포함하는 것을 특징으로 하는 시스템-온-칩.
  18. 제17항에 있어서,
    상기 인터럽트 관리자는 상기 제1 부트 코드의 실행이 인터럽트되는 상기 미리 결정된 어드레스 직후에 있는 어드레스에 상기 어드레스 링크 레지스터를 설정하도록 더 구성된 것을 특징으로 하는 시스템-온-칩.
  19. 제17항에 있어서,
    상기 인터럽트 관리자는, 상기 프로세서로 하여금 상기 ROM에 저장된 상기 제1 부트 코드의 부분을 실행하지 않도록 하기에 효력있는 상기 미리 결정된 어드레스 직후에 있지 않은 어드레스에 상기 어드레스 링크 레지스터를 설정하도록 더 구성된 것을 특징으로 하는 시스템-온-칩.
  20. 제14항에 있어서,
    상기 시스템-온-칩이 구현되어 있는 디바이스는 컴퓨팅 디바이스, 전자 디바이스 또는 통신 디바이스 중 하나를 포함하는 것을 특징으로 하는 시스템-온-칩.
KR1020157025232A 2013-02-22 2014-02-13 판독 전용 메모리의 부트 코드 패칭 KR102026393B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201361768097P 2013-02-22 2013-02-22
US61/768,097 2013-02-22
PCT/US2014/016259 WO2014130338A1 (en) 2013-02-22 2014-02-13 Patching boot code of read-only memory

Publications (2)

Publication Number Publication Date
KR20150120429A true KR20150120429A (ko) 2015-10-27
KR102026393B1 KR102026393B1 (ko) 2019-11-04

Family

ID=50236280

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157025232A KR102026393B1 (ko) 2013-02-22 2014-02-13 판독 전용 메모리의 부트 코드 패칭

Country Status (7)

Country Link
US (1) US9880856B2 (ko)
EP (1) EP2959378A1 (ko)
JP (1) JP6318425B2 (ko)
KR (1) KR102026393B1 (ko)
CN (1) CN104981778A (ko)
TW (1) TWI664574B (ko)
WO (1) WO2014130338A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180089631A (ko) * 2017-02-01 2018-08-09 삼성전자주식회사 반도체 시스템 및 반도체 장치의 동작 방법

Families Citing this family (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013142948A1 (en) * 2012-03-30 2013-10-03 Irdeto Canada Corporation Method and system for preventing and detecting security threats
EP2778910B1 (en) * 2013-03-15 2021-02-24 Maxim Integrated Products, Inc. Systems and methods to extend rom functionality
US20150286823A1 (en) * 2014-04-07 2015-10-08 Qualcomm Incorporated System and method for boot sequence modification using chip-restricted instructions residing on an external memory device
US9753874B2 (en) * 2015-02-20 2017-09-05 Qualcomm Incorporated Multi-step programming of heat-sensitive non-volatile memory (NVM) in processor-based systems
CN105335200B (zh) * 2015-11-24 2019-05-07 小米科技有限责任公司 系统升级方法及装置
CN105468410B (zh) * 2015-11-24 2019-02-12 小米科技有限责任公司 系统升级方法及装置
US11354117B2 (en) 2016-07-13 2022-06-07 Oracle International Corporation Adaptable patching mechanism for mixed memory systems
CN106445662B (zh) * 2016-09-13 2019-09-10 广东欧珀移动通信有限公司 一种移植应用程序的方法及终端设备
US10382436B2 (en) * 2016-11-22 2019-08-13 Daniel Chien Network security based on device identifiers and network addresses
US10447512B2 (en) 2017-08-07 2019-10-15 Micron Technology, Inc. Channel equalization for multi-level signaling
US10277435B2 (en) 2017-08-07 2019-04-30 Micron Technology, Inc. Method to vertically align multi-level cells
US10530617B2 (en) 2017-08-07 2020-01-07 Micron Technology, Inc. Programmable channel equalization for multi-level signaling
US10853309B2 (en) 2018-08-13 2020-12-01 Micron Technology, Inc. Fuseload architecture for system-on-chip reconfiguration and repurposing
US10990384B2 (en) * 2018-09-27 2021-04-27 Intel Corporation System, apparatus and method for dynamic update to code stored in a read-only memory (ROM)
US11188622B2 (en) 2018-09-28 2021-11-30 Daniel Chien Systems and methods for computer security
KR102567097B1 (ko) 2018-12-05 2023-08-14 삼성전자주식회사 임베디드 시스템의 부트 롬 업데이트 방법 및 부팅 방법
US10826912B2 (en) 2018-12-14 2020-11-03 Daniel Chien Timestamp-based authentication
US10848489B2 (en) 2018-12-14 2020-11-24 Daniel Chien Timestamp-based authentication with redirection
CN109739565B (zh) * 2019-01-07 2022-03-29 深圳忆联信息系统有限公司 一种保证Bootrom正常运行的方法、装置、计算机设备及存储介质
TWI756156B (zh) * 2019-04-07 2022-02-21 新唐科技股份有限公司 監控系統開機之安全裝置及其方法
WO2020223950A1 (zh) * 2019-05-09 2020-11-12 深圳市德明利技术股份有限公司 一种防止 u 盘数据丢失和系统损坏的方法和装置以及设备
KR20210046418A (ko) 2019-10-18 2021-04-28 삼성전자주식회사 보안 패치가 가능한 롬을 갖는 반도체 장치 및 그것의 패치 방법
US11677754B2 (en) 2019-12-09 2023-06-13 Daniel Chien Access control systems and methods
TWI707350B (zh) * 2020-02-13 2020-10-11 大陸商北京集創北方科技股份有限公司 一次性編程唯讀記憶體之操作方法、處理器晶片及資訊處理裝置
US11037647B1 (en) * 2020-02-19 2021-06-15 Semiconductor Components Industries, Llc Systems and methods for updating memory circuitry
CN111694594B (zh) * 2020-05-18 2023-03-03 成都盛芯微科技有限公司 补丁程序的控制方法和系统
US11509463B2 (en) 2020-05-31 2022-11-22 Daniel Chien Timestamp-based shared key generation
US11438145B2 (en) 2020-05-31 2022-09-06 Daniel Chien Shared key generation based on dual clocks
CN111752588A (zh) * 2020-06-02 2020-10-09 深圳麦格米特电气股份有限公司 一种应用程序的更新方法和电子设备
CN112083961B (zh) * 2020-08-05 2022-01-14 北京智芯微电子科技有限公司 嵌入式芯片的引导加载方法
EP3989478B1 (en) * 2020-10-22 2023-10-18 Moxa Inc. Computing system and device for handling a chain of trust
US11604655B2 (en) * 2020-11-12 2023-03-14 Ati Technologies Ulc Sync point mechanism between master and slave nodes
US11392450B1 (en) * 2020-12-07 2022-07-19 Amazon Technologies, Inc. Data integrity check for one-time programmable memory
CN117321566A (zh) * 2021-05-24 2023-12-29 谷歌有限责任公司 具有关联和直接映射的补丁数据的存储器打补丁
CN113377565B (zh) * 2021-06-10 2024-05-28 博流智能科技(南京)有限公司 Bootrom修正系统及方法以及芯片
US20230205886A1 (en) * 2021-12-29 2023-06-29 Ati Technologies Ulc Iterative boot queue
US11775284B2 (en) * 2022-01-27 2023-10-03 Realtek Singapore Private Limited Electronic device and code patching method

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010006947A (ko) * 1999-04-02 2001-01-26 마찌다 가쯔히꼬 비휘발성 메모리가 내장된 마이크로컴퓨터
JP2007102791A (ja) * 2005-09-30 2007-04-19 Fiinikkusu Technologies Ltd 無許可のブートローダの実行を防止することによって安全性を高めた実行環境
US20100106953A1 (en) * 2008-10-23 2010-04-29 Horizon Semiconductors Ltd. Method for patching rom boot code
US20110252413A1 (en) * 2008-12-24 2011-10-13 Panasonic Corporation Bus controller and method for patching initial boot program

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4831517A (en) * 1986-10-10 1989-05-16 International Business Machines Corporation Branch and return on address instruction and methods and apparatus for implementing same in a digital data processing system
JPH04346127A (ja) * 1991-05-23 1992-12-02 Sony Corp 電子装置
US5901225A (en) * 1996-12-05 1999-05-04 Advanced Micro Devices, Inc. System and method for performing software patches in embedded systems
JPH10232772A (ja) 1997-02-20 1998-09-02 Nec Corp プログラム変更装置
JP2001256044A (ja) 2000-03-14 2001-09-21 Sony Corp データ処理装置
JP3795744B2 (ja) * 2000-11-21 2006-07-12 沖電気工業株式会社 マイクロコントローラ
US7310800B2 (en) * 2001-02-28 2007-12-18 Safenet, Inc. Method and system for patching ROM code
US6925521B2 (en) * 2001-09-10 2005-08-02 Texas Instruments Incorporated Scheme for implementing breakpoints for on-chip ROM code patching
JP2003196117A (ja) * 2001-12-26 2003-07-11 Toshiba Corp マイクロプロセッサ
US7039776B2 (en) * 2003-04-17 2006-05-02 Broadcom Corporation Patch memory system for a ROM-based processor
GB0424424D0 (en) * 2004-11-04 2004-12-08 St Microelectronics Belgium Nv A code patching device
US20060265692A1 (en) * 2005-05-20 2006-11-23 Mengjin Su Method, apparatus, and computer program product for code patching
US7523299B2 (en) * 2005-07-29 2009-04-21 Broadcom Corporation Method and system for modifying operation of ROM based boot code of a network adapter chip
US7739469B2 (en) * 2005-11-08 2010-06-15 Freescale Semiconductor, Inc. Patching ROM code
US7486534B2 (en) * 2005-12-08 2009-02-03 Macronix International Co., Ltd. Diode-less array for one-time programmable memory
US7644223B2 (en) * 2006-10-30 2010-01-05 Via Telecom Co., Ltd. Circuit and method for patching for program ROM
US20080263533A1 (en) * 2007-04-19 2008-10-23 Proton World International N.V. Implementation of patches by a processing unit
US9348597B2 (en) * 2008-06-30 2016-05-24 Infineon Technologies Ag Device and method for bypassing a first program code portion with a replacement program code portion
US20100180104A1 (en) * 2009-01-15 2010-07-15 Via Technologies, Inc. Apparatus and method for patching microcode in a microprocessor using private ram of the microprocessor
CN102243587B (zh) * 2010-05-14 2015-09-23 康佳集团股份有限公司 嵌入式系统中对rom程序的升级方法
CN101916348A (zh) * 2010-08-16 2010-12-15 武汉天喻信息产业股份有限公司 一种用户操作系统的安全引导方法及引导系统
US8812832B2 (en) * 2011-02-18 2014-08-19 Avast Software A.S. Method and system of using a non-native operating system for scanning and modifying system configuration data of a native operating system
CN102163143B (zh) * 2011-04-28 2013-05-01 北京北大众志微系统科技有限责任公司 一种实现值关联间接跳转预测的方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010006947A (ko) * 1999-04-02 2001-01-26 마찌다 가쯔히꼬 비휘발성 메모리가 내장된 마이크로컴퓨터
JP2007102791A (ja) * 2005-09-30 2007-04-19 Fiinikkusu Technologies Ltd 無許可のブートローダの実行を防止することによって安全性を高めた実行環境
US20100106953A1 (en) * 2008-10-23 2010-04-29 Horizon Semiconductors Ltd. Method for patching rom boot code
US20110252413A1 (en) * 2008-12-24 2011-10-13 Panasonic Corporation Bus controller and method for patching initial boot program

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180089631A (ko) * 2017-02-01 2018-08-09 삼성전자주식회사 반도체 시스템 및 반도체 장치의 동작 방법

Also Published As

Publication number Publication date
CN104981778A (zh) 2015-10-14
KR102026393B1 (ko) 2019-11-04
JP6318425B2 (ja) 2018-05-09
US20140244991A1 (en) 2014-08-28
EP2959378A1 (en) 2015-12-30
TWI664574B (zh) 2019-07-01
TW201502990A (zh) 2015-01-16
WO2014130338A1 (en) 2014-08-28
US9880856B2 (en) 2018-01-30
JP2016507848A (ja) 2016-03-10

Similar Documents

Publication Publication Date Title
KR102026393B1 (ko) 판독 전용 메모리의 부트 코드 패칭
US10025600B2 (en) NAND-based verified boot
US9880908B2 (en) Recovering from compromised system boot code
US11809544B2 (en) Remote attestation for multi-core processor
US9785596B2 (en) Redundant system boot code in a secondary non-volatile memory
JP5889933B2 (ja) コンピュータの動作不良を防止する方法、コンピュータ・プログラムおよびコンピュータ
US9990255B2 (en) Repairing compromised system data in a non-volatile memory
CN107567629B (zh) 在可信执行环境容器中的动态固件模块加载器
KR102227263B1 (ko) 보안 부트 변경 변경시스템, 방법 및 이 변경시스템을 구비한 전자장치
US10235183B2 (en) Booting a system-on-a-chip device
US10885196B2 (en) Executing protected code
CN112789574A (zh) 经由系统及电源管理微型控制器的安全启动
TWI743480B (zh) 電腦系統與其開機方法
US11068276B2 (en) Controlled customization of silicon initialization

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant