리눅스 커널 컴파일 질문입니다.(고수님들 도와주십쇼~)

lson02의 이미지

fedora 12 를 깔아보고 커널 컴파일 한번 해보려고 시작했습니다.
궁극적으로는 Driver 까지 손을 한번 대보려는 목적으로.
부끄럽지만 질문 드리겠습니다. 따끔한 지적과 따뜻한 조언 부탁드립니다.

1. kernel-header 를 설치해야 컴파일 가능하다고 하는데 찾아보니 kernel-header 는 include 안에 .h 파일들
인것 같은데 source 를 받아서 풀어보니 내부에 있는 includ 내에 .h 파일들이 있었습니다. 차이점이 무엇인지요.
참고로 fedora 설치할때 설정에서 개발도구 부분인가에 check 해주었더니

$ rpm -qa | grep kernel
kernel-firmware-2.6.31.5-127.fc12.noarch
abrt-plugin-kerneloopsreporter-0.0.11-1.fc12.i686
kernel-PAE-devel-2.6.31.5-127.fc12.i686
abrt-addon-kerneloops-0.0.11-1.fc12.i686
kernel-PAE-2.6.31.5-127.fc12.i686
kernel-headers-2.6.31.5-127.fc12.i686

위와 같은 내용의 kernel rpm 들이 있네요.

2. .ko 파일이 나와야 할것 같은데 .o 파일들이 생성되네요.
이하는 작업 절차 입니다.
#uname -a
Linux lsy-fedora.com 2.6.31.5-127.fc12.i686.PAE #1 SMP Sat Nov 7 21:25:57 EST 2009 i686 i686 i386 GNU/Linux
2.6.31.6 의 소스를 받아서 풀어 놓고
/boot/config-2.6.31.5-127.fc12.i686.PAE 파일을 /usr/src/linux/.config 로 복사해서
meke dep 하니깐 "not Necessary..." 필요 없다고 해서
make modules 를 하니.. 각 directory 에 .o 파일들이 생성되고 있네요. 왜 .ko 가 아닌건가요?? 뭔가 잘못한건가요??

3. 이후 절차. 맞는지요.
kernel 이미지를 make bzImage 로 만들어서 boot/. 로 복사하고
/etc/lilo.conf 를 편집해서 lilo 적용해 주고
make modules_install 로 모듈 적용해 주고
재부팅.

4. 헌데 kernel 이미지는 test 해보기 위해서 lilo.conf 에 추가 하는 식으로 이름을 달리 설정하고 원본 대신 test 할수
있다는것 같은데 모듈은 make modules_install 하면 기존껄 엎어 쓰는거 아닌가요?? 잘 안되었을때 돌아 갈수 있는
방법이 있다면 조언 부탁드립니다.

moonhyunjin의 이미지

딱 하나만 말씀드리면 1번부터 틀렸습니다.
일반적으로 kernel-header는 커널 모듈을 컴파일 할 때 필요하죠.

<- 이거면 안 되는 게 없어~
정품 소프트웨어 사용 캠패인

<- 이거면 안 되는 게 없어~
정품 소프트웨어 사용 캠패인

hys545의 이미지

즐린

kernel-devel 안 깔으면 커널 모듈 컴파일 안됩니다.
그리고 kernel-header는 glibc나 gcc에서 필요로 합니다.

즐린

승원의 이미지

일반적으로 커널 모듈을 빌드하기 위해서는 빌드 완료된 전체 커널 소스 트리가 필요합니다. 하지만 제 경험으로 볼 때, 배포판에서 제공하는 커널을 위한 모듈을 빌드할 때는 배포판에서 제공하는 커널 헤더 패키지만 설치하면 되는 듯합니다. 제가 쓰는 Ubuntu에서는 이 커널 헤더 패키지 이름이 linux-headers- 로 시작하는데, 보아하니 Fedora에서는 kernel-headers- 로 시작하는 듯합니다.

그러므로 moonhyunjin 님의 말씀은 틀리지 않은 것 같습니다.

상식적으로 생각해도, 커널 모듈에는 리눅스 커널이 제공하는 각종 api(예를 들어, module_init 매크로)들이 사용되기 때문에 최소한 커널 헤더는 있어야지 빌드가 가능할 것 같습니다.

lson02의 이미지

fedora 설치시 기본으로 kernel-header 와 devel 이 깔려 있는 상태 였습니다.
전 단지 구체적으로 어떤점이 다른지 알고 싶어서 질문을 올려 보았지요.

나중에 보니 .o 파일뿐 아니라 .ko 파일도 생성되더라구요.
버젼 2.4?? 이후 .ko 파일로 바뀌었다더니 .o 파일도 필요하긴 하나 보네요.

승원의 이미지

저는 고수가 아니기 때문에, 그냥 제가 아는 데 까지만 답변 드리겠습니다.

1. 커널 소스라는 것이 kernel.org에서 다운로드 받은 공식 리눅스 커널을 말하는 것이겠죠? 그렇다면, 기본적으로는 비슷할 것입니다. 하지만, Fedora 같은 벤더에서 제공하는 커널은 자신들만의 패치가 적용되어서 공식 리눅스 커널과는 다소 차이가 있을 가능성이 높습니다.

2. 커널 설정에서 모듈로 설정된 부분만 모듈로 컴파일이 됩니다. 또한, 모듈로 설정되어 있는 부분이라고 해도 여러 개의 .o 파일이 모여 최종적으로 하나의 .ko 파일을 만드는 경우가 많습니다. 따라서 .o 파일이 생성되다고 해서 이상하게 생각하지 마시기 바랍니다.

3. 인터넷를 검색해 보시면 커널 컴파일 관련 문서가 많이 있습니다. 관련 문서들을 충분히 읽어보시고 직접 해보시기 바랍니다. 많은 리눅스 배포판이 요즘에는 LILO 대신 GRUB을 사용하고 있습니다. 되도록 최근 문서를 읽어 보시기 바랍니다.

4. 커널 모듈이 설치된다면 /lib/modules/ 디렉토리 아래에 있는 서브 디렉토리들 중 해당 커널 버전에 맞는 디렉토리에 설치될 것입니다. 커널 버전이 현재 사용 중인 커널 버전과 다르다면 아무 문제가 없을 것이고, 설사 같다고 해도 커널 버전에 사용자 정의 문자열을 더하거나 하는 등의 방법으로 기존 커널 모듈을 덮어 쓰는 문제를 피해갈 수 있을 거라 예상됩니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.