Linux System에서 가장 중요한 Kernel을 직접 컴파일하고 실행시켜 봄으로써 익숙해지도록 해보자..
Linux Kernel은 여러가지 버전이 있으며 가장 최신 것을 사용하되,
내가 접한 문서에서는 "2.4.16"을 바탕으로 설명하고 있음..
-리눅스 소스코드의 모든 함수/변수/정의 등에 대한 cross ref를 온라인으로 제공(http://lxr.linux.no)
예를 들면, visual studio에서 특정 변수를 click하면 그 변수가 정의된 소스코드를 보여주는 것과
비슷한 것 같다.
소스코드를 분석할때, 보통은 grep을 사용해 찾아본다고 함.
하지만 너무 힘들고 일이 많아지는 단점이 있으므로 LXR을 사용하는 것이 유익하다.
2. 소스코드 얻기
-Linux Kernel Source Code는 http://www.kernel.org 에서 구할 수 있음.
각 버전별로 구분되어 있으며, 이중 원하는 버전의 완전한 코드를 받는다.
gz, bz2 의 두가지 타입으로 압축되어 제공되며, 둘중 어느것을 사용해도 무방.
3. 소스코드 풀기
-Kernel Compile을 위해서는 root권한을 가져야함. (root 혹은 su로 login)
-보통 kernel은 /usr/src 밑에 위치
-압축된 kernel의 소스코드는 모두 linux란 이름의 directory로 시작하므로
usr/src에 linux란 link나 directory가 있을시 덮어쓰게 되므로 주의.
>>cd /usr/src
rm -f linux
tar xvjf somewhere/linux-2.4.16.tar.bz2 // 압축풀기
mv linux linux-2.4.16.tar.bz2 // A를 B로 옮김(혹은 rename)
ln -s linux-2.4.16 linux // symbolic link. 심볼만(파일의 경로) 가리킴
// windows의 단축아이콘과 같은 개념
// -s 옵션이 없으면 hard link
// link [링크할대상] [링크파일명]
4. Compile 준비 (tool version확인)
>>make mrproper //소스코드를 처음 깔았을 때와 같은 상태로 돌려주는..
cd /usr/src/linux/Documentation
vi Changes //이 document에는 현재 kernel을 compile하기 위해 필요한 tool들의
//version정보가 들어있음.
//각 tool들의 버전을 확인하는 방법은 [명령어] --version이라 치면됨.
//ex) gcc --version
make --version
5. Kernel 설정
-다음과 같은 방법이 있음
1)고전적인 방법
2)text 기반의 menu를 이용하는 방법
3)x-window상에서 GUI를 이용하는 방법
-menuconfig 방법
>>make config
make menuconfig
make xconfig
-kernel 설정이 끝나면 /usr/src/linux/.config 이 만들어 진다.
6. Kernel Compile
-다음의 순서대로 진행
>>make dep //source file과 header와의 의존성을 검사
make modules //설정에서 module로 선택한 것들을 *.o 의 형태로 만들어 준다.
make bzImage //kernel자체를 만들어준다.
make modules_install //만들어진 module을 /lib/modules/2.4.16에 설치
//설치와 함께 depmod를 실행해 module간의 의존성도 만들어주는 역할
7. Kernel test 및 설치
-Compile이 끝났으면 Kernel이 제대로 동작하는지 확인한 후 기본 커널로 설치해 사용.
-2가지 test방법:
1) 플로피 디스크 사용
make zdisk를 사용해 만들어진 kernel을 floppy에 담는다.
복사가 끝난 후 floppy를 이용해 부팅해 보고 정상동작하는지 확인.
2) LILO 사용(LInux LOader: Linux를 위한 boot loader)
/etc/lilo.conf 를 수정(문서 참조)
새로 부팅 후 LILO에 test라고 입력하여 새로 만든 커널을 실험한다.
-Kernel의 설치
Kernel image와 map file을 복사하고 lilo.conf를 수정하면 된다.
복사할 file: ~ means '/usr/src/linux'
1) ~arch/i386/boot/bzImage
2) ~/system.map
댓글 없음:
댓글 쓰기