Chromium OS 커널 빌드하기
크로미움 커널 소스코드는, 크로미움 OS 소스 디렉토리 안에서 src/third_party/kernel/files 에 위치해 있습니다.
이 소스는 처음 repo sync를 진행할 때 자동으로 다운로드되어 위치되며, 크로미움 OS를 빌드할 때, 이 커널 소스를 참조하게 됩니다.
크로미움 OS의 커널 버전은 현재(2012년 1월 27일 기준) 3.0.13 이며, 순정 커널과 다소 많은 차이점이 있습니다.
[To do, 순정 커널과의 차이점 분석하여 글쓰기]
일단, 커널 Configure 부분이 바뀌었습니다. 흔히 하는 “make menuconfig” 가 아닌 크로미움 자체 스크립트를 이용하게 됩니다.
소스 디렉토리를 보면 chromeos라는 폴더가 있습니다. 이 폴더에 커널을 설정할 수 있는 스크립트와 크로미움 OS에서 사용하는 driver 들의 파일들이 들어있습니다.
[To do, chrome os 폴더 구조 분석]
kernel configuration 을 하기에 앞서, 작업을 편하게 하기 위해 몇가지 작업을 해야합니다.
크로미움 OS에서 제공해주는 스크립트를 사용하게 되면, x86_64, i386, arm, tegra2 등 다양한 플랫폼에 대해 configuration 과정을 거치게 됩니다. 이는 많은 시간을 소요하게 되므로 우리가 원하는 arm 만 configuration 할 수 있도록 스크립트를 수정할 것입니다.
다음은 Chromium OS Source Directory 의 src/thrid_party/kernel/files 에 있는 커널 소스 디렉토리 모습입니다.
스크립트 수정
커널 디렉토리에서 다음 명령어를 통해 스크립트를 수정합니다.
vim chromeos/script/kernelconfig
20번째 라인에 다음과 같은 내용이 보일 것입니다. 여기서 archs 내용을 수정할 것입니다. <sxh bash; first-line:20; highlight:22> kerneldir=“`pwd`” confdir=“$kerneldir/chromeos/config” archs=“x86_64 i386 armel” bindir=“`pwd`/chromeos/scripts” base_conf=“$confdir/base.config” tmpdir=`mktemp -d` </sxh>
archs를 다음과 같이 수정하고 파일을 저장합니다.
archs="armel"
파일 구조 변경
이제 스크립트를 수정하였으므로, 저 스크립트를 실행시키면 아키텍쳐가 arm에 대해서만 Kernel Configuration 을 진행하게 됩니다.
ARM 에서도 총 2개의 Configuration을 진행하는데 Tegra2와 범용 ARM 이 두가지에 대해서 진행합니다.
우리는 Tegra2는 쓰지 않기 때문에 범용 ARM에 대해 진행하도록 파일 구조를 변경해야합니다.
chromeos/config/armel 에 가보면 다음과 같은 파일이 있습니다.
falinux@ezboard:~/work/kernel-3.0.13/chromeos/config/armel$ ls -l 합계 20 -rw-r--r-- 1 falinux falinux 962 2012-01-21 17:04 chromeos-tegra2.flavour.config -rw-r--r-- 1 falinux falinux 232 2012-01-21 17:04 chromiumos-arm.flavour.config -rw-r--r-- 1 falinux falinux 11506 2012-01-21 17:04 common.config
여기서 chromeos-tegra2.flavour.config파일을 상위 폴더로 이동시켜줍니다.
mv chromeos-tegra2.flavour.config ../
자, 이제 커널을 빌드하기 위한 준비가 다 끝났습니다.
Kernel configure
그 동안 커널 configure를 하실 때, make menuconfig 를 통해 하셨을 것입니다. 물론 크로미움 OS 커널에서도 되지만 그 전에 아까 우리가 수정한 스크립트를 반드시 한번 거쳐야 합니다.
스크립트를 실행하실 때에는 반드시 커널 소스디렉토리에서 실행시키셔야합니다.
다음 명령어를 통해 커널 configure 를 하실 수 있습니다.
./chromeos/scripts/kernelconfig editconfig
그럼 다음과 같은 내용이 뜹니다.
falinux@ezboard:~/work/kernel-3.0.13$ ./chromeos/scripts/kernelconfig editconfig *************************************** * Processing armel (arm) ... * Run menuconfig on armel/chromiumos-arm.flavour.config... Press a key.
엔터를 눌러 진행합니다.
아키텍쳐 지정
제일 먼저 아키텍쳐를 지정해야 합니다.
System Type → ARM system type 으로 들어가 아키텍쳐를 s5pv210 으로 설정합니다.
그 뒤, 같은 위치에서 S5PV210 Machines 에서 머신 타입을 SMDKV210으로 설정해줍니다.
여기서 한가지 작업을 더 해 주어야 합니다. 디버깅 메세지를 받아 볼 수 있는 시리얼 포트의 번호를 지정해주어야 합니다.
S3C UART to use for low-level messages를 선택하여 숫자를 2로 지정합니다.
시리얼 드라이버 설정
이제 시리얼 드라이버를 설정해 봅시다.
기본적으로 삼성의 시리얼 드라이버가 설정되어있지 않기 때문에 일일이 지정해주어야합니다.
Device Drivers → Character devices → Serial drivers 에 들어갑니다.
Samsung SoC serial support
Support for console on Samsung SoC serial port
Samsung S5PV210 Serial port support
이 두 항목을 체크합니다.
마지막으로 할 일이 남았습니다.
다시 맨 처음으로 돌아가서, Kernel hacking으로 들어간 뒤, 맨 아래로 내려갑니다.
여기서 S3C UART to use for low-level debug의 번호를 2로 설정합니다.
자! 이제 커널 설정은 다 끝났습니다.
이제 소스를 약간 수정해주어야합니다.
arch/arm/plat-samsung/include/plat에 다음 파일을 덮어쓰기로 넣어줍니다.
debug-macro.s
이후 build 디렉토리로 이동하여, make Image 혹은 make zImage 를 통해 커널이미지를 만드시면됩니다.