1 / 42

프로젝트랩 6 장 . 부트로더와 커널 이미지

프로젝트랩 6 장 . 부트로더와 커널 이미지. 수원과학대학 정보통신과. 1. 부트로더의 개요. 부트스트랩 로더 (bootstrap loader) 의 준말로 컴퓨터를 사용자가 사용할 수 있도록 디스크나 플래시에 저장된 운영체제를 읽어 주기억장치에 적재해주는 프로그램 부트로더의 종류 LILO(LInux LOader) – 예전 Linux GRUB(GRand Unified Boot loader) – 요즘 Linux NTLDR(NT LoaDeR) – Windows 계열 BOOTX – 매킨토시

daisy
Télécharger la présentation

프로젝트랩 6 장 . 부트로더와 커널 이미지

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 프로젝트랩6장. 부트로더와 커널 이미지 수원과학대학 정보통신과

  2. 1. 부트로더의 개요 • 부트스트랩 로더(bootstrap loader)의 준말로 컴퓨터를 사용자가 사용할 수 있도록 디스크나 플래시에 저장된 운영체제를 읽어 주기억장치에 적재해주는 프로그램 • 부트로더의 종류 • LILO(LInux LOader) – 예전 Linux • GRUB(GRand Unified Boot loader) – 요즘 Linux • NTLDR(NT LoaDeR) – Windows 계열 • BOOTX – 매킨토시 • ARMBOOT – ARM과 StrongARM을 위한 공개 소스 부트로더 • BLOB(Boot Loader OBject) – StrongARM용 • BOOTLDR – (주)컴팩에서 만든 StrongARM을 사용하는 PDA • PPCBOOT – MPC 계열의 CPU와 타겟 시스템 • REDBOOT – 레드햇의 임베디드 OS인 eCOS의 일부를 이용 • U-BOOT(Universal BOOTloader) – PPCBOOT와 ARMBOOT를 통합 수원과학대학 정보통신과

  3. 부트로더의 기능 • 타겟 시스템을 위한 스타트업, 로더, 링커 기능 • 기본적인 시스템 진단 기능 • 모니터 기능 • 직렬 통신을 사용한 프로그램 적재 기능 • 네트워크를 통해 이미지 전송 • 메모리 내용 표시 및 수정 명령어를 제공 • 간단한 플래시 파일시스템 수원과학대학 정보통신과

  4. 2. 타겟 시스템의 부트 로더 분석 • 타겟 시스템에서 사용하는 부트로더는 BLOB를 수정 및 보완한 (주)하이버스의 BBOOT 버전 1.0.1 • 타겟 시스템의 플래시 메모리에 상주 • 운영체제 부팅 • 직렬 통신 혹은 이더넷을 통해 타겟 시스템에 접근 • 모니터 기능도 제공 • 콘솔을 통한 CLI(Command Line Interface)를 제공 • 이더넷을 통해 타겟 시스템에 접근 및 제어 가능 수원과학대학 정보통신과

  5. X-HYPER270-TKU의 부트로더 흐름도 수원과학대학 정보통신과

  6. 부트로더 소스 해부 [1] • 부트로더 소스 • 어셈블리 코드 파일: 3개 • C 프로그램: 21개 • 기타: 스크립트 파일, Makefile, 헤더 파일 수원과학대학 정보통신과

  7. 부트로더 소스 해부 [2] • main.c • <bootloader>/bboot-1.0.1/src/main.c 수원과학대학 정보통신과

  8. command.c (<bootloader>/src/command.c)

  9. BBOOT 명령어 [1] 수원과학대학 정보통신과

  10. BBOOT 명령어 [2] 수원과학대학 정보통신과

  11. 실습 6-1 부트로더 명령어 실습 • 미니컴을 이용해 타겟 시스템에 접속 • 타겟 시스템에 전원을 인가한 후 즉시 임의의 키를 입력해 수동 부팅 • help 명령, ping 명령 등 실행 ① ②

  12. 실습 6-2 부트로더 명령어로 디바이스 제어 • 타겟 시스템 수동으로 부팅 • 부트로더 명령어 write를 이용해 LED, FND, DOT 매트릭스 디바이스의 변화 관찰 ① ② ③

  13. 3. 부트로더 생성 • 부트로더를 생성하려면 툴체인이 설치되어 있어야 함 • 생성된 부트로더는 jflashmm이나 이미 설치된 부트로더의 부트 명령을 이용해 타겟 시스템에 있는 플래시 메모리에 퓨징 • BBOOT 소스 코드와 make를 이용해 부트로더 이미지를 생성 수원과학대학 정보통신과

  14. ② ③ ① ② ③ ④ ⑤ ⑥ 실습 6-3 부트로더 이미지 생성[1] • 가상머신 디렉토리에 있는 내용을 다른 디렉토리로 복사 • 복사된 디렉토리로 이동해 부트로더 파일의 압축을 풀고 Make 유틸리티로 컴파일

  15. 실습 6-3 부트로더 이미지 생성[2] • 에디터를 사용해 Makefile을 내용 중에서 /opt/iwmmxt-1.0.0을 /usr/local/hybus/toolchain으로 수정 • Make 유틸리티로 새로운 부트로더 이미지를 생성

  16. 실습 6-3 부트로더 이미지 생성[3] • 생성된 부트로더 이미지를 확인 후 플래시에 퓨징 • jtag 케이블 연결 • PC의 병렬 포트와 타겟보드의 LPT와 연결 • 부트로더 퓨징 • /usr/local/hybus/jtag/jflashmm pxa27x32.dat boot 부트로더 이미지(boot)를 cpu와 flash 메모리에 대한 정보가 보관된 pxa27x32.dat을 이용해서 퓨징시키고 있다. 수원과학대학 정보통신과

  17. 추가 실습 #1 • 자동 부팅을 위한 임의의 키 대기 시간이 현재 2초로 맞추어져 있다. 이 시간을 5초로 늘려 보자. • 힌트: main.c 수정 수원과학대학 정보통신과

  18. 4. 커널 빌드 과정 - 리눅스 커널을 빌드하는 일반적인 순서 - • 커널 환경 설정 유틸리티 • 텍스트 기반의 make config • 텍스트 메뉴 기반의 make menuconfig • X 윈도우 기반의 make xconfig 수원과학대학 정보통신과

  19. 커널환경설정 <linux>/arch/arm/Kconfig 수원과학대학 정보통신과

  20. Kconfig 문법 구조 [1] 수원과학대학 정보통신과

  21. Kconfig 문법 구조 [2] 수원과학대학 정보통신과

  22. Kconfig 문법 구조 [3] 수원과학대학 정보통신과

  23. Kconfig 옵션 [1] 수원과학대학 정보통신과

  24. Kconfig 옵션 [2] • 문자 디바이스에 관한 설정 파일 예 • <linux>/drivers/char/Kconfig 수원과학대학 정보통신과

  25. Kconfig 옵션 [3] • 문자 디바이스에 관한 설정 화면 수원과학대학 정보통신과

  26. Makefile 문법 규칙 [1] • 커널 컴파일 옵션에 설정된 컴파일 조건 변수에 의해 특정 소스를 컴파일해 커널에 포함시킬 것인지 여부를 결정 • 최상위 Makefile은 <linux>/Makefile를 의미 • 커널 설정을 완료하면 생성되는 커널 설정 파일인 .config를 사용 • 최종 결과물인 커널 이미지와 모듈을 생성하기 위해 하위 디렉토리에 있는 Makefile을 재귀적으로 찾아가면서 사용 수원과학대학 정보통신과

  27. Makefile 문법 규칙 [2] 수원과학대학 정보통신과

  28. Makefile 문법 규칙 [3] 수원과학대학 정보통신과

  29. Makefile 문법 규칙 [4] • 문자 디바이스 생성을 위한 Makefile 수원과학대학 정보통신과

  30. 커널 포팅 [1] • 커널 포팅(kernel porting): 커널 소스를 타겟 시스템에 적합하게 프로그래밍 및 컴파일해 생성된 커널 이미지를 타겟 시스템에 적재하는 과정 • 커널 소스의 패치 • 파일 준비 • 커널 소스 파일(linux-2.6.11.1.tar.gz) • PXA270용 패치 파일(linux-2.6.11-pxa.diff.gz) • X-HYPER270-TKU용 패치 파일(linux-2.6.11-pxa-270tku.diff.gz) • 차례대로 패치 적용 # tar zxvf linux-2.6.11.1.tar.gz # cd linux-2.6.11.1 # zcat ../ linux-2.6.11-pxa.diff.gz | patch –p1 # zcat ../ linux-2.6.11-pxa-270tku.diff.gz | patch –p1 수원과학대학 정보통신과

  31. 커널 포팅 [2] • 커널 환경 설정 • 타겟 시스템의 하드웨어 특성(프로세서, 메모리 등)뿐만 아니라 파일시스템 등에 대해 정확하게 파악하고 있어야 함 • 환경 설정에서 중요한 항목 몇 가지 • 커널 소스의 최상위 디렉토리에서 make menuconfig라고 입력한 후 나타나는 항목 수원과학대학 정보통신과

  32. 커널 포팅 [3] 수원과학대학 정보통신과

  33. 커널 포팅 [4] 수원과학대학 정보통신과

  34. 커널 포팅 [5] 수원과학대학 정보통신과

  35. ② ① ② ③ ④ ⑤ ⑥ 실습 6-4 커널 이미지 생성 • 커널 압축 파일이 있는 디렉토리로 이동해 압축 해제 • 압축을 푼 파일을 포함하는 디렉토리와 설정 관련 파일의 존재 여부 확인

  36. ② ③ 실습 6-4 커널 이미지 생성 • 에디터를 사용해 <linux>/Makefile의 arm-linux에 대한 경로를 조정 • /opt/iwmmxt-1.0.0을 /usr/local/hybus/toolchain으로 수정 • 타겟 시스템의 기본 설정 후 생성된 파일을 조사하고 메뉴 설정 단계를 시행

  37. 실습 6-4 커널 이미지 생성 • 커널 메뉴 설정 화면이 나타나면 [Tab] 키를 사용해 <Exit> 컨트롤로 이동한 후 [Enter] 키 입력 • 새로운 커널 설정을 저장하기 위해 <Yes>를 선택한 후 [Enter] 키 입력

  38. 실습 6-4 커널 이미지 생성 • .config 파일과 autoconf.h 파일을 다시 확인 후 make로 커널 이미지 생성 • 커널 이미지 생성을 확인한 후 생성된 zImage를 /tftpboot 디렉토리로 복사 • 부트로더 명령을 사용해 타겟 시스템에 전송한 후 퓨징 • hybus> tftp zImage kernel • hybus> flash kernel • 타겟 시스템을 재부팅 ① ② ③ ① ②

  39. ③ ④ ⑤ 실습 6-5 커널 이미지에hello.o 모듈 추가하기 • 필요한 파일을 생성 및 수정한 후 메뉴 설정 단계로 진입 ② 01 #include <linux/init.h> 02 #include <linux/module.h> 03 #include <linux/kernel.h> 04 05 static int hello_init(void) 06 { 07 printk("Hello, world!\n"); 08 return 0; 09 } 10 11 static void hello_exit(void) 12 { 13 printk("Goodbye, world!\n"); 14 } 15 16 module_init(hello_init); 17 module_exit(hello_exit); 18 MODULE_LICENSE("GPL");

  40. 실습 6-5 커널 이미지에hello.o 모듈 추가하기

  41. 실습 6-5 커널 이미지에hello.o 모듈 추가하기 • 환경 설정 메뉴의 주 화면에서 [Character devices --->] 하위 메뉴로 이동 • Character devices 하위 메뉴에서 “Hello, World” 항목이 생성되었음을 확인 후 화살표 키를 사용해 “Hello, World” 항목으로 이동

  42. 실습 6-5 커널 이미지에hello.o 모듈 추가하기 • Character devices 하위 메뉴에서 “Hello, World” 항목을 선택하기 위해 [Space] 키를 두 번 누른 후 공백에서 ‘*’로 바뀐 것을 확인 • [Esc] 키를 두 번 누른 후 수정한 설정 내용을 저장 • [실습 6-4]의 7) ~ 10) 단계를 수행 • 부팅 과정 중에 나오는 “Hello, World!” 메시지를 dmesg 명령을 사용해 관찰

More Related