random의 특정 함수와 디바이스 드라이버 작성시 오류문제 />

warpaint의 이미지

무선랜 드라이버 오픈 소스를 보고 있습니다.(linux-wlan)
1)
소스를 보는중에 wep의 해당하는 부분에 아래와 같은 함수가 있습니다
get_random_bytes(iv,3) 이 함수의 원형이 get_random_bytes(void *buf, int nbytes); 이렇게 되는데염 이건 어떤 의미인가요? int nbytes의 값은 랜덤하게 들어 가게 되는지 등등 궁금합니다

2)
무선랜 디바이스 드라이버를 부분적으로 잘라서 함수별로 모듈화 하여 컴파일 하였습니다.
그리고 나서 컴파일하여 test.o 파일을 만들어 insmod test.o 하니까
세그멘테이션 오류가 발생합니다. 그리고 rmmod test.o해도 모듈이 죽지도 않고 이런 모듈의 오류를 찿기 위해서는 kgdb 디버깅 툴을 사용하는것이 맞나여?
맞다면 간단한 사용법좀 부탁드려요. 아니면 참고할 만한 자료라도.......

그럼 오늘도 축복된 하루 되세염

hb_kim의 이미지

1) 앞으로 소스를 보시며 참조해서 사용하는 함수의 원형을 보고 싶을 경우가 종종 발생할텐데 그런때 이렇게 하시면 됩니다.

상위 디렉토리에 가서,
grep get_random_bytes -r *

하면 전 디렉토리를 뒤져서 get_random_bytes 이 쓰여진 곳을 모두 찾습니다. 보통 linux/drivers/ 에서 찾으면 되지만 안찾아지면 linux/ 에서 찾으시면 됩니다.

drivers/char/random.c: *        void get_random_bytes(void *buf, int nbytes);
drivers/char/random.c:void get_random_bytes(void *buf, int nbytes)
drivers/char/random.c:          printk(KERN_NOTICE "get_random_bytes called before "

그러면 함수의 원형이 있는곳을 찾을수 있죠. 가서 확인해보시면 됩니다.

/*
 * This function is the exported kernel interface.  It returns some
 * number of good random numbers, suitable for seeding TCP sequence
 * numbers, etc.
 */
void get_random_bytes(void *buf, int nbytes)
{
        if (sec_random_state)
                extract_entropy(sec_random_state, (char *) buf, nbytes,
                                EXTRACT_ENTROPY_SECONDARY);
        else if (random_state)
                extract_entropy(random_state, (char *) buf, nbytes, 0);
        else
                printk(KERN_NOTICE "get_random_bytes called before "
                                   "random driver initialization\n");
}

낯설은 함수가 나왔죠? 또 위의 과정을 반복하시면 됩니다.

이 반복되는 과정에서 왠지 막히는 부분이 있다면 커널이나 C에 대한 기본지식이 부족하기 때문이니, 관련서적을 참조하시거나 아니면 차분히 소스를 보고 연구하시면 됩니다. 만약 함수에 첨부된 주석을 이해하지 못한다면 영어를, entrophy 등의 용어를 이해하지 못한다면 배경학문(이경우는 통신이론)을 보충하시면 됩니다.

방법론은 쉬운데, 실제로 적용하기가 만만치 않습니다. 개발자의 욕심같아서는 후딱 이해하고 자신이 원하는 것을 빨리 설계/구현해보고 싶은데, 그냥 넘어가자니 꺼림찍하고...

2) 커널패닉에는 코어를 생성시켜서 crash 툴을 사용하는것이 정석입니다.
http://bbs.kldp.org/viewtopic.php?t=35330

하지만 코어를 생성시켜서 crash 를 올리는 과정도 만만치 않게 귀챦습니다. 그리고 이 경우에는 모듈을 load 하면서 발생하는 패닉이기 때문에 소스를 분석하여 원인을 찾아내는것이 더 쉬울것 같습니다.

보통 crash 툴은 소스를 보고 분석하기에는 어려운 run-time 에러를 잡는데 사용합니다. crash 툴을 사용하더라도 스택 프레임을 보고 난 다음에 왜 그런 결과가 발생하였는지는 마찬가지로 소스를 따라가면서 분석해야죠.

댓글 달기

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