본문 바로가기

Tizen

[Tizen Porting] #5 리눅스 커널 빌드(Linux Kernel Build)

#5 리눅스 커널 빌드하기(Linux Kernel Build)



이번 시간에는 리눅스 커널을 빌드하는 방법에 대해서 알아보도록 하겠습니다.


먼저 git에서 커널 소스를 받아야 합니다. 이전에 포스팅했던 소스 코드 가져오기는 모든 프로젝트를 가져오는 것이었다면


이번에는 커널 소스만 받아서 빌드해보도록 하겠습니다.


커널 소스 다운로드

다음 명령어를 통해 커널 소스를 받아줍니다.

$ git clone ssh://Username@review.tizen.org:29418/<Gerrit_Project> <Local_Project>

이 명령어에서 Username 부분에는 본인의 gerrit 아이디를 입력해주시고 앞쪽의 <Gerrit_Project> 부분에는 review.tizen.org 에서 위쪽의 Projects -> List -> kernel로 필터링 검색을 하시면 다운로드 가능한 kernel 소스들이 뜹니다. 그 중에 하나를 받으시면 됩니다. 그 다음 <Local_Project> 부분에는 저장할 위치를 입력하시면 됩니다.




저는 다음 명령어를 사용하여 kernel/linux-3.0 버전을 다운로드 하였습니다.

$ git clone ssh://Username@review.tizen.org:29418/platform/kernel/linux-3.10.git


Branch를 변경해주도록 합시다.

$ git checkout tizen


clone이 완료되면 다음과 같은 화면을 만날 수 있습니다. local 경로에 kernel/linux-3.0을 지정했기 때문에 kernel/linux-3.10 폴더가 생긴 것을 확인할 수 있습니다.




커널 빌드


다운로드 받은 커널 소스를 이용하여 커널을 빌드해보도록 하겠습니다.


먼저 소스를 다운받은 경로로 이동해줍시다. 그 다음 이전에 저장되어 있던 설정들을 초기화 하기 위해서 다음 명령어를 실행합니다.

$ make distclean


다음은 타겟 보드에 맞게 .config 파일을 설정합니다. 저는 Odroid-X2를 사용하기 때문에 odroid용으로 Config를 해보도록 하겠습니다.

$ make ARCH=arm tizen_odroid_defconfig




이후 다음 명령어를 차례대로 입력해주도록 합시다. "your gcc compiler"의 경우에는 본인의 PC에 설치한 gcc Compiler의 경로를 입력해주시면 됩니다. 이 부분은 차후에 다시 포스팅 하도록 하겠습니다.


$ make ARCH=arm uImage CROSS_COMPILE="your gcc compiler"

$ make ARCH=arm exynos4412-odroidu3.dtb CROSS_COMPILE="your gcc compiler"

$ cat arch/arm/boot/zImage arch/arm/boot/dts/exynos4412-odroidu3.dtb > ./zImage

$ tar cvf system_kernel_u3.tar zImage


이 과정에서 여러가지 에러가 발생할 수 있습니다. 이 포스트 아래쪽에 전부 알 수는 없지만 제가 경험했던 에러들을 픽스하는 방법을 설명해보겠습니다.


빌드 완료시 다음과 같은 화면을 만날 수 있습니다.




다음 포스팅에서는 u-boot 다운로드 및 컴파일에 대해서 알아보도록 하겠습니다.


빌드 에러 픽스(Build Error Fix) 방법

1. cc1: error: unrecognized command line option ~


이 에러는 크로스 컴파일러 설정이 제대로 되어 있지 않을 때 발생합니다. 추가적으로 32bit 라이브러리가 설치되어 있지 않은 경우 발생하게 됩니다. 이 경우는 다음 블로그를 참조하시기 바랍니다.


타이젠 포팅을 위한 ARM 툴체인 설치


2. include/drm/drm.h: fatal error: sys/ioccom.h: No such file or directory



이 경우는 다음 방법을 통해 해결이 가능합니다.

$ vim include/drm/drm.h

#if defined(__linux__) -> #if defined(__KERNEL__) || defined(__linux__)

파란색 내용을 빨간색 내용으로 바꿔주시면 됩니다.



참고 - http://wiki.epfl.ch/cavalinux/compbugs



2. /bin/sh: 1: lzop: not found


이 에러는 lzop 패키지가 없어서 생기는 에러입니다. 다음 명령어를 통해 lzop 패키지를 생성하시면 없어집니다.

$ sudo apt-get install lzop

참고 - http://whdghks913.tistory.com/41



3. "mkimage" command not found - u-Boot images will not be built



컴파일에 필요한 mkimage가 없다는 에러입니다. U-boot가 컴파일된 디렉토리 하위에 보면 tools란 디렉토리가 존재하는데 그 안에 mkimage가 생성되어있습니다. 이 파일을 /usr/bin으로 복사해주면 됩니다.



만약 U-boot가 다운로드 및 컴파일이 되어 있지 않은 분이시라면 다음 포스팅을 참조하여 컴파일까지 마친 후에 mkimage를 /usr/bin으로 복사하시기 바랍니다.


#6 U-boot 다운로드 및 컴파일