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>