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

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

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
>>>=20
>>> 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.
>>>=20
>>> The ls manpage says these numbers should be displayed in the size =
field.
>>> However, I'm seeing only one hex value, e.g.:
>>>=20
>>> $ ls -l /dev/null
>>> crw-rw-rw-  1 root  wheel  0x13 Oct 25 12:22 /dev/null
>>>=20
>>> So I don't know what major and minor values to feed mknod. Or is =
there
>>> another way to do this?
>>=20
>> 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):
>>=20
>> % /bin/ls -laFG /dev/null=20
>> crw-rw-rw-  1 root  wheel    0,  17 Oct 25 21:33 /dev/null
>>                             ^   ^^
>>=20
>> This is the binary /bin/ls, no "shell builtin" or the like,
>> called from the C shell; OS is FreeBSD 8, x86.
>=20
> Even with /bin/ls, the system still returns the hex code:
>=20
> # /bin/ls -laFG /dev/null
> crw-rw-rw-  1 root  wheel  0x13 Oct 25 13:22 /dev/null
>=20
> 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.
>=20

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];
               =20
        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));
                       =20
        (void)printf("%*s ", (u_int)width, buf);
}
                       =20


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.

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.






Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?025FA68F-57BF-4B6E-8898-5BD3EAF96372>