Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 25 Oct 2013 15:31:20 -0700
From:      David Newman <dnewman@networktest.com>
To:        freebsd-questions@freebsd.org
Subject:   Re: viewing major and minor device numbers
Message-ID:  <526AF138.9000200@networktest.com>
In-Reply-To: <025FA68F-57BF-4B6E-8898-5BD3EAF96372@lafn.org>
References:  <526AC5E7.3080900@networktest.com> <20131025213456.13153587.freebsd@edvax.de> <526AD757.7010704@networktest.com> <025FA68F-57BF-4B6E-8898-5BD3EAF96372@lafn.org>

next in thread | previous in thread | raw e-mail | index | archive | help


On 10/25/13 3:24 PM, Doug Hardie wrote:
> 
> On 25 October 2013, at 13:40, David Newman <dnewman@networktest.com> wrote:
> 
>> On 10/25/13 12:34 PM, Polytropon wrote:
>>> On Fri, 25 Oct 2013 12:26:31 -0700, David Newman wrote:
>>>> FreeBSD 9.2-RELEASE, amd64
>>>>
>>>> To create some character special devices in a chroot environment, I've
>>>> previously used mknod, but now can't find the major and minor device
>>>> numbers.
>>>>
>>>> The ls manpage says these numbers should be displayed in the size field.
>>>> However, I'm seeing only one hex value, e.g.:
>>>>
>>>> $ ls -l /dev/null
>>>> crw-rw-rw-  1 root  wheel  0x13 Oct 25 12:22 /dev/null
>>>>
>>>> So I don't know what major and minor values to feed mknod. Or is there
>>>> another way to do this?
>>>
>>> Do you have any "suspicious" ls alias or options preconfigured?
>>> That output looks a bit strange, it should be something like
>>> this (example from a host system, not from inside a jail):
>>>
>>> % /bin/ls -laFG /dev/null 
>>> crw-rw-rw-  1 root  wheel    0,  17 Oct 25 21:33 /dev/null
>>>                             ^   ^^
>>>
>>> This is the binary /bin/ls, no "shell builtin" or the like,
>>> called from the C shell; OS is FreeBSD 8, x86.
>>
>> Even with /bin/ls, the system still returns the hex code:
>>
>> # /bin/ls -laFG /dev/null
>> crw-rw-rw-  1 root  wheel  0x13 Oct 25 13:22 /dev/null
>>
>> Two machines, both running 9.2/amd64, both return these hex codes. One
>> machine runs on bare metal and the other is a VM I just built. Both
>> machines have no aliases for ls.
>>
> 
> The ls source module print.c has been changed in the printdev module to print differently:
> 
> Here is the module from 8.x (I don't recall which exact version this is)
> 
> printdev(size_t width, dev_t dev)
> {
>         char buf[DEVSTR_HEX_LEN + 1];
>                 
>         if (minor(dev) > 255 || minor(dev) < 0)
>                 (void)snprintf(buf, sizeof(buf), "%3d, 0x%08x",
>                     major(dev), (u_int)minor(dev));
>         else
>                 (void)snprintf(buf, sizeof(buf), "%3d, %3d",
>                     major(dev), minor(dev));
>                         
>         (void)printf("%*s ", (u_int)width, buf);
> }
>                         
> 
> 
> Note that it splits the dev number into the two fields we are all used to.
> 
> Now here is the same code from 9.2 Release:
> 
> printdev(size_t width, dev_t dev)
> {
> 
>         (void)printf("%#*jx ", (u_int)width, (uintmax_t)dev);
> }
> 
> 
> 
> Note its a lot simpler because it does not bother to split out the major and minor numbers.

Ahhh, got it. Many thanks.

In this case I'm OK going with devfs, but thanks for clearing up why the
output is different in 9.x.

I suppose one could say this "breaks" mknod, or at least makes it much
harder to use. But since the same thing is available from devfs, and it
doesn't require messing with device numbers, I guess it's OK.

Thanks again

dn


> 
> You might be able to replace just this module and rebuild ls.  major and minor are still in the libs.  It looks like it should work, but I haven't tried it.
> 
> 
> 
> _______________________________________________
> freebsd-questions@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to "freebsd-questions-unsubscribe@freebsd.org"
> 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?526AF138.9000200>