커널 이미지 구현
- 개발 도구 설치 : 툴체인 설치, 빌드 자동화 도구 이용
- 커널 포팅 준비 : 커널 소스 설치, 커널 패치
- 리눅스 커널 수정 및 구현 : 빌드 환경파일, cpu 아키텍처 소스, 커널 초기화 코드, 디바이스 드라이버, 커널 컴파일 코드 수정 혹은 구현
개발 환경
- 임베디드 시스템은 개발 환경과 타겟 시스템이 다름
- 호스트 시스템 : 개발 환경과 운용환경이 다를 경우 개발을 위한 환경. 여기서 루트파일 시스템, 어플리케이션 개발 -> 호스트 컴퓨터
- 크로스 컴파일 환경 : 임베디드 시스템을 위한 소프트웨어 개발하기 위해 호스트 시스템 구축하는 개발 환경
- 빌드 루트 : 툴체인과 RFS(root file system)를 보다 쉽게 구축할수 있도록 만든 것
커널 개발 방식
1. 커널을 타겟 보드에서 다운로드하여 직접 수정 사용
2. pc에서 크로스 컴파일러로 커널 이미지 생성 후 타겟에 이식
크로스 컴파일러 선택
- 타겟 프로세서에 맞는 것을 찾아 사용해야힘
- arm 프로세서를 대상으로 크로스 컴파일러 설치
라즈베리파이 3의 툴체인
- git clone https://github.com/raspberrypi/tools ~/tools
툴체인을 다운받으면 바로 사용할수있는가
- 경로 설정을 하면 어느 디렉토리에서나 사용 가능
1. $path 라는 환경변수에 크로스컴파일러의 경로 추가.
2. bashrc에 적용
커널 소스 컴파일 과정
- ncursesdv, build-essential 패키지 설치 apt 명령어
- 커널 소스 다운
- kernel.org에서 표준 커널 소스 다운 후 타겟에 맞게 수정,
* 패치 파일- 하드웨어 제조사에 해당 보드에 맞게 수정 없으면, 개발자가 직접 수정해야함
라즈베리파이의 리눅스 커널 소스
- git clone --depth=1 https://github.com/raspberrypi/linux.git
라즈베리파이3을 위한 기본 설정
- cd linux
- KERNEL=kernel7(64비트 리눅스 커널 생성)
- make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
- bcm2709_defconfig
- make ARCH=arm menuconfig 추가 수정 시
- make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j4
- arch/arm/boot에 zImage 커널 파일 생성완료
zImage 분석
- readelf -S zImage
- 14개 색션의 헤더들이 있음
- 시작 주소 0x3d922c
- bss : 커널에서 전역변수를 사용할때 사용하는 메모리
- stack : 지역변수나 함수들을 호출할때 사용하는 메모리
라즈베리파이 커널 부팅 로고 바꾸기
1. 라즈베리파이 커널 다운
- 툴체인 다운
- bashrc에 경로 추가
- soruce ~/.bashrc로 적용
- ncurse-dev, build-essential
2. 라즈비안 커널 소스 다운
3. 라즈비안 부팅시 로고 변경
- find 명령어로 logo 파일 검색
- 로고 디렉토리로 사진 옮기기
-jpg파일을 ppm 파일로 변경
- ppm 이미지 색상을 변경
- 이미지 색상변경
4. 커널 이미지 생성
- KERNEL=kernel7
- 나머지는 디폴트로 커널 설정
- make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2789_defconfig
zImage 생성
- make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j4
zImage 파일을 kernel7.img로 변경
- mv zImage kernel7.img
-> 이후 sd 카드에 옮기기
부팅 결과
'컴퓨터과학 > 임베디드' 카테고리의 다른 글
임베디드 SW 엔지니어링 - 7 운영체제 커널 분석 (0) | 2020.05.27 |
---|---|
임베디드 SW 엔지니어링 - 6 펌웨어 구현 (1) | 2020.05.27 |
임베디드 SW 엔지니어링 - 5 펌웨어 구현 환경 구축 (0) | 2020.05.25 |
임베디드 SW 엔지니어링 - 4 펌웨어 설계 (0) | 2020.05.25 |
임베디드 SW 엔지니어링 - 3 펌웨어 분석 (0) | 2020.05.25 |