이번 포스팅에는 모듈과 커널 컴파일의 필요성에 대해 알아보겠습니다. 



리눅스는 1969년 12월 28일에 태어난 스웨덴 게 핀란드인 소프트웨어 개발자인 Linus Benedict Torvalds(리누스 베네딕트 토르발스)가 만들었습니다. 당시 그는 리눅스와 분산 버전 관리시스템인 git 등을 만들었는데요. 그리고 오픈소스로 모든 사용자들에게 개방했지만 커널만큼은 손수 작업한다고 합니다. 그리고 커널은 바꿀 수도 있는데 최신의 커널을 다운로드 받아서 업데이트를 해보려고 합니다. 자동차로 비유하자면 엔진룸을 바꾸는 것과 마찬가지라고 할 수 있습니다.


리눅스에서 커널은 운영 체제의 핵심적인 부분으로 운영체제의 다른 부분 및 응용프로그램 수행에 필요한 여러가지 서비스들을 제공합니다. 


아래 위키피디아(https://en.wikipedia.org/wiki/Kernel_(operating_system))를 참조한 커널의 역할에는 다음과 같은 핵심 역할들이 있습니다. 


  • 보안
커널은 컴퓨터 하드웨어와 프로세스의 보안을 책임진다.
  • 자원 관리
한정된 시스템 자원을 효율적으로 관리하여 프로그램의 실행을 원활하게 한다. 특히 프로세스에 처리기를 할당하는 것을 스케줄링이라 한다.
  • 추상화
같은 종류의 부품에 대해 다양한 하드웨어를 설계할 수 있기 때문에 하드웨어에 직접 접근하는 것은 문제를 매우 복잡하게 만들 수 있다. 일반적으로 커널은 운영 체제의 복잡한 내부를 감추고 깔끔하고 일관성 있는 인터페이스를 하드웨어에 제공하기 위해 몇 가지 하드웨어 추상화(같은 종류의 장비에 대한 공통 명령어의 집합)들로 구현된다. 이 하드웨어 추상화는 프로그래머가 여러 장비에서 작동하는 프로그램을 개발하는 것을 돕는다. 하드웨어 추상화 계층(HAL)은 제조사의 장비 규격에 대한 특정한 명령어를 제공하는 소프트웨어 드라이버에 의지한다.


쉽게 말해 커널은 하드웨어를 제어하는 코드를 가지고 있는데 종류별로 다른 모든 하드웨어의 코드를 커널이 전부 보유할 수 없기 때문에 모듈이라는게 존재한다. 그래서 잘 안쓰는 코드들을 모듈로 따로 분류를 해놓게 되는데 모듈은 항상 로딩되는게 아니라 필요할 때만 가져와서 쓰게 된다. 따라서 커널의 무게는 줄고 더 빠르게 구동시킬 수 있게끔 최적화를 시킬 수 있는 것이다. 


커널 컴파일(업그레이드) 순서는 다음과 같습니다.



일단 


# uname -r 

명령으로 현재 커널 버전을 확인합니다. 현재 커널버전은 3.10.0 버전입니다.


3은 주버전으로 커널의 기능상 큰 변화가 있을 때만 바뀝니다.

10은 부버전으로 기능 업그레이드나 추가 및 큼직한 변화가 아닐 경우 바뀝니다.

0은 패치레벨로 해당버전에 수정이 있을 때마다 1씩 증가합니다.

 


# wget "http://www.kernel.org/pub/linux/kernel/v3.x/linux-3.17.4.tar.xz" 


현재 참고하고 있는 강의대로 이미 지난 버전이지만 wget으로 다운받습니다.


물론 http://www.kernel.org 에서 최신의 버전을 받아도 문제없습니다.



다음과 같이 진행됩니다. 


진행외 완료 된 후 


# ls -l | grep linux


로 다운로드된 파일을 확인할 수 있습니다. 


# mv linux-3.17.4.tar.xz /usr/src


해당 파일을 /usr/src로 옮깁니다. 해당 폴더에서 작업해야 하기 때문입니다.



이제 


# tar xfJ linux-3.17.4.tar.xz 


명령으로 압축을 풀어줍니다.



압축이 다 풀리면 linux-3.17.4 파일이 생성된 것을 확인할 수 있습니다.



이제


# cd linux-3.17.4


linux-3.17.4 파일로 이동합니다.



해당 폴더에는 c언어로 이루어진 여러 파일들이 있습니다. 해당 파일들을 컴파일해서 커널을 설치해주는 작업을 하면 됩니다.



컴파일을 위해 


# yum -y install gcc gcc-c++ qt qt-devel


컴파일러를 설치해줍니다.



다음과 같이 설치 중 화면을 볼 수 있습니다.



설치가 완료되면


# make mrproper 


명령으로 커널 설정을 초기화 해준 다음


# make xconfig


명령을 통해 커널 설정창을 띄워줍니다.



커널 설정 창은 저도 전부 모릅니다만 Processor type and features 옵션에서 프로세서 패밀리를 설정할 수 있으며 Generic-x86-64가 기본설정으로 되어 있습니다. 



쭉 밑으로 내려보면 File systems 옵션을 확인할 수 있는데 커널이 기본적으로 NTFS 파일을 지원하지 않으므로 해당 부분을 체크해주면 이후에 NTFS 기반 USB나 HDD를 이용이 가능하도록 설정할 수 있습니다.



저장버튼을 클릭하고 나와서 


# make clean 


으로 이전 정보는 다 지워줍니다.



이제 커널을 설치하기만 하면 됩니다


# make

# make moduels_install

# make install


따로 실행시켜줘도 되고


# make ; make modules_install ; make install


아래처럼 모든 명령을 하나가 종료되면 순차적으로 자동실행되도록 실행시켜도 됩니다.



설치에는 네트워크 상황이나 컴퓨터 사양에 따라 수시간이 소요될 수도 있습니다.


커널 컴파일이 완료되면 재부팅 해주면 커널 설치가 완료됩니다.


(오전 1시 2분 업데이트 상황) 어제 밤 12시쯤 시작한 커널 컴파일이 제 컴퓨터로 1시간 가량 걸린듯합니다.



다음과 같은 화면을 보시면 정상 설치 되신 겁니다 ^^ 기존 커널은 유지하고 새로운 커널이 생겼습니다!


여기까지 설치하셨다면 정말 고생 많이 하셨습니다~!




+ Recent posts