FTDI 드라이버 동작을 확인하려고 하는데요

gokore의 이미지

usb 1-1: new full speed USB device using ar71xx-ehci and address 5
usb 1-1: configuration #1 chosen from 1 choice
ftdi_sio 1-1:1.0: FTDI USB Serial Device converter detected
usb 1-1: Detected FT232BM
usb 1-1: Number of endpoints 2
usb 1-1: Endpoint 1 MaxPacketSize 16384
usb 1-1: Endpoint 2 MaxPacketSize 16384
usb 1-1: Setting MaxPacketSize 64
usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB0

dmesg를 찍어서 위의 결과를 볼 수 있었는데요

지금 제가 원하는 것이 디바이스 드라이버 코드 들이 어떻게 동작하는 지 흐름을 보고 싶은데요.

대체 어떻게 해야할지 감이 오질 않네요

prink()를 모든 코드의 함수 시작 부분에 박아두면 될 것 같긴한데

좀 더 현명한 방법이 없을까요 ??

고수님들의 답변 부탁드립니다.

bushi의 이미지

http://sourceware.org/systemtap/

fedora 에선..

$ sudo debuginfo-install kernel (혹은 kernel-PAE)
$ sudo yum install -y systemtap
$ sudo stap-prep

그리고,

$ sudo stap -gvvv -m test /usr/share/doc/systemtap-1.3/examples/general/para-callgraph.stp 'module("ftdi_sio").function("*")' -c "echo hello > /dev/ttyUSB0 || true"

결과는

     0 sh(17305):->ftdi_open tty=0xc1250800 port=0xc10c3000
     6 sh(17305): ->write_latency_timer port=0xc10c3000
   103 sh(17305): <-write_latency_timer return=0x0
   347 sh(17305): ->ftdi_set_termios tty=0xc1250800 port=0xc10c3000 old_termios=0xed643360
   472 sh(17305):  ->change_speed tty=0xc1250800 port=0xc10c3000
   476 sh(17305):   ->trace_kmalloc call_site=0xf7fb0f1d ptr=0xf1020360 bytes_req=0x1 bytes_alloc=0x8 gfp_flags=0x10
   480 sh(17305):   <-trace_kmalloc 
   483 sh(17305):   ->ftdi_232bm_baud_to_divisor baud=0x1c200
   487 sh(17305):   <-ftdi_232bm_baud_to_divisor return=0x1a
   597 sh(17305):  <-change_speed return=0x0
   723 sh(17305):  ->update_mctrl port=0xc10c3000 set=0x0 clear=0x6
   727 sh(17305):   ->trace_kmalloc call_site=0xf7fb0c80 ptr=0xf1020360 bytes_req=0x1 bytes_alloc=0x8 gfp_flags=0x10
   730 sh(17305):   <-trace_kmalloc 
   847 sh(17305):  <-update_mctrl return=0x0
   849 sh(17305): <-ftdi_set_termios 
   852 sh(17305): ->ftdi_submit_read_urb port=0xc10c3000 mem_flags=0xd0
   857 sh(17305): <-ftdi_submit_read_urb return=0x0
   860 sh(17305):<-ftdi_open return=0x0
     0 sh(17305):->ftdi_dtr_rts port=0xc10c3000 on=0x1
     4 sh(17305): ->update_mctrl port=0xc10c3000 set=0x6 clear=0x0
     8 sh(17305):  ->trace_kmalloc call_site=0xf7fb0c80 ptr=0xf1020360 bytes_req=0x1 bytes_alloc=0x8 gfp_flags=0x10
    11 sh(17305):  <-trace_kmalloc 
     0 Xorg(1630):->ftdi_read_bulk_callback urb=0xd8fd0800
     5 Xorg(1630): ->usb_serial_debug_data debug=0x0 dev=0xc10c30f0 function=0xf7fb26a4 size=0x2 data=0xdafbf200
     9 Xorg(1630): <-usb_serial_debug_data 
    13 Xorg(1630): ->ftdi_submit_read_urb port=0xc10c3000 mem_flags=0x20
    17 Xorg(1630): <-ftdi_submit_read_urb return=0x0
    19 Xorg(1630):<-ftdi_read_bulk_callback 
   133 sh(17305): <-update_mctrl return=0x0
   136 sh(17305):<-ftdi_dtr_rts 
     0 sh(17305):->ftdi_ioctl tty=0xc1250800 file=0xeefe7a00 cmd=0x5401 arg=0xbff25a30
     4 sh(17305):<-ftdi_ioctl return=0xfffffffffffffdfd
     0 sh(17305):->ftdi_write tty=0xc1250800 port=0xc10c3000 buf=0xc12bc400 count=0x6
     5 sh(17305): ->usb_serial_debug_data debug=0x0 dev=0xc10c30f0 function=0xf7fb27e8 size=0x6 data=0xf1020360
     8 sh(17305): <-usb_serial_debug_data 
    12 sh(17305):<-ftdi_write return=0x6
     0 sh(17305):->ftdi_chars_in_buffer tty=0xc1250800
     3 sh(17305):<-ftdi_chars_in_buffer return=0x6
     0 sh(17305):->ftdi_chars_in_buffer tty=0xc1250800
     3 sh(17305):<-ftdi_chars_in_buffer return=0x6
     0 Xorg(1630):->ftdi_write_bulk_callback urb=0xeefe7480
     6 Xorg(1630):<-ftdi_write_bulk_callback 
     0 sh(17305):->ftdi_chars_in_buffer tty=0xc1250800
     3 sh(17305):<-ftdi_chars_in_buffer return=0x0
     0 sh(17305):->ftdi_close port=0xc10c3000
     0 Xorg(1630):->ftdi_read_bulk_callback urb=0xd8fd0800
     3 Xorg(1630):<-ftdi_read_bulk_callback 
   113 sh(17305):<-ftdi_close 
lyh1816의 이미지

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