시스템콜이 등록이 안되는 것 같습니다. 도와주세요 ㅠㅠ

EMJAY♡의 이미지

지금 시스템콜 부분을 책에 있는 실습을 통하여 공부중인데요.

책에 있는대로 시스템 콜 번호 할당해주고, 콜테이블에 등록하고

함수 구현하고, Makefile 수정하고 커널 재컴파일하고

응용프로그램 구현해서 컴파일까지 마쳤는데 (/usr/src/asm/unistd.h 파일에 추가도 했구요)

응용프로그램을 실행해보니 시스템콜 구현부분이 실행이 안되네요.

/var/log/messages 를 확인해봐도 기록이 안남아있구요 ㅠㅠ

제가 보기엔 시스템콜이 등록이 안되서? 그러는거 같은데

왜그런걸까요 ............. ?

리눅스도 다시 깔아봤는데 그대로네요;

다시 리눅스를 깔아야 하는걸까요?

고수님들 도와주세요 ㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ

+) 참고하고 있는 책은 한빛미디어의 '리눅스시스템 & 커널기초' 이구요,

Redhat 9.0 에 커널버젼은 2.4.32 입니다.

( 이 책대로 따라가는게 실습결과가 제일 잘나온다고 하셔서 일단 그대로 따라가는 중입니다; )

토끼아빠의 이미지

일전에 저도 시스템콜때문에 애를 먹은적이 있었습니다.
그때 구현했던 방법을 간단히 적었습니다.
조금이나마 참고가 되시면 좋겠네요~~

1. Linux-버젼/kernel 디렉토리에 mysyscall.c라는 파일을 추가합니다.
여기에 처리하려는 시스템콜내용을 작성해줍니다.
2. 다음 Linux-버젼/include/asm-i386/unistd.h파일과 /usr/include/asm/unistd.h파일에 다음의 코드를 추가합니다.
#define __NR_mysyscall 325
325라는것은 시스콜번호인데 현재 2.6.23버젼에서 시스템콜이 324개까지 실현되였으므로 새로 추가한 시스콜번호를 325로 할당해주었습니다.
3. 다음 linuxk-버젼/arch/i386/kernel/ syscall_table.S파일에 다음의 코드를 추가해줍니다.
.long sys_mysyscall /* 325 */
4. 마지막으로 linuxk-버젼/kernel/Makefile에 다음의 코드를 추가해줍니다.
obj-y = sched.o fork.o exec_domain.o panic.o printk.o profile.o \
exit.o itimer.o time.o softirq.o resource.o \
sysctl.o capability.o ptrace.o timer.o user.o user_namespace.o \
signal.o sys.o kmod.o workqueue.o pid.o \
rcupdate.o extable.o params.o posix-timers.o \
kthread.o wait.o kfifo.o sys_ni.o posix-cpu-timers.o mutex.o \
hrtimer.o rwsem.o latency.o nsproxy.o srcu.o die_notifier.o \
utsname.o mysyscall.o
5. 애플리케이션을 작성합니다.
이때 새로 추가한 시스템콜을 등록하기 위해 lib화일을 만들어줍니다.(mylib.c)
#include

int mysyscall()
{
syscall(__NR_mysyscall, <파라미터들>);
}
다음 새로 추가한 시스콜을 호출하는 애플리케이션을 작성합니다.( mysyscall_app.c)
#include
int main()
{

mysyscall();

}
컴파일지령은 다음과 같다.
gcc –c mylib.c
ar –r lib_mylib.a mylib.o
gcc –o mysyscall_app mysyscall_app.c –L./ -l_mylib
./mysyscall_app

제 생각에는 님께서 추가한 시스템콜을 등록하는 lib를 작성해주지 않은것 같습니다.
우의 방법은 제가 테스팅해본것이니 그대로 이용해도 별문제가 없으리라 봅니다.
우의 lib파일은 단지 새로 추가한 시스템콜을 등록하는것이므로 이 lib파일을 작성하지 않고 직접 새로 추가한 시스템콜을 호출하려면 다음과 같은 방법으로 하면 됩니다.
syscall(__NR_mysyscall, <파라미터들>)

조금이나마 도움 되시기를....

좋은 하루 되세요!!

좋은 하루 되세요!!

토끼아빠의 이미지

아~ 님이 이용하시는 버젼이 2.4이군요.
2.4에서는 파라미터개수에 따라 syscall함수가
syscall0()
syscall1()
syscall2()
이런 형식으로 되었던것 같습니다. (잘 기억나지 않네요~~)
2.6커널에서부터 syscall이라는 하나의 함수로 통합하였을겁니다.

좋은 하루 되세요!!

좋은 하루 되세요!!

댓글 달기

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