우분투에서 커널을 컴파일해 보고 싶습니다

이제 막 우분투가 깔린 노트북을 사용하면서 처음 우분투를 접하는 유저입니다.
리눅스 커널을 공부하고 싶은데요.
가지고 있는 입문도서에 따라 진행을 하고 있는데 처음 부터 막혀서 우분투커뮤니티에 질문드립니다.

우선 제 우분투는 12.04 LTS 입니다. 그리고 지금부터 도서따라 제가 시행한 대로 언급하겠습니다.
틀린부분이 있다면 바로 지적해주시고 올바른 가르침 부탁드리겠습니다.


우선 책에서 하고자 하는 것은 커널을 컴파일 하는 방법을 설명하고자 하는 부분입니다.

  1. 책에서는 우선 http://www.kernel.org에서 리눅스 커널 공식 버전을 다운 받으라고 합니다.
    홈페이지에 접속 후 가장 선두의 "Latest Stable Kernel 3.14"라고 적혀 있는 최신의 리눅스 표준 커널 3.14를 다운받았습니다.

-> 자신의 버전에 맞는 커널을 다운받아야 하나요? (예를 들면 우분투 12.04 LTS 커널이라 던지)
-> 만약 그래야 했었다면 왜 최신의 표준 커널은 적용이 안되나요?

  1. 그 다음 리눅스 시스템의 /usr/src/linux 디렉토리 내에서 압출을 풀라고 합니다.
    여기서 첫번째 의문입니다.
    /usr/src 까지 들어가 보니 linux라는 폴더는 없고
    linux-headers-3.5.0-32 라는 폴더와
    linux-headers-3.5.0-32-generic 이라는 폴더가 있을 뿐이었습니다.

-> 여기서 책에서 말한 linux폴더는 어떤 폴더를 가리키는 건가요?
-> 그리고 뒤에 -generic이 붙은 폴더와 붙지 않은 폴더는 뭐가 다른 건가요?
-> 어디에 압축을 풀어야 하나요?

저는 우선 다운로드 폴더에 압축을 그대로 풀어보았습니다.
풀어보니 그 안의 내용이 위의 2개 폴더와 비슷한 걸 알아챘습니다. (제가 아래에 첨부한 사진과 같은 구조를 보고 말이죠)
그래서 이 압축해제한 파일을 통채로 /usr/src 에 옮기려 했습니다.
하지만, "허가 거부"라는 메세지와 함께 파일이동에 실패했습니다.
src디렉토리에는 파일생성도 안되고 파일의 붙여넣기도 허용되지 않았습니다.
(제 짧은 생각엔 커널이란 시스템의 중요한 부분이기에 우분투는 이를 보호차원에서 미연에 방지하려는 것 같았습니다.)

-> 이 제 짧은 생각이 맞나요?
-> 그리고 진행해야 하는데 이런 "허가 거부"의 상태에서 어떻게 진행해야 하나요?
-> 만약 방법이 없다면 우분투 환경에서 리눅스 커널 공부는 어려운가요?

질문이 좀 난잡하고 많은데, 초심자라 이해 부탁드리고 정성스런 답변 부탁드리겠습니다ㅠ
답변이 쉽고 자세하면 더욱 감사하겠습니다.ㅠㅠ;;

감사합니다.

아! 책을 참고 하신 것 같습니다.
저는 그냥 하면서 익힌 것이라 책은 잘 모릅니다.

일반적으로 다운로드 받으신 표준 커널은 일부 하드웨어에 대한 모듈의 지원이 원활하지 않을 수 있습니다.
물론 사용하는 데에 지장은 없지만 신규로 사용되고 있는 하드웨어 대한 모듈을 지원케 하거나
새로운 파일 시스템에 대한 지원을 원활히 하려면 직접 이에 대한 소스의 변형과 설정을 하실 줄 아셔야 합니다.

우분투의 커널도 이러한 점을 반영하여 같은 버전의 커널이라 하더라도 번형된 커널을 사용하며
내부적으로 소스를 보면 굉장히 지저분한 경우가 덜어 있습니다.

따라서 직접 컴파일 해서 사용해 보시겠다면 이에 대한 만반의 준비가 되어 있어야 할 것입니다.
또한 컴파일 후 설치시에도 우분투, 페도라, 오픈수세등의 설정법이 서로 다름을 인지 하셔야 합니다.

저는 서버의 경우를 제외하고 일반적인 데탑용으로는 직접 컴파일 하지 않습니다.
데스크 탑의 경우에는 배포반의 저장소에서 배포하는 커널의 소스를 다운 받아 변형하거나 이미 build된 커널을 사용 합니다.

저도 초보자라서 자세한 사항은 고수분께서 도와 주시기를 희망하며
generic이란 의미는 사전적인 의미와도 같습니다. 일반적인 것을 의미 하며
표준에서 변형되어 모듈이 추가된 것에는 generic이란 표현을 쓰지 않습니다.

직접 디렉토리를 검토해 보시면 모듈이 추가된 사항을 확인하실 수 있습니다.
linux-source(커널 소스)를 설치하시면 /usr/src/linux 폴더가 생성 될 것입니다.

사용 권한이 없는 디렉토리로 파일을 압축 해제 하거나 이동 시키려면
sudo 명령어를 사용해야 합니다.

이 이상의 답변은 저보다 나은 고수분께서 답변해 주시면 감사하겠습니다.

고맙습니다.
커널개발환경을 만드는 것 조차 너무 힘드네요.
말씀하신대로 sudo명령어를 통해 파일이동에 성공했고 압축도 풀었지만
그 뒤에 책에서 설명한대로 설정을 하고 있는데 에러만 계속 뜹니다.
초보자들을 위해 간단한 우분투에서 커널개발환경구축방법이 있었으면 좋겠네요ㅠ
답변감사드립니다.

커널을 직접 손보고 싶으신 건가요?

그렇지 않고, 최신 커널을 사용해 보고 싶으시다면, 굳이 커널을 컴파일 하실 필요 없이,
최신 커널을 다운받아 설치하시면 됩니다.

http://kernel.ubuntu.com/~kernel-ppa/mainline/ 에서 최신 커널을 업데이트 배포하고 있습니다.

다음은 제가 작성한 최신 커널 다운로드 스크립트입니다.

[code:39o98gsn]
#!/bin/bash

BASE_DIR="$HOME/kernels"
BASE_DIR="${BASE_DIR%/}/"
VER=

while [ -n "$1" ];
do
case "$1" in
-h|–help)
echo "
basename $0 [OPTIONS]

Download lastest kernel and related packages.

OPTIONS

    -r          Enable release candidate
    -t          Simulate
    -l          List-only
    -d          Directory for dowload
    -v          Major version of kernel
    -h, --help  Display this"
        exit;;
    -r) RC=1;;
    -t) TEST=echo;;
    -l) LIST_ONLY=1;;
    -v) VER="$2"
        shift;;
    -d) BASE_DIR="$2"
        BASE_DIR="${BASE_DIR%/}/"
        shift
        ;;
esac
shift

done

SAVE_DIR="$BASE_DIR"
if which aria2c &>/dev/null; then
if [ "${SAVE_DIR:0:1}" = "/" ]; then
SAVE_DIR="${BASE_DIR#/}"
CMD="aria2c -c -s 5 -x 5 -k 5M -d / -o"
else
CMD="aria2c -c -s 5 -x 5 -k 5M -o"
fi
else
CMD="wget -c -O"
fi
echo $CMD

test_rc() {
[ -z "$RC" ] && grep -v rc || cat
}
rmtags() {
sed -r ‘s/<[^>]+>//g’
}
getlinkurl() {
sed -r ‘s/.href="([^"]+)"./\1/g’
}
BASE_URL="http://kernel.ubuntu.com/~kernel-ppa/mainline/"

echo "Search lastest kernel .."
URI=wget -O - &quot;$BASE_URL&quot; 2&gt;/dev/null|rmtags|grep &quot;^v&quot;|test_rc|awk -F &quot;/&quot; '{print $1}'| (&#91; -n &quot;$VER&quot; &#93; &amp;&amp; grep &quot;${VER/&#46;/\&#46;}&quot; || cat)|tail -1
[ -d $BASE_DIR$URI ] || mkdir -p $BASE_DIR$URI
PKGARCH=$(dpkg-query --showformat="${Architecture}" -W dpkg)
for f in wget -O - $BASE_URL$URI/ 2&gt;/dev/null|getlinkurl|grep -E &quot;($PKGARCH|all)\&#46;deb&quot;;
do
if [ -n "$LIST_ONLY" ]; then
echo "$BASE_URL$URI/$f"
elif [ -f "$SAVE_DIR$URI/$f" ]; then
echo "Already exists $SAVE_DIR$URI/$f .."
continue
else
echo "Download $BASE_URL$URI/$f to $SAVE_DIR$URI/$f .."
$TEST $CMD $SAVE_DIR$URI/$f $BASE_URL$URI/$f || exit
fi
done
[/code:39o98gsn]

또한, 직접 커널 컴파일 보다는, apt-get source 명령으로 소스를 다운로드하셔서 컴파일 하는 것이 좋습니다.
왜냐면, 우분투에서 추가한 패치등이 들어 있고, 기본설정이 되어 있기에 일일이 설정을 변경하지 않아도 되고,
패키지 바이너리리 파일을 생성하실 수 있기 때문입니다.
일반적으로 커널을 재컴파일 하는 과정은 다음과 같습니다.

[code:39o98gsn]
sudo apt-get install build-essential
sudo apt-get source linux-source
sudo dpkg-source -x xxxx.dsc
sudo dpkg-buildpackage -rfakeroot -b
[/code:39o98gsn]

좋은 문서를 보셔야 쉽습니다.

https://help.ubuntu.com/community/Kernel/Compile http://www.tldp.org/LDP/lkmpg/2.6/html/lkmpg.html

[quote="sin2270":2rx8v8t1]고맙습니다.
커널개발환경을 만드는 것 조차 너무 힘드네요.
말씀하신대로 sudo명령어를 통해 파일이동에 성공했고 압축도 풀었지만
그 뒤에 책에서 설명한대로 설정을 하고 있는데 에러만 계속 뜹니다.
초보자들을 위해 간단한 우분투에서 커널개발환경구축방법이 있었으면 좋겠네요ㅠ
답변감사드립니다.[/quote:2rx8v8t1]

음…! 커널을 컴파일 하시려면 여러가지 컴파일 전 설치해 놓아야 할 패키지가 괘 있습니다.

컴파일 전 무엇이 준비되어 있어야 하는 지 책에는 없던가요?

답을 드릴 수도 있으나 먼저 구글링을 통해 무엇이 필요한 지
어떤 과정을 거치는 지 충분히 조사해 보시기 바랍니다.

커널 개발 환경이라…?? 텍스트 에디터 하나면 족하지 않나요?

우분투 깔자마자 커널을 만지다…
이건 마치 자동차운전면허증 따자마자
고속도로에 나가는 행위에 필적합니다.

책(입문서)은 대강의 줄기로만 참조하시고,
실지 타이핑 작업시엔 해당 배포판의
최신도움문서들을 참조하시는게 좋을거 같아요;

커널은 CPU와 메모리 각종 주변장치등을
제어합니다. 어마어마하게 중요합니다.

사람으로 치면 보이지 않는 ‘정신/영혼’ 등에 해당…

윗 분 말씀대로 그런 감이 없지 않으나
어째든 천리길도 한걸음 부터라 했습니다.

우분투 커뮤니티의 사부님 중 한 분이신 "강분도"님 께서 적절한 내용의 글을 남겨 주셨네요!
참고로 약간 오래된 팁이므로 몇몇 패키지는 변경이 있어야 할 듯 합니다.(힌트는 이미 글 속에 있습니다.)

[url:12vt5aye]http://www.ubuntu.or.kr/viewtopic.php?f=9&t=4543[/url:12vt5aye]

아, 친절한 답변들 감사드립니다.
책에도 여러가지 해야 할 설정에 대해서 기술되어 있는데
make mrproper
make menuconfig
make dep
…등등 의 것이었습니다.
책에 나온 대로 그대로 시행해봤으나 알 수 없는 에러창만 다수 뜨네요.

답변해주신 자료들 참고 삼아 좀 더 공부해야겠습니다.
초보한테 친절히 답변 주신 점 감사드립니다.