Jim Cromie wrote:
attached is a cut-down patch that attempts to convert scx200_gpio
to use the new 2.6 char-dev-driver API.
Its closely modelled after LDD-3 scull driver.
it segfaults reliably on cat /proc/devices after rmmod'g
tested against 12-rc4-mm2, I think it will apply to 12-rc[45]
#!/bin/bash
# load 1 at a time ??
modprobe scx200
modprobe scx200_gpio
cat /proc/devices
rmmod scx200_gpio
cat /proc/devices # 1st segfault here
rmmod scx200
cat /proc/devices # segfault again here
I can hazard a few (blind) guesses as to the reasons for segfault:
1. Im doing it wrong (I did check for the obvious, but..)
2. this is a mixed conversion
scx200_gpio depends upon scx200, which is still old api, I havent
touched it.
tia
jimc
well, it was 1, my bug. Heres the fix.
$ diff diff.scx200-segfault.20050603.0*
3c3
< +++ scx200-segfault/drivers/char/scx200_gpio.c 2005-05-30
08:45:38.000000000 -0600
---
> +++ scx200-segfault/drivers/char/scx200_gpio.c 2005-06-03
09:12:18.000000000 -0600
103c103
< + unregister_chrdev_region(devno, MAX_MINORS);
---
> + unregister_chrdev_region(devno, NR_DEVS);
Even though this is kernel prgramming, it strikes me that there might be
room for improvement wrt protecting the OS from chr-driver programming
errors.
It might be low-hanging fruit for one of the taller newbies (taller than
myself ;-)
Any giants care to comment ?
--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive: http://mail.nl.linux.org/kernelnewbies/
FAQ: http://kernelnewbies.org/faq/