Some Questions

John Baldwin jhb at freebsd.org
Tue Oct 18 08:50:50 PDT 2005


On Tuesday 18 October 2005 04:26 am, Yong Ma wrote:
> Hi everybody:
>
>
> I'm new here,nice to meet you all! I'm also aFreeBSD_device_driver newbie,
> and now I'm enaged in writting a driverfor a cryptographic accelerator
> card.As a preparation I read thesections of device driver in "FreeBSD
> Architecture Handbook",andexercised the example driver in the book.now I
> have several questions(maybeeasy for you but most useful for me):
>
> 1)Some drivers declares the device_open() as int device_open(dev_t
> dev,...),and some declare it as int device_open(struct cdev
> *dev,...),sometimes the first one couldn't be compliedsuccessfully,what's
> the difference?

On 6.0 and later you should use 'struct cdev *dev' and on 5.x and earlier 
'dev_t dev'.

> 2) if (pci_get_vendor(dev) == 0x11c1) { ...
>                               ~~~~~~~~how to get this number if I don't
> know it?

This number is part of the chip ID in pciconf -l output.  For example, on my 
laptop:

pcib1 at pci0:1:0: class=0x060400 card=0x00000000 chip=0x1a318086 rev=0x04 
hdr=0x01

For this device, pci_get_devid(dev) would return 0x1a318086.  
pci_get_vendor(dev) would return the 0x8086 part of that.

> 3)Could the device on PCI slot be listed by /pciconf -l /without driver.

You mean cutting out the pcib1 part from the line above?  You could always use 
something like awk, sed, or cut.  For example:

% pciconf -l | cut -d @ -f 2
pci0:0:0:       class=0x060000 card=0x56001558 chip=0x1a308086 rev=0x04 
hdr=0x00
pci0:1:0:       class=0x060400 card=0x00000000 chip=0x1a318086 rev=0x04 
hdr=0x01
pci0:29:0:      class=0x0c0300 card=0x56001558 chip=0x24828086 rev=0x02 
hdr=0x00
...

> 4)The printf() seems not work under XWindow mode in functions like
> deviec_prob or device_attach,how to make it work?

Run 'dmesg' in your Xterminal to see the messages.  Alternatively, you can use 
the 'xconsole' program which should show the messages in its window.

> 5)If only the pseudo-device in /dev can be destroyed with
> destroy_dev(sc->dev0) in detach() function in a KLD driver? I can't do
> that!

I'm not sure what you are asking here.  You can't leave an entry in /dev 
around when your module is unloaded via kldunload since you would be removing 
the devsw and devsw functions that back that device resulting in a kernel 
panic the next time some process tried to use the /dev entry.  What exact 
problem are you trying to solve?

-- 
John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org


More information about the freebsd-drivers mailing list