안드로이드 임베디드 프로그래밍 깊게 들어가기
Regular price
$39.33
Sale price
Regular price
✈️
Estimated delivery date 예상 배송일
Standard Shipping
불러오는 중...
주문일로부터 8-12 영업일
Express Shipping
불러오는 중...
주문일로부터 6-8 영업일
자바 밑에 리눅스를 실행시키는 실체는 무엇일까? 하드웨어 자체를 제어한다는 것은 어떤 의미인가? 이 호기심에 명쾌한 답을 주는 임베디드 전문 개발자 가이드 『안드로이드 임베디드 프로그래밍 깊게 들어가기』.
임베디드 컴퓨팅은 기존의 메인프레임과 데스크톱 기반의 컴퓨팅보다 더욱 중요한 역할을 하고 있다. 매우 다양한 환경에서 구현되며, OS가 탑재되지 않은 상태에서 C와 어셈블리어를 사용하여 응용 프로그래밍을 하는 환경뿐만 아니라, RTOS(real-time operating system)가 탑재된 경우도 빈번하다. 목적은 물론이고 하드웨어 아키텍처 환경도 다르다 보니, 표준화된 방법으로 임베디드 프로그래밍을 배우는 것은 매우 어려운 실정이다. 이 책은 모든 프로그래머가 손쉽게 인터넷상에서 얻을 수 있는 개발 환경을 제공하기 위해, 가상화 기술과 오픈소스 도구를 사용한다.
저수준 프로그래밍의 기반을 포함한 베어 메탈 프로그래밍과 안드로이드 시스템 프로그래밍으로 시작하는 이 책은 안드로이드 SDK 파일 시스템의 커스터마이즈로 나아간다. 또한 부트로더로부터 커널의 파일 시스템으로 초점을 이동하여 사용자 정의된 ROM과 안드로이드 디바이스를 구동하기 위해 가상 디바이스를 사용한다. 부트로더 통합과 리눅스 커널을 지원하는 방법을 다루는 부분은 책의 백미이다. 독자들은 모바일 디바이스 제조 레벨의 안드로이드 시스템 개발자들과 같은 완성된 그림을 갖게 될 것이다.
임베디드 컴퓨팅은 기존의 메인프레임과 데스크톱 기반의 컴퓨팅보다 더욱 중요한 역할을 하고 있다. 매우 다양한 환경에서 구현되며, OS가 탑재되지 않은 상태에서 C와 어셈블리어를 사용하여 응용 프로그래밍을 하는 환경뿐만 아니라, RTOS(real-time operating system)가 탑재된 경우도 빈번하다. 목적은 물론이고 하드웨어 아키텍처 환경도 다르다 보니, 표준화된 방법으로 임베디드 프로그래밍을 배우는 것은 매우 어려운 실정이다. 이 책은 모든 프로그래머가 손쉽게 인터넷상에서 얻을 수 있는 개발 환경을 제공하기 위해, 가상화 기술과 오픈소스 도구를 사용한다.
저수준 프로그래밍의 기반을 포함한 베어 메탈 프로그래밍과 안드로이드 시스템 프로그래밍으로 시작하는 이 책은 안드로이드 SDK 파일 시스템의 커스터마이즈로 나아간다. 또한 부트로더로부터 커널의 파일 시스템으로 초점을 이동하여 사용자 정의된 ROM과 안드로이드 디바이스를 구동하기 위해 가상 디바이스를 사용한다. 부트로더 통합과 리눅스 커널을 지원하는 방법을 다루는 부분은 책의 백미이다. 독자들은 모바일 디바이스 제조 레벨의 안드로이드 시스템 개발자들과 같은 완성된 그림을 갖게 될 것이다.
Couldn't load pickup availability
출판사 리뷰
출판사 리뷰
이제 시스템 환경에 구애받지 말고 임베디드 프로그래밍으로 깊게 들어가자
이 책은 임베디드 시스템 프로그래밍의 전반적인 분야를 논의한다. 기본적인 베어 메탈 프로그래밍부터 부트로더에서 안드로이드 시스템 부팅까지 일반적인 프로그래밍 지식의 제공뿐 아니라 컴파일러를 개발하고 디버깅 기술에도 초점을 맞추고 있다. 목표는 탄탄한 기초를 다질 수 있게 임베디드 시스템 프로그래밍의 기본적인 지식을 전하여, 좀 더 전문적인 영역으로 나아갈 수 있는 통로를 제공하는 것이다. 이 책은 수준에 따라 원하는 장을 읽고 하위 주제를 탐구하는 방식으로 선택하여 읽기를 권한다. 책은 3부로 이루어져 있다.
제1부는 저수준 프로그래밍의 기반을 포함한 소위 베어 메탈이라고 하는 프로그래밍과 안드로이드 시스템 프로그래밍에 초첨을 맞춘다. 1장~4장에서는 어셈블리 코드를 직접 사용하여 하드웨어에서 프로그램을 실행하는 방법을 포함한 베어 메탈 프로그래밍과 관련된 핵심 지식을 제공한다. 5장에서는 C 언어 프로그래밍으로 관심이 이동한다. 다음으로 U-Boot를 사용하여 리눅스 커널을 부팅하는 데 필요한 하드웨어 인터페이스의 최소 요소들을 설명한다. 5장~8장에서는 베어 메탈 환경에서 하드웨어 인터페이스 프로그래밍의 시리얼 포트, 인터럽트 컨트롤러, 리얼타임 클록과 NAND 플래시 컨트롤러에 초점을 맞춘다.
제2부는 U-Boot를 골드피시 플랫폼으로 포팅하는 방법이 기술되어 있다. 10장에서는 U-Boot를 사용하여 리눅스 커널과 안드로이드 시스템을 부팅한다. 이 책에 소개된 작업을 완료하면, U-Boot에 드라이버 프레임워크에서 하드웨어 복잡성을 분리하여 U-Boot 포팅을 처리할 수 있게 된다. 같은 기술을 리눅스 드라이버에 구현할 때 마찬가지로 사용할 수 있다. 또한 안드로이드 시스템을 부팅하기 위해 안드로이드 SDK 파일 이미지를 사용한다.
제3부에서는 부트로더로부터 커널의 파일 시스템으로 초점을 이동한다. 사용자 정의된 ROM과 안드로이드 디바이스를 구동하기 위해 가상 디바이스를 사용한다. 안드로이드 디바이스의 사용자 정의된 ROM을 최초로 빌드하는 과정을 설명하고 지원한다. 최신 디바이스와 부트로더 통합과 안드로이드 소스 트리에 있는 리눅스 커널을 지원하는 방법을 설명한다. 11장에서는 환경 설정 방법과 안드로이드 에뮬레이터 표준 빌드 절차를 상세하게 알아본다. 12장에서는 U-Boot와 리눅스 커널의 결합을 포함한 가상 드라이버를 위해 사용자 정의된 롬을 만들게 된다.
이 책은 임베디드 시스템 프로그래밍의 전반적인 분야를 논의한다. 기본적인 베어 메탈 프로그래밍부터 부트로더에서 안드로이드 시스템 부팅까지 일반적인 프로그래밍 지식의 제공뿐 아니라 컴파일러를 개발하고 디버깅 기술에도 초점을 맞추고 있다. 목표는 탄탄한 기초를 다질 수 있게 임베디드 시스템 프로그래밍의 기본적인 지식을 전하여, 좀 더 전문적인 영역으로 나아갈 수 있는 통로를 제공하는 것이다. 이 책은 수준에 따라 원하는 장을 읽고 하위 주제를 탐구하는 방식으로 선택하여 읽기를 권한다. 책은 3부로 이루어져 있다.
제1부는 저수준 프로그래밍의 기반을 포함한 소위 베어 메탈이라고 하는 프로그래밍과 안드로이드 시스템 프로그래밍에 초첨을 맞춘다. 1장~4장에서는 어셈블리 코드를 직접 사용하여 하드웨어에서 프로그램을 실행하는 방법을 포함한 베어 메탈 프로그래밍과 관련된 핵심 지식을 제공한다. 5장에서는 C 언어 프로그래밍으로 관심이 이동한다. 다음으로 U-Boot를 사용하여 리눅스 커널을 부팅하는 데 필요한 하드웨어 인터페이스의 최소 요소들을 설명한다. 5장~8장에서는 베어 메탈 환경에서 하드웨어 인터페이스 프로그래밍의 시리얼 포트, 인터럽트 컨트롤러, 리얼타임 클록과 NAND 플래시 컨트롤러에 초점을 맞춘다.
제2부는 U-Boot를 골드피시 플랫폼으로 포팅하는 방법이 기술되어 있다. 10장에서는 U-Boot를 사용하여 리눅스 커널과 안드로이드 시스템을 부팅한다. 이 책에 소개된 작업을 완료하면, U-Boot에 드라이버 프레임워크에서 하드웨어 복잡성을 분리하여 U-Boot 포팅을 처리할 수 있게 된다. 같은 기술을 리눅스 드라이버에 구현할 때 마찬가지로 사용할 수 있다. 또한 안드로이드 시스템을 부팅하기 위해 안드로이드 SDK 파일 이미지를 사용한다.
제3부에서는 부트로더로부터 커널의 파일 시스템으로 초점을 이동한다. 사용자 정의된 ROM과 안드로이드 디바이스를 구동하기 위해 가상 디바이스를 사용한다. 안드로이드 디바이스의 사용자 정의된 ROM을 최초로 빌드하는 과정을 설명하고 지원한다. 최신 디바이스와 부트로더 통합과 안드로이드 소스 트리에 있는 리눅스 커널을 지원하는 방법을 설명한다. 11장에서는 환경 설정 방법과 안드로이드 에뮬레이터 표준 빌드 절차를 상세하게 알아본다. 12장에서는 U-Boot와 리눅스 커널의 결합을 포함한 가상 드라이버를 위해 사용자 정의된 롬을 만들게 된다.
목차
목차
누가 이 책을 읽어야 하나? | 이 책은 어떻게 구성되어 있는가?
제1부. 베어 메탈 프로그래밍
1장. 임베디드 시스템 프로그래밍 소개
_임베디드 시스템 개요
_베어 메탈 프로그래밍
_임베디드 시스템 배우기
_임베디드 시스템의 소프트웨어 계층
_도구 및 하드웨어 플랫폼
_가상 하드웨어와 실제 하드웨어의 차이점
2장. 내부 안드로이드 에뮬레이터
_가상 하드웨어 개요
_안드로이드 가상 장치 설정
_하드웨어 인터페이스
_시리얼
_타이머
3장. 개발 환경 설정
_호스트와 클라이언트 환경
_개발 환경 설정
_안드로이드 SDK 다운로드 및 설치하기
_ARM을 위한 GNU 툴체인 다운로드 및 설치하기
_통합 개발 환경
_당신의 첫 번째 ARM 프로그램
_바이너리로 빌드하기
_안드로이드 에뮬레이터에서 실행하기
_예제 프로젝트를 위한 Makefile
4장. 링커 스크립트 및 메모리 맵
_메모리 맵
_링커
__심볼 처리
__예 c04e1의 메인 프로그램
__.byte 지시어
__.align 지시어
__c04e1예제의 서브루틴
__재배치
__섹션 병합
__섹션 배치
_링커 스크립트
__링커 스크립트 예제
_RAM에서 데이터 초기화하기
__로드 주소 지정하기
__데이터를 램으로 복사하기
5장. C 언어 사용하기
_베어 메탈 환경에서 C 시작하기
__스택
__전역 변수
__읽기 전용 데이터
__시작 코드
_호출 규칙
__어셈블리어 코드에서 C 함수 호출하기
__C 코드에서 어셈블리 언어 함수 호출하기
_골드피시 시리얼 포트 지원
__데이터 버퍼 검사
__데이터 인풋과 아웃풋
__시리얼 함수들의 단위 테스트
6장. C 라이브러리 사용하기
_C 라이브러리 변형
__운영체제가 존재할 때 C 라이브러리 변형
__베어 메탈 시스템에서 C 라이브러리 변형
_Newlib C 라이브러리
_일반적인 스타트업 코드 순서
__CS3 링커 스크립트
_골드피시 플랫폼을 위한 사용자 정의 CS3 시작 코드
_시스템 호출 구현
_라이브러리 실행과 디버깅
_QEMU ARM Semihosting과 함께 Newlib 사용
__Newlib C에서 Semihosting 지원
__Semihosting 예제코드
7장. 예외 처리 및 타이머
_골드피시 인터럽트 컨트롤러
_가장 단순한 인터럽트 핸들러
__인터럽트 지원 함수
__가장 단순한 인터럽트 핸들러 구현
_중첩된 인터럽트 핸들러
__중첩된 인터럽트 핸들러 구현
__중첩 인터럽트 테스트와 프로세서 모드 스위치 발견하기
_시스템 호출/소프트웨어 인터럽트 테스트하기
_타이머
__골드피시 전용 타이머 함수들
__U-Boot API
_실시간 클록
__타이머와 RTC의 단위 테스트
8장. 골드피시에서 NAND 플래시 지원
_안드로이드 파일 시스템
_NAND 플래시 속성
_골드피시 플랫폼의 NAND 플래시 프로그래밍 인터페이스
_메모리 기술 장치 지원
_MTD API
__NAND 플래시를 지원하는 U-Boot API
__골드피시 NAND 플래시 드라이버 함수들
_NAND 플래시 프로그래밍 인터페이스 테스트 프로그램
__리눅스 커널의 NAND 플래시 정보
__NAND 플래시 테스트 프로그램
제2부. U-Boot
9장. U-Boot 포팅하기
_U-Boot 소개
_U-Boot 다운로드와 컴파일
_GDB로 U-Boot 디버깅하기
_골드피시 플랫폼에 U-Boot 포팅하기
__새로운 보드 생성
__프로세서 세부사항 수정
__보드 세부사항 수정
__디바이스 드라이버 수정
__시리얼 드라이버
__NAND 플래시 드라이버
__RTC 드라이버
__이더넷 드라이버
10장. 골드피시 커널을 부팅하기 위해 U-Boot 사용하기
_골드피시 커널 구축하기
_Prebuilt 툴체인과 커널 소스코드
_에뮬레이터에서 커널 실행과 디버깅
_NOR 플래시부터 안드로이드 부팅
__램디스크 이미지 생성하기
__플래시 이미지 생성하기
__플래시 이미지 부팅하기
__플래시 이미지의 소스-레벨 디버깅
_NAND 플래시로부터 안드로이드 부팅
__system.img 준비하기
__NAND 플래시로부터 부팅하기
제3부. 안드로이드 시스템 통합
11장. AOSP와 CyanogenMod 구축하기
_AOSP와 CyanogenMod 소개
_안드로이드 가상 디바이스 설정하기
_AOSP 안드로이드 에뮬레이터 빌드
__AOSP 빌드 환경
__AOSP 소스 다운로드하기
__AOSP 안드로이드 에뮬레이터 이미지 빌드하기
__AOSP 이미지 테스트하기
_CyanogenMod 안드로이드 에뮬레이터 빌드
__CyanogenMod 소스 다운로드하기
__CyanogenMod 안드로이드 에뮬레이터 빌드하기
__CyanogenMod 이미지 테스트하기
12장. 사용자 정의 안드로이드와 나만의 안드로이드 롬 만들기
_AOSP에서 새로운 하드웨어 지원하기
__AOSP 와 함께 커널 빌드하기
__AOSP와 함께 U-Boot 빌드하기
__NAND 플래시로부터 U-Boot과 함께 안드로이드 부팅하기
_CyanogenMod에서 새로운 하드웨어 지원하기
__CyanogenMod와 함께 커널 빌드하기
__U-Boot 빌드하고 CyanogenMod 부팅하기
부록
A. 이 책의 소스코드 빌드하기
_빌드 환경 설정하기
_가상 머신 설정하기
_소스코드 체계
_1부를 위한 소스코드
__커맨드 라인에서 빌드하고 테스트하기
__이클립스에서 빌드하고 테스트하기
_2부의 소스코드
_3부의 소스코드
__AOSP 빌드하기
__CyanogenMod 빌드하기
B. 이 책과 관련된 저장소 사용하기
_저장소(Repo)에 있는 자원들
__즉시 새 소스트리 동기화하기
_지역 매니페스트를 사용하여 Git Repositories 다운로드하기
제1부. 베어 메탈 프로그래밍
1장. 임베디드 시스템 프로그래밍 소개
_임베디드 시스템 개요
_베어 메탈 프로그래밍
_임베디드 시스템 배우기
_임베디드 시스템의 소프트웨어 계층
_도구 및 하드웨어 플랫폼
_가상 하드웨어와 실제 하드웨어의 차이점
2장. 내부 안드로이드 에뮬레이터
_가상 하드웨어 개요
_안드로이드 가상 장치 설정
_하드웨어 인터페이스
_시리얼
_타이머
3장. 개발 환경 설정
_호스트와 클라이언트 환경
_개발 환경 설정
_안드로이드 SDK 다운로드 및 설치하기
_ARM을 위한 GNU 툴체인 다운로드 및 설치하기
_통합 개발 환경
_당신의 첫 번째 ARM 프로그램
_바이너리로 빌드하기
_안드로이드 에뮬레이터에서 실행하기
_예제 프로젝트를 위한 Makefile
4장. 링커 스크립트 및 메모리 맵
_메모리 맵
_링커
__심볼 처리
__예 c04e1의 메인 프로그램
__.byte 지시어
__.align 지시어
__c04e1예제의 서브루틴
__재배치
__섹션 병합
__섹션 배치
_링커 스크립트
__링커 스크립트 예제
_RAM에서 데이터 초기화하기
__로드 주소 지정하기
__데이터를 램으로 복사하기
5장. C 언어 사용하기
_베어 메탈 환경에서 C 시작하기
__스택
__전역 변수
__읽기 전용 데이터
__시작 코드
_호출 규칙
__어셈블리어 코드에서 C 함수 호출하기
__C 코드에서 어셈블리 언어 함수 호출하기
_골드피시 시리얼 포트 지원
__데이터 버퍼 검사
__데이터 인풋과 아웃풋
__시리얼 함수들의 단위 테스트
6장. C 라이브러리 사용하기
_C 라이브러리 변형
__운영체제가 존재할 때 C 라이브러리 변형
__베어 메탈 시스템에서 C 라이브러리 변형
_Newlib C 라이브러리
_일반적인 스타트업 코드 순서
__CS3 링커 스크립트
_골드피시 플랫폼을 위한 사용자 정의 CS3 시작 코드
_시스템 호출 구현
_라이브러리 실행과 디버깅
_QEMU ARM Semihosting과 함께 Newlib 사용
__Newlib C에서 Semihosting 지원
__Semihosting 예제코드
7장. 예외 처리 및 타이머
_골드피시 인터럽트 컨트롤러
_가장 단순한 인터럽트 핸들러
__인터럽트 지원 함수
__가장 단순한 인터럽트 핸들러 구현
_중첩된 인터럽트 핸들러
__중첩된 인터럽트 핸들러 구현
__중첩 인터럽트 테스트와 프로세서 모드 스위치 발견하기
_시스템 호출/소프트웨어 인터럽트 테스트하기
_타이머
__골드피시 전용 타이머 함수들
__U-Boot API
_실시간 클록
__타이머와 RTC의 단위 테스트
8장. 골드피시에서 NAND 플래시 지원
_안드로이드 파일 시스템
_NAND 플래시 속성
_골드피시 플랫폼의 NAND 플래시 프로그래밍 인터페이스
_메모리 기술 장치 지원
_MTD API
__NAND 플래시를 지원하는 U-Boot API
__골드피시 NAND 플래시 드라이버 함수들
_NAND 플래시 프로그래밍 인터페이스 테스트 프로그램
__리눅스 커널의 NAND 플래시 정보
__NAND 플래시 테스트 프로그램
제2부. U-Boot
9장. U-Boot 포팅하기
_U-Boot 소개
_U-Boot 다운로드와 컴파일
_GDB로 U-Boot 디버깅하기
_골드피시 플랫폼에 U-Boot 포팅하기
__새로운 보드 생성
__프로세서 세부사항 수정
__보드 세부사항 수정
__디바이스 드라이버 수정
__시리얼 드라이버
__NAND 플래시 드라이버
__RTC 드라이버
__이더넷 드라이버
10장. 골드피시 커널을 부팅하기 위해 U-Boot 사용하기
_골드피시 커널 구축하기
_Prebuilt 툴체인과 커널 소스코드
_에뮬레이터에서 커널 실행과 디버깅
_NOR 플래시부터 안드로이드 부팅
__램디스크 이미지 생성하기
__플래시 이미지 생성하기
__플래시 이미지 부팅하기
__플래시 이미지의 소스-레벨 디버깅
_NAND 플래시로부터 안드로이드 부팅
__system.img 준비하기
__NAND 플래시로부터 부팅하기
제3부. 안드로이드 시스템 통합
11장. AOSP와 CyanogenMod 구축하기
_AOSP와 CyanogenMod 소개
_안드로이드 가상 디바이스 설정하기
_AOSP 안드로이드 에뮬레이터 빌드
__AOSP 빌드 환경
__AOSP 소스 다운로드하기
__AOSP 안드로이드 에뮬레이터 이미지 빌드하기
__AOSP 이미지 테스트하기
_CyanogenMod 안드로이드 에뮬레이터 빌드
__CyanogenMod 소스 다운로드하기
__CyanogenMod 안드로이드 에뮬레이터 빌드하기
__CyanogenMod 이미지 테스트하기
12장. 사용자 정의 안드로이드와 나만의 안드로이드 롬 만들기
_AOSP에서 새로운 하드웨어 지원하기
__AOSP 와 함께 커널 빌드하기
__AOSP와 함께 U-Boot 빌드하기
__NAND 플래시로부터 U-Boot과 함께 안드로이드 부팅하기
_CyanogenMod에서 새로운 하드웨어 지원하기
__CyanogenMod와 함께 커널 빌드하기
__U-Boot 빌드하고 CyanogenMod 부팅하기
부록
A. 이 책의 소스코드 빌드하기
_빌드 환경 설정하기
_가상 머신 설정하기
_소스코드 체계
_1부를 위한 소스코드
__커맨드 라인에서 빌드하고 테스트하기
__이클립스에서 빌드하고 테스트하기
_2부의 소스코드
_3부의 소스코드
__AOSP 빌드하기
__CyanogenMod 빌드하기
B. 이 책과 관련된 저장소 사용하기
_저장소(Repo)에 있는 자원들
__즉시 새 소스트리 동기화하기
_지역 매니페스트를 사용하여 Git Repositories 다운로드하기
저자
저자
로저 예
저자 로저 예 (Roger Ye)는 임베디드 시스템과 최신 기술에 대해 관심이 많은 임베디드 시스템 프로그래머이다. 모토로라, 에머슨, 인텔에서 근무했으며 모토로라와 에머슨에서 모바일 기기와 통신 인프라에 대한 임베디드 시스템 프로젝트에 참여했다. 로저는 현재 인텔 시큐리티에서 안드로이드 애플리케이션즈팀을 이끌며 엔지니어링 매니저로 활약하고 있다. 로저는 지금 그의 아내 보 콴과 딸 유신 예와 함께 중국에 살고 있다. GitHub에서 그와 관련한 더 많은 정보를 찾을 수 있다.
https://github.com/shugaoye/
https://github.com/shugaoye/
Payment & Security
Payment methods
Your payment information is processed securely. We do not store credit card details nor have access to your credit card information.

