2004-04-05 20:53:21

by Calin A. Culianu

[permalink] [raw]
Subject: Stupid question re: register_cdrom()


Let's say I was coding a cdrom emulator in software for kernel 2.4. I
am unclear about register_cdrom(). Does register_cdrom() in
cdrom.c take care of telling the kernel that my kdev_t major/minor
combination in fact leads to a real driver? Or do I need to take care of
that outside of regsiter_cdrom()?

If not.. how do I tell the kernel data structures that my driver's major
number does in fact point to a cdrom driver. Basically, I want my
driver's major number to show up in /proc/devices..

This might be a stupid question, but I am not a linux kernel expert...

Thanks for your patience!

-Calin


2004-04-05 23:12:51

by Tony Breeds

[permalink] [raw]
Subject: Re: Stupid question re: register_cdrom()

On Mon, Apr 05, 2004 at 04:53:16PM -0400, Calin A. Culianu wrote:
>
> Let's say I was coding a cdrom emulator in software for kernel 2.4. I
> am unclear about register_cdrom(). Does register_cdrom() in
> cdrom.c take care of telling the kernel that my kdev_t major/minor
> combination in fact leads to a real driver? Or do I need to take care of
> that outside of regsiter_cdrom()?
>
> If not.. how do I tell the kernel data structures that my driver's major
> number does in fact point to a cdrom driver. Basically, I want my
> driver's major number to show up in /proc/devices..
>
> This might be a stupid question, but I am not a linux kernel expert...

Neither am I, therefore I hope you get a reply from someone else
refuting or acknowledging my claims.


I looks to me that the code that does the actual registration of the
driver is in drivers/ide/ide-cd.c NOT cdrom.c. Specifically
ide_cdrom_attach(). Said function eventually calls the register_cdrom()
you ask about.

For writing a cdrom emulator You may want to look more closely at the
non-IDE/SCSI devices as they seem to register their driver data
themselves I had a quick read of aztcd.c, I think between cdrom.c and
aztcd.c you should be able to piece together what you want.

Also Try reading http://www.xml.com/ldd/chapter/book/ for details on 2.4
drivers

Yours Tony

linux.conf.au http://lca2005.linux.org.au/
Apr 18-23 2005 The Australian Linux Technical Conference!

2004-04-06 03:03:50

by Calin A. Culianu

[permalink] [raw]
Subject: Re: Stupid question re: register_cdrom()

On Tue, 6 Apr 2004, Tony Breeds wrote:

> On Mon, Apr 05, 2004 at 04:53:16PM -0400, Calin A. Culianu wrote:
> >
> > Let's say I was coding a cdrom emulator in software for kernel 2.4. I
> > am unclear about register_cdrom(). Does register_cdrom() in
> > cdrom.c take care of telling the kernel that my kdev_t major/minor
> > combination in fact leads to a real driver? Or do I need to take care of
> > that outside of regsiter_cdrom()?
> >
> > If not.. how do I tell the kernel data structures that my driver's major
> > number does in fact point to a cdrom driver. Basically, I want my
> > driver's major number to show up in /proc/devices..
> >
> > This might be a stupid question, but I am not a linux kernel expert...
>
> Neither am I, therefore I hope you get a reply from someone else
> refuting or acknowledging my claims.
>
>
> I looks to me that the code that does the actual registration of the
> driver is in drivers/ide/ide-cd.c NOT cdrom.c. Specifically
> ide_cdrom_attach(). Said function eventually calls the register_cdrom()
> you ask about.
>
> For writing a cdrom emulator You may want to look more closely at the
> non-IDE/SCSI devices as they seem to register their driver data
> themselves I had a quick read of aztcd.c, I think between cdrom.c and
> aztcd.c you should be able to piece together what you want.
>
> Also Try reading http://www.xml.com/ldd/chapter/book/ for details on 2.4
> drivers
>

This is actually very good advice. I need to look at sample code to more
quickly bring myself up to speed on the kernel API. Having a good example
in aztcd.c would probably do it. Thanks! (I have yet to read the code,
but I just wanted to thank you for replying).

-Calin

2004-04-06 18:46:03

by Calin A. Culianu

[permalink] [raw]
Subject: Re: Stupid question re: register_cdrom()

On Tue, 6 Apr 2004, Tony Breeds wrote:

> On Mon, Apr 05, 2004 at 04:53:16PM -0400, Calin A. Culianu wrote:
> >
> > Let's say I was coding a cdrom emulator in software for kernel 2.4. I
> > am unclear about register_cdrom(). Does register_cdrom() in
> > cdrom.c take care of telling the kernel that my kdev_t major/minor
> > combination in fact leads to a real driver? Or do I need to take care of
> > that outside of regsiter_cdrom()?
> >
> > If not.. how do I tell the kernel data structures that my driver's major
> > number does in fact point to a cdrom driver. Basically, I want my
> > driver's major number to show up in /proc/devices..
> >
> > This might be a stupid question, but I am not a linux kernel expert...
>
> Neither am I, therefore I hope you get a reply from someone else
> refuting or acknowledging my claims.
>
>
> I looks to me that the code that does the actual registration of the
> driver is in drivers/ide/ide-cd.c NOT cdrom.c. Specifically
> ide_cdrom_attach(). Said function eventually calls the register_cdrom()
> you ask about.
>
> For writing a cdrom emulator You may want to look more closely at the
> non-IDE/SCSI devices as they seem to register their driver data
> themselves I had a quick read of aztcd.c, I think between cdrom.c and
> aztcd.c you should be able to piece together what you want.
>
> Also Try reading http://www.xml.com/ldd/chapter/book/ for details on 2.4
> drivers

FYI --

It turns out that you need to either call devfs_register_blkdev, or plain
old register_blkdev in the non-devfs codepath. :)


Thanks a ton for giving me the advice to read other drivers. That's what
did it! :)

-Calin