Re: Tracing userland calls through to a driver
- In reply to: Lee MATTHEWS : "Tracing userland calls through to a driver"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 15 Sep 2022 08:43:47 UTC
On 15 Sep 2022, at 10:37, Lee MATTHEWS wrote: > I am trying to debug some GPIO issues on FreeBSD 10.3. > That’s an unsupported version (unless you meant 12.3), so the first thing to do is to see if your issue is still present in main. > I'd like to know if it is possible to know what process in userland > (via a process id) has called a method in the driver. > > So for example, in the driver, the functions are bound via DEVMETHOD > like : > > > static device_method_t winbond_gpio_methods[] = { > /* Device interface */ > ... > DEVMETHOD(gpio_pin_set, winbond_gpio_pin_set), > DEVMETHOD(gpio_pin_get, winbond_gpio_pin_get), > ... > DEVMETHOD_END > }; > > > When the function winbond_gpio_pin_get() is called, how can I know > what called this? > > For things like this I’d either look at truss(1), which will tell you what system calls the user space process called, or Dtrace. Something like `dtrace -n fbt::winbond_gpio_pin_set:entry { stack(); }` should give you a pointer already. Dtrace can take a bit of effort to learn, but it’s generally well worth it. The wiki has some initial hints: https://wiki.freebsd.org/DTrace Best regards, Kristof