드라이버 제작할 때 왜 디버깅 툴을 안 쓰나요?

cshmax의 이미지


윈도우 드라이버만 공부하다가
리눅스를 처음 해 보는 학생인데요

리눅스 커널 디버깅 툴에 대한 자세한 설명을 찾기가 힘드네요. (KGDB 같은거 말이죠.)
KGDB를 어렵사리 시도해 봐도 시리얼로 연결해서 하는 것만 나와있고
eth를 사용하는 건 정말... 예제를 따라해도 잘 안 되고..

아무튼
리눅스 드라이버 개발하시는 분들은 이런 디버깅 툴을 잘 안 쓰신다고 하는데
도대체 그 이유가 뭐죠?

어떻게 디버깅 툴을 안 쓰고 개발 하는 거죠?
printk 같은 것만 사용해도 디버깅이 충분히 가능하기 때문인가요?

정말 궁굼합니다.
그리고 자세히 알고 싶습니다.

uosarang의 이미지

아무래도
Trace32로 디버깅 하거나

회로도보면서 오실로스코프로 파형 찍어가며 디버깅하는 분들이 많으시지 않을까요.

머리를 굴려라! 그래야 먹고 산다.

grassman의 이미지

애초에 아주 잘못 만든 코드가 아니라면 적어도 printk로 뭔가를 찍고 난 뒤에 죽겠지요.
(최소한 kernel panic message에서도 정보는 많이 나옵니다)

윈도우 같으면 WinDBG에다 1394나 Serial 연결해서 PC 두대로 디버깅하는 환경이나 livekd 같은거
올려서 로컬 디버깅을 할 수도 있긴 합니다만... 실제로 드라이버 개발자가 문제를 해결할 때는
보통 파랗게(blue screen) 죽은 뒤에 kernel dump를 WinDBG로 역분석하는 경우가 더 많을 겁니다.
printk로 찍는 것과의 차이점이라고 한다면 조금 정보가 더 많다는 정도죠.

디버깅은 원래 자기가 만든 코드의 논리를 검증하는 과정이니 printk나 debugger나 50보 100보인
상황입니다. 좀 더 편리한 툴이 있는가 없는가의 차이인데 리눅스 쪽에서는 개발자들이 크게 관심을
안보이는 차이가 있는거죠. (혹시 누군가 만들어주기를 바라고 있을지도 모릅니다)

bushi의 이미지

kgdb라고.. 오래 전 부터 패치가 있었고,
최근 2.6.26 커널엔 x86 과 sparc 에 한해서 기본 포함되어 있습니다만,
어디 쓸 데가 없습니다.
http://linuxmafia.com/faq/Kernel/linus-im-a-bastard-speech.html

OTL

태훈의 이미지

저는 로직 분석기, 오실로스코프, printk()만 가지고 했습니다.

경험이 많지 않아서 드라이버 개발에 쓰이는 디버깅 툴을 쓸줄 모르는데다가 익힐만한 시간도 없었고, 드라이버 코드는 대체로 라인수가 많지 않아서 큰 필요성을 느끼지 못한점 때문에 kgdb같은 툴을 사용할 필요성을 느끼지 못하였습니다.

다만, ISR 루틴에 printk()를 넣으면 난감해집니다. ISR 루틴 디버깅은 디버깅용 전역변수를 하나 두고, ISR에서 전역 변수값을 변경하고, 다른 시점에서 이 전역변수를 출력하는 방법으로 디버깅 하였습니다.

------------------------------------------
http://onestep.tistory.com

Just do it!

태훈의 이미지

printk()로 충분하다기 보다는 그만큼 작성한 코드를 명확하게 이해하고 있어야 하기 때문이 아닐까요?
------------------------------------------
http://onestep.tistory.com

Just do it!

paeksj98의 이미지

딱히 다른방법을 몰라서 printk로만 해결하고 있는네요..
이런 환경에서쓸 정말 쓸만한 툴이 없는지 궁금하네요.??

댓글 달기

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