2002-04-02 15:42:35

by Michael Zhu

[permalink] [raw]
Subject: Get major number in Makefile

Hi, smart gurus, I have a question while writing a
Makefile file to install my device driver. In my
device driver I dynamically allocate the major number
of my device. In my Makefile I want to build a device
node for my device under the /dev directory.

mknod /dev/mydevice c $major 0;

So I need to know the major number of my deivce in the
Makefile. I've read the Linux 'Device Driver'. There
is some information about this. I use the following
command to get the major number in my Makefile.

major=`awk "\\$2==\"$mymodule\" {printf \\$1}"
/proc/devices`

But when I use the 'make install' command to install
my driver, the following error returned.

major=`awk "\\==\"$ymodule\" {printf \\}"
/proc/devices`
awk: 0: unexpected character '\'
awk: line 1: syntax error at or near ==
make: *** [install] Error 2

What is wrong with my command? Can anyone tell me how
to get the major number in Makefile.

Thank you very much.


______________________________________________________________________
Find, Connect, Date! http://personals.yahoo.ca


2002-04-02 15:55:49

by Richard B. Johnson

[permalink] [raw]
Subject: Re: Get major number in Makefile

On Tue, 2 Apr 2002, Michael Zhu wrote:

> Hi, smart gurus, I have a question while writing a
> Makefile file to install my device driver. In my
> device driver I dynamically allocate the major number
> of my device. In my Makefile I want to build a device
> node for my device under the /dev directory.
>
> mknod /dev/mydevice c $major 0;
>
> So I need to know the major number of my deivce in the
> Makefile. I've read the Linux 'Device Driver'. There
> is some information about this. I use the following
> command to get the major number in my Makefile.
>
> major=`awk "\\$2==\"$mymodule\" {printf \\$1}"
> /proc/devices`
>
> But when I use the 'make install' command to install
> my driver, the following error returned.
>
> major=`awk "\\==\"$ymodule\" {printf \\}"
> /proc/devices`
> awk: 0: unexpected character '\'
> awk: line 1: syntax error at or near ==
> make: *** [install] Error 2
>
> What is wrong with my command? Can anyone tell me how
> to get the major number in Makefile.
>
> Thank you very much.

`make` will interpret '$', you need $$ in the Makefile.
Also, you may not want to 'acquire' major numbers this way. Your
module may work only on the machine that built it.

Cheers,
Dick Johnson

Penguin : Linux version 2.4.18 on an i686 machine (797.90 BogoMips).

Windows-2000/Professional isn't.

2002-04-02 18:30:37

by Jesse Pollard

[permalink] [raw]
Subject: Re: Get major number in Makefile

Michael Zhu <[email protected]>:
>
> Hi, smart gurus, I have a question while writing a
> Makefile file to install my device driver. In my
> device driver I dynamically allocate the major number
> of my device. In my Makefile I want to build a device
> node for my device under the /dev directory.
>
> mknod /dev/mydevice c $major 0;
>
> So I need to know the major number of my deivce in the
> Makefile. I've read the Linux 'Device Driver'. There
> is some information about this. I use the following
> command to get the major number in my Makefile.
>
> major=`awk "\\$2==\"$mymodule\" {printf \\$1}"
> /proc/devices`
>
> But when I use the 'make install' command to install
> my driver, the following error returned.
>
> major=`awk "\\==\"$ymodule\" {printf \\}"
> /proc/devices`
> awk: 0: unexpected character '\'
> awk: line 1: syntax error at or near ==
> make: *** [install] Error 2
>
> What is wrong with my command? Can anyone tell me how
> to get the major number in Makefile.

1. you want $(mymodule) instead of $mymodule
2. instead of \\$ you want $$
3. you need to use the @ construct.

vcs was the module I looked for.

Don't put quotes around it... that has make passing the quotes too.

End result is something like the following:

mymodule=vcs

target:
@major=`awk '$$2 == "$(mymodule)" {print $$1}' /proc/devices`
@echo $$major

Whether or not you really want to do this is something else.

-------------------------------------------------------------------------
Jesse I Pollard, II
Email: [email protected]

Any opinions expressed are solely my own.