커널 버전 2.4-18 에서 모듈 컴파일 하는 법

hankm2004의 이미지

:D 안녕하세여

저는 이제 막 커널을 공부 하는 학생인데여

항상 커널 2.2 에서 공부를 하다가

이번에 한컴 리눅스 깔구 (커널 버전 2.4-18)

간단한 " Hello world" 를 쩍어 보려구 모듈 프로그램 을 짜구

gcc -O2 -D__KERNEL__ -DMODULE -D_LINUX hello.c -c 로

커널 2.2 에서 하던것 처럼 컴파이을 했는데여

insmod 로 모듈을 올릴려구 하니까

제 파일이 커널 2.4.09 용으로 컴파일 되어서 커널 버전이 안맞아서

못올린다고 나오네여

어떻게 된건지 ..............

커널 버전에 바뀌면 모듈 컴파일 옵션이 바뀐다구 하던데

그러서 그런가여?

혹시 아시는 분 있으시면 좀 가르쳐 주세여.............

부탁드립니다.

그리고 혹시 커널 2.2 에서 2.4 로 넘어오면서

원래 쓰던 header file 들이 많이 바뀐거 같던데

asm/uaccess.h 도 "그런 파일이 없다구 나오구 "

어떻게 바꿨는지 아시거나 문서 위치 아시는 분 도움 부탁드립니다.

커널 버전 2.2 와 2.4 차이가 참 많이 나는 군여

첨 부터 막히니

송지석의 이미지

저도 그런 현상 겪었는데요..

좀 삽질해보다가 그냥 포기하고

insmod -f 로 강제로 올렸습니다.

커널 버전이랑 맞추시려면 커널을 자기가 빌드한 것으로 쓰시는 것이 제일 확실한 것으로 알고 있습니다.

ganadist의 이미지

시스템에 깔려있는 커널 헤더가 현재커널과 다른것이라서 그런걸 껍니다.

컴파일 옵션에다가 다음을 넣으세요..

gcc -O2 -D__KERNEL__ -DMODULE -D_LINUX -I/lib/modules/$(uname -r)/build/include hello.c -c

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

hankm2004의 이미지

ganadist wrote:
시스템에 깔려있는 커널 헤더가 현재커널과 다른것이라서 그런걸 껍니다.

컴파일 옵션에다가 다음을 넣으세요..

gcc -O2 -D__KERNEL__ -DMODULE -D_LINUX -I/lib/modules/$(uname -r)/build/include hello.c -c

--------------------------------------------------------------

말씀 하신데로 했더니

그나마 돌던

printk 마저 undefined reference 라고 나오네요

sys_call_table 도 undefined reference 라고 나오고요.........

혹시 2.4 에서 해보신 분 없나여?

저는 이제 막 커널을 공부하기 시작한 사람입니다.

부디, 고수님을의 많은 조언 부탁 드리겠습니다.

seed의 이미지

실제 커널 컴팔을 합니다.
그러면 여러가지 옵션들이 대입된 출력물이 주루룩 나오잖아요..
그러면 그걸 copy & paste해서 님의 소스이름으로 컴파일 대상만 바꿉니다.

넘 무식한가....ㅋ

ganadist의 이미지

커널 2.2.x대에서는 커널헤더를 일반적으로 /usr/include/linux 에서 찾았습니다만 커널 2.4.x대에서는 커널헤더를 /lib/modules/$(uname -r)/build/include/linux 에서 주로 찾게 되어 있습니다.

그리고 printk의 심볼을 못찾는 이유는 커널심볼에 버젼을 박아서 그런것 같습니다.

궁극적으로 현재 쓰는 커널의 설정이랑 include한 커널헤더가 있는 커널의 설정이랑 달라서 그런 것입니다.

커널설정을 지금 쓰고 있는것과 동일하게 한다음 make dep 하시고 커널모듈을 다시 컴파일 하면 될듯합니다.

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

고도리의 이미지

저도 책이랑 자료만 보다가 모듈 프로그래밍할일이 좀 생겨서
그대로 했는데 님과 같이 컴파일도 안되더군요.

저는 주로 slackware만 가지고 개발했었는데 지금 쓰는 개발툴이
redhat밖에 안깔려서....^^

redhat 7.3을 쓰는데 일단 /usr/include/linux랑 /usr/include/asm이랑
정말 열받게 깔려 있더군요.

보통 슬랙은 커널의 include/linux랑 include/asm이랑 심볼릭 링크를
시켜놔서 커널 버젼이 바뀌어도 상관이 없게 되어 있었는데 이놈의
레드햇은 열받더군요.

그래서 제가 맘대로 변경해버렸습니다. 그 담부터는 좀 편하게 되더군요.,

모듈가지고 장난할때 제일 열받는게 컴파일이 안되는 거였는데,
열받아서 커널에 있는 드라이버중에 전에 보던 8139too.c를 보고
그냥 베꼈습니다.

헤더들은 다음과 같이 해주시고요(물론 알맞게 변경해야겠지요...)
저는 네트웍크 드라이버 손을 대느라 그냥 8139꺼 씁니다.

#include <linux/config.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/pci.h>
#include <linux/init.h>
#include <linux/ioport.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/rtnetlink.h>
#include <linux/delay.h>
#include <linux/ethtool.h>
#include <linux/version.h>
#include <asm/io.h>

#if LINUX_VERSION_CODE < 0x20407
#else
#include <linux/mii.h>
#include <linux/completion.h>
#endif

static int __init file_init_module (void)
{
	...코드
}


static void __exit file_cleanup_module (void)
{
	...코드
}


module_init(file_init_module);
module_exit(file_cleanup_module);

이런식으로 해주시고요.

컴파일은 담과 같이 합니다.

gcc -O6 -Wall -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLINUX -c file.c 물론 메이크 파일 만들어도 되고요.

이런후 insmod하면 될겁니다.

참. printk도 안되는 거는 대충 읽고 넘어가서 가물가물한데 커널안의
심볼테이블에는 printk_xxxx형태로 되어 있댑니다.

아마도 linuxkernel.net의 faq란엔가 보면 설명이 되어 있는것 같은
기억이....가물가물...함 찾아보세요.

그럼.

서명.....음, 서명이라...

아싸!!! Three Go!

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.