책 이미지
책 정보
· 분류 : 국내도서 > 컴퓨터/모바일 > 프로그래밍 개발/방법론 > 리눅스/유닉스 프로그래밍
· ISBN : 9788997750061
· 쪽수 : 312쪽
· 출판일 : 2015-08-07
책 소개
목차
내용
DEVICE TREE 상세분석 1
저작권 2
커널연구회 로드맵 3
커널연구회 교육과정 4
저자 소개 5
문서 표준 6
목차 9
1. 작업환경 및 소스경로 14
1.1 개요 14
1.2 작업환경 15
1.3 DEVICE TREE 소스경로 17
2. DEVICE TREE 소스 분석 21
2.1 DTS 기본 문법 21
2.2 DTS 기본 예제 23
2.2.1 CPU 표현 23
2.2.2 노드 명칭들 24
2.2.3 디바이스 표현 24
2.2.4 compatible 속성 25
2.3 주소 표현 26
2.3.1 CPU 주소 지정 28
2.3.2 메모리 매핑 장치들 28
2.3.3 메모리 매핑 않되는 장치들 30
2.3.4 Ranges 속성 31
2.4 인터럽트 표현 34
2.5 사용자 추가 데이터 37
2.6 특별한 노드들 38
2.6.1 aliases 노드 38
2.6.2 chosen 노드 39
2.7 진보된 주제들 39
2.7.1 진보된 장치 예제 39
2.7.2 PCI 호스트 브릿지 40
2.7.3 PCI 주소 변환 40
2.7.4 진보된 인터럽트 매핑 43
3. DEVICE TREE 실용 분석 50
3.1 CPU 표현 54
3.2 메모리 표현 57
3.3 인터럽트 표현 59
3.4 CLOCK 표현 63
3.5 CCI 표현 65
3.6 내부 시스템 메모리 표현 66
3.7 MMC 표현 66
3.8 MCT(타이머) 표현 67
3.9 핀맵(PINCTL) 표현 68
3.10 AMBA 표현 83
3.11 I2S 표현 84
3.12 SPI 표현 85
3.13 UART 표현 86
3.14 PWM 표현 87
3.15 ADC 표현 88
3.16 I2C 표현 88
3.17 USB 표현 91
3.18 TMU 표현 93
3.19 멀티미디어 표현 93
4. DEVICE TREE 실습 96
4.1 삼성 EXYNOS5420 이해 97
4.2 개발 환경 구축 100
4.2.1 우분투 설치 100
4.2.2 개발용 패키지들 설치 101
4.2.3 크로스 컴파일러 설치 103
4.3 소스 빌드 및 포팅 105
4.3.1 u-boot 소스 빌드 105
4.3.2 마이크로 SD카드 부팅 113
4.3.3 리눅스 커널 소스 빌드 117
4.3.4 램디스크 포팅 134
4.4 커널 부팅 소스 분석 151
4.7 GPIO 드라이버 179
4.5 시리얼(UART) 드라이버 190
4.6 USB 드라이버 196
5. UART 드라이버 상세분석 202
5.1 UART 구조체 204
5.2 UART 드라이버 등록 205
5.3 UART 포트 등록 206
5.4 UART 드라이버 동작 207
5.5 UART 실행함수들 207
6. UART 구조체 209
6.1 UART_DRIVER 구조체 210
6.2 CONSOLE 구조체 211
6.3 UART_STATE 구조체 211
6.4 TTY_DRIVER 구조체 212
6.5 TTY_PORT 구조체 212
6.6 UART_PORT 구조체 213
6.7 UART_8250_PORT 구조체 215
6.8 TTY_OPERATIONS 구조체 216
6.9 UART_OPS 구조체 217
6.10 TTY_STRUCT 구조체 218
6.11 KTERMIOS 구조체 220
6.12 UART_ICOUNT 구조체 220
6.13 TTY_LDISC 구조체 221
6.14 TTY_BUFFER 구조체 222
6.15 기타 구조체 223
6.15.1 cdev 구조체 223
6.15.2 platform_ 구조체 223
6.15.3 proc_dir_entry 구조체 224
6.15.4 file_operations 구조체 224
6.15.5 work_struct 구조체 225
6.15.6 circ_buf 구조체 225
6.15.7 baud rate 상수 226
7. UART 드라이버 등록 228
7.1 SERIAL8250_INIT() 229
7.2 UART_REGISTER_DRIVER() 231
7.3 TTY_REGISTER_DRIVER() 232
8. UART 포트 등록 235
8.1 SERIAL8250_REGISTER_PORTS() 236
8.2 UART_ADD_ONE_PORT() 237
8.3 SERIAL8250_ISA_INIT_PORTS() 239
9. UART 8250 드라이버 동작 241
9.1 SERIAL8250_PROBE() 243
9.2 SERIAL8250_SUSPEND() 248
9.3 SERIAL8250_RESUME() 251
9.4 인터럽트 동작 254
9.4.1 receive_chars() 254
9.4.2 transmit_chars() 256
10. 삼성 UART 드라이버 동작 257
10.1 드라이버 등록 257
10.2 포트 정보 260
10.3 PROBE 262
10.4 드라이버 동작 264
10.5 문자 전송(_TX_CHARS) 266
10.6 문자 수신(_RX_CHARS) 268
11. TTY 실행 함수들 271
11.1 TTY 드라이버 등록 273
11.2 TTY_OPEN() 274
11.3 TTY_READ() 277
11.4 TTY_WRITE() 279
12. UART 실행 함수들 281
12.1 입출력(IO) 함수들 283
12.2 UART_OPEN() 285
12.3 UART_WRITE() 287
부록1. SENSOR 정보 요약 289
A1.1 PHOTORESISTOR 289
A1.2 PHOTOTRANSISTOR 290
A1.3 거리 센서 291
A1.4 적외선(INFRARED) 센서 292
A1.5 초음파(ULTRASONIC) 센서 292
A1.6 ACCELEROMETERS 293
A1.7 MAGNETOMETERS 294
A1.8 GYROSCOPE 295
A1.9 배터리 센서 296
A1.10 위험(화재, 가스누출)감지 센서 297
부록2. 병렬처리 299
A2.1 병렬처리 용어정리 299
A2.2 필요 기술 303
A2.3 동작 시나리오 304
부록3. 커널연구회 교육과정 308
A3.1 교육 일정 308
A3.2 교육 로드맵 308
A3.3 상세 교육 내용 테이블 309
A3.4 커널연구회 로드맵 310
A3.5 실습용 임베디드 보드 311
A3.6 커널연구회 교육학원 위치(약도) 312
저자소개
책속에서
1. 작업환경 및 소스경로
1.1 개요
부트로더는 리눅스 커널을 타켓 보드의 RAM에 복사한 다음에 커널로 진입(jump)하는 역할을 한다. 커널은 CPU을 설정하고 가상 메모리를 초기화 하는 여러가지 작업들을 콘솔에 표시한다. 이러한 커널의 동작들은 장치들의 정보를 레지스터에 쓰면서 수행된다. 프로세서 코어들의 종류가 많고 접근할 수 있는 메모리 용량도 다양한 상황에서 커널은 어떻게 레지스터들의 주소를 알 수 있을까? 쉽게 직관적으로 해결할 수 있는 방법은 커널 소스안에 플렛폼 의존적(맞춤형)인 부트 루틴을 만드는 것이다. 이것은 커널 파라미터들을 사용하여 설정할 수 있다. 이러한 방식은 모든것이 고정되어 있을때는 좋은 해법이 될 수 있지만, 장치들이 가변적으로 변경된다면 커널은 실행 시간(run-time)에 변경된 장치들을 알아내야 한다.
ARM 아키텍쳐는 점점 다양화 되고 있어 리눅스 커뮤니티에서 논란이 많아지고 있다. ARM 보드마다 자신만의 외부 장치들을 제각각 장착하고 있어서, 커널 안에 특별한 환경설정 파라미터를 패치하거나 헤더 파일들이 제멋대로 생겨나고 있다. 이로 인해서 커널 소스가 난잡해지고 유지보수가 힘들어져서 커널을 분석하는데 점점 어려움을 느끼고 있는 실정이다. 또한, 커널 소스가 특정 보드상의 특정 칩에 맞게끔 컴파일되어 실행 바이너리가 생성됨으로 인해서 모든 ARM 프로세서에 호환되지 못하는 상황이 벌어지고 있다. 그러나 PC에서는 BIOS가 있어서 하드웨어 장치가 변경되면 자동적으로 검출하여 동작하도록 해주는 작업이 쉽다. ARM 프로세서는 BIOS가 없어서 리눅스 커널이 모든 역할을 다해주고 있어서 리눅스 커널을 믿는 수밖에 없다. 그래서 리눅스 커널에 도입된 해결책이 디바이스 트리(device tree)이며, Open Firmware (abbreviated OF) 혹은 Flattened Device Tree (FDT)라고 언급되기도 한다.
디바이스 트리는 강력한 규정이라기 보다 엄격한 관례라는 관점으로 접근하는 것이 바람직하다. 예를들면, 디바이스 트리안의 경로와 파라미터는 어떻게 정하는 것이 좋은지 정해진 관례를 따라가는 것이다. 정해진 API가 특정 데이터에 접근하도록 표준화된 트리 구조체를 사용하도록 한다. 주변장치들의 버스, 주소, 인터럽트, 변수들은 정해진 관례를 지켜서 디바이스 트리에 표현한다. 디바이스 트리는 커널의 일부분으로서 하드웨어 정보를 추가, 제거, 운반하는 장소 역할을 한다.
디바이스 트리를 심도있게 학습하기 전에 먼저 아래에서 작업환경과 디바이스 트리 소스경로를 확인하여 기본적인 배경 지식을 요약 정리한다.



















