I know that my machine hardware name is i686 and processor type is i686 due to my Linux output. But I have no idea why they are the same. I want to know what's the difference between machine hardware name and processor type.
Linux – what’s the difference between machine hardware name and processor type
linux-kernel
Related Solutions
Though it was down voted ... possibly because someone thought it was not answering the question ... I think @Rony's answer is a good start at explaining what the boot
flag is about. (I was actually planning to begin my answer with an example similar to the one he provided.)
I was all set to ramble off an answer about how the boot
flag is, at this point in time, an often ignored (as @Rony's example shows) historical remnant from a period when hard drives were smaller and bootloaders were much less sophisticated.
But then I discovered this had already been said in this answer to this question: What is the "Bootable flag" option when installing a distro?
What's more there was also a link to a short article about the Boot flag which says
- "Its primary function is to indicate to a MS-DOS/MS Windows-type boot loader which partition to boot. In some cases it is used by Windows XP/2000 to assign the active partition the letter "C:"."
Well, this is embarrassing ...
When I claimed that the boot
flag was a "historical remnant" I was assuming this was the case because clearly GRUB had no need to use it. Surely Microsoft would also have "moved on".
The well known quote usually attributed to Oscar Wilde turned out to be too true in this instance.
It appears that the MBR and PBR (Partition Boot Record) loaders used by the Windows operating systems DO expect the boot
flag to be set correctly.
To test this I cleared the boot flag from all the partitions of a Windows 8 VM. (See below. If you're curious, here's a link to the pastebin of the complete BootInfo Script result)
Drive: sda
Disk /dev/sda: 26.8 GB, 26843545600 bytes
255 heads, 63 sectors/track, 3263 cylinders, total 52428800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
Partition Boot Start Sector End Sector # of Sectors Id System
/dev/sda1 2,048 718,847 716,800 7 NTFS / exFAT / HPFS
/dev/sda2 718,848 52,426,751 51,707,904 7 NTFS / exFAT / HPFS
When I cleared the flag from both partitions, I got the error message FATAL: INT18: BOOT FAILURE
when I attempted to boot. (I am not sure if that is from the Windows MBR bootloader or the VM's equivalent of a BIOS.)
Just to see what would happen, I also set the boot
flag on the "wrong" partition, /dev/sda2
instead of /dev/sda1
. Doing that resulted in the window shown in the image below.
<sigh/>
This experience makes me wonder if Microsoft is still using the same MBR boot sector loader which they used for MS-DOS and Windows 3.0/3.1?
They're identical, at least on Linux.
I came to this conclusion by first looking at the source code for mknod(1)
in the GNU coreutils, where on line 217 in the current version we find that the 'c'
and 'u'
cases are treated identically, getting the same device type. The S_IFCHR
value is defined in the Linux kernel headers, but the value is not important. All that matters is that the same value gets stored in the filesystem's dev node.
I clinched the issue with a simple test:
$ sudo mknod /dev/null2 u 1 3
$ ls -l /dev/null*
crw-rw-rw- 1 root root 1, 3 Jan 12 2015 /dev/null
crw-r--r-- 1 root root 1, 3 Oct 19 22:56 /dev/null2
A u
in the command gives the same dev node as c
. Case closed.
As to why both characters are allowed, my best guess is that it's just an alias for those who think of b
as meaning "buffered" rather than "block," so that you need u
as its opposite, meaning "unbuffered," rather than c
for "character."
I originally thought that this feature of GNU mknod
might have been for compatibility with some pre-Linux flavor of Unix, since mknod
in GNU Fileutils predates Linux itself,¹ and this feature of GNU mknod
goes clear back to the very first version-controlled checkin of mknod.c
, but I have yet to find documentation for any Unix that will accept u
as an argument to mknod(1)
, so that hypothesis doesn't hold water.²
Asides:
A
mknod
utility was added to GNU Fileutils in July 1991. The first version of the Linux kernel wasn't posted to Usenet until September 1991. That tells us that the first version of GNUmknod
must have supported non-Linux OSes from the start.I've checked the online man pages for Solaris, HP-UX, AIX, FreeBSD, SCO OpenServer, SCO UnixWare, Minix 2, Ultrix, 2.11BSD, and OS X.
You will find
mknod u
documented for other OSes — such as Minix 3 — but only because they're also using the GNU Coreutils implementation ofmknod(1)
. Another oddity is modern Solaris, which ships both AT&Tmknod
and GNUmknod
, documented separately in manual sections 1m (linked above) and in section 1g, respectively.
Best Answer
This is explained more clearly in
info uname
:So, the hardware name is the CPU architecture, while the processor type is the name of the instruction set used. To quote from wikipedia: