[Buildroot] device_table question

Thomas De Schampheleire patrickdepinguin+buildroot at gmail.com
Mon Feb 21 19:54:57 UTC 2011


Hi Andy,

On Mon, Feb 21, 2011 at 5:34 PM, ANDY KENNEDY <ANDY.KENNEDY at adtran.com> wrote:
>>
>> I tried your scenario with the following device table line:
>>
>> /dev/mybetterdev         c       640     0       0       230     0
>>   1       1       10
>>
>> which resulted in:
>>
>> crw-r----- 1 root root 230, 0 2011-02-20 10:42 /mnt/dev/mybetterdev1
>> crw-r----- 1 root root 230, 1 2011-02-20 10:42 /mnt/dev/mybetterdev2
>> crw-r----- 1 root root 230, 2 2011-02-20 10:42 /mnt/dev/mybetterdev3
>> crw-r----- 1 root root 230, 3 2011-02-20 10:42 /mnt/dev/mybetterdev4
>> crw-r----- 1 root root 230, 4 2011-02-20 10:42 /mnt/dev/mybetterdev5
>> crw-r----- 1 root root 230, 5 2011-02-20 10:42 /mnt/dev/mybetterdev6
>> crw-r----- 1 root root 230, 6 2011-02-20 10:42 /mnt/dev/mybetterdev7
>> crw-r----- 1 root root 230, 7 2011-02-20 10:42 /mnt/dev/mybetterdev8
>> crw-r----- 1 root root 230, 8 2011-02-20 10:42 /mnt/dev/mybetterdev9
>>
>> This is what you wanted, right?
>
> Crap, I feel into the same trap:
>
> /dev/mydev   c  666   0   0   254    1   1   1   24
>
> gives the following (and I didn't see that until just now):
>
> crw-rw-rw-    1 root     root      254,   1 Feb 18  2011 /dev/mydev1
> crw-rw-rw-    1 root     root      254,  10 Feb 18  2011 /dev/mydev10
> crw-rw-rw-    1 root     root      254,  11 Feb 18  2011 /dev/mydev11
> crw-rw-rw-    1 root     root      254,  12 Feb 18  2011 /dev/mydev12
> crw-rw-rw-    1 root     root      254,  13 Feb 18  2011 /dev/mydev13
> crw-rw-rw-    1 root     root      254,  14 Feb 18  2011 /dev/mydev14
> crw-rw-rw-    1 root     root      254,  15 Feb 18  2011 /dev/mydev15
> crw-rw-rw-    1 root     root      254,  16 Feb 18  2011 /dev/mydev16
> crw-rw-rw-    1 root     root      254,  17 Feb 18  2011 /dev/mydev17
> crw-rw-rw-    1 root     root      254,  18 Feb 18  2011 /dev/mydev18
> crw-rw-rw-    1 root     root      254,  19 Feb 18  2011 /dev/mydev19
> crw-rw-rw-    1 root     root      254,   2 Feb 18  2011 /dev/mydev2
> crw-rw-rw-    1 root     root      254,  20 Feb 18  2011 /dev/mydev20
> crw-rw-rw-    1 root     root      254,  21 Feb 18  2011 /dev/mydev21
> crw-rw-rw-    1 root     root      254,  22 Feb 18  2011 /dev/mydev22
> crw-rw-rw-    1 root     root      254,  23 Feb 18  2011 /dev/mydev23
> crw-rw-rw-    1 root     root      254,   3 Feb 18  2011 /dev/mydev3
> crw-rw-rw-    1 root     root      254,   4 Feb 18  2011 /dev/mydev4
> crw-rw-rw-    1 root     root      254,   5 Feb 18  2011 /dev/mydev5
> crw-rw-rw-    1 root     root      254,   6 Feb 18  2011 /dev/mydev6
> crw-rw-rw-    1 root     root      254,   7 Feb 18  2011 /dev/mydev7
> crw-rw-rw-    1 root     root      254,   8 Feb 18  2011 /dev/mydev8
> crw-rw-rw-    1 root     root      254,   9 Feb 18  2011 /dev/mydev9
>
> and my device minor numbers were wrong.  This was the fix:
>
> /dev/mydev   c  666  0 0 254 0 1 1 25
>
> Though, I would love for someone to answer the question of "why do
> I have to request 25 device nodes to get 24?"

A quick look at the code reveals why:
http://git.buildroot.net/buildroot/tree/target/makedevs/makedevs.c?h=2010.11&id=eb0ee4509d3112d80cbb210b44fb682ba7033385#n459

for (i = start; i < count; i++) {
	sprintf(full_name_inc, "%s%d", full_name, i);
	rdev = (major << 8) + minor + (i * increment - start);
	if (mknod(full_name_inc, mode, rdev) == -1) {
		...
	}
	...
}

where start, increment and count are the three last numbers in the
device table file.
So, 'count' is not coded as a count, but rather as a maximum value - 1.

I'm not sure what the best solution would be: either to keep the code
and fix the documentation, or to fix the code based on the
documentation.

Changing 'i < count' to 'i < start + count' should fix the code.

Best regards,
Thomas



More information about the buildroot mailing list