[Sugar-devel] [PATCH sugar] Control Panel: making about my computer section hardware independent, OLPC #11232
Sascha Silbe
sascha-ml-reply-to-2011-4 at silbe.org
Sun Oct 9 14:55:27 EDT 2011
Excerpts from Simon Schampijer's message of 2011-10-09 18:01:35 +0200:
> The serial number is often only readable by root on non-XO
> hardware, that is why we do not read it. If the serial number
> can not be found on an XO we display the entry as 'Not available'.
[...]
> -def get_firmware_number():
> - firmware_no = None
> - if os.path.exists(os.path.join(_OFW_TREE, _MODEL)):
> - firmware_no = _read_file(os.path.join(_OFW_TREE, _MODEL))
> - elif os.path.exists(os.path.join(_PROC_TREE, _MODEL)):
> - firmware_no = _read_file(os.path.join(_PROC_TREE, _MODEL))
> +def _parse_olpc_firmware_number(firmware_no):
> if firmware_no is None:
> firmware_no = _not_available
> else:
> @@ -111,6 +107,21 @@ def get_firmware_number():
> return firmware_no
>
>
> +def get_firmware_number():
> + firmware_no = None
> + if os.path.exists(os.path.join(_OFW_TREE, _MODEL)):
> + firmware_no = _read_file(os.path.join(_OFW_TREE, _MODEL))
> + firmware_no = _parse_olpc_firmware_number(firmware_no)
> + elif os.path.exists(os.path.join(_PROC_TREE, _MODEL)):
> + firmware_no = _read_file(os.path.join(_PROC_TREE, _MODEL))
> + firmware_no = _parse_olpc_firmware_number(firmware_no)
> + elif os.path.exists(os.path.join(_DMI_DIRECTORY, 'bios_version')):
> + firmware_no = _read_file(os.path.join(_DMI_DIRECTORY, 'bios_version'))
> + if firmware_no is None:
> + firmware_no = _not_available
> + return firmware_no
[...]
There still seems to be some confusion over what is available on
various systems (esp. "non-XOs"), so here are a few real-life examples:
== Apple eMac (powerpc) ==
{{{
sascha.silbe at emac:~$ uname -r
2.6.32-5-powerpc
sascha.silbe at emac:~$ tr '\0' '\n' < /proc/device-tree/model
PowerMac4,4
sascha.silbe at emac:~$ tr '\0' '\n' < /proc/device-tree/openprom/model
OpenFirmware 3
sascha.silbe at emac:~$ tr '\0' '\n' < /proc/device-tree/banner-name
-bash: /proc/device-tree/banner-name: No such file or directory
sascha.silbe at emac:~$ tr '\0' '\n' < /proc/device-tree/compatible
PowerMac4,4
MacRISC2
MacRISC
Power Macintosh
sascha.silbe at emac:~$ tr '\0' '\n' < /proc/device-tree/serial-number |sed -e 's/[A-Za-z]/A/g' -e 's/[0-9]/0/g' |grep -v '^$'
A0A
AAA0000A0
sascha.silbe at emac:~$ ls /sys/class/dmi/id
ls: cannot access /sys/class/dmi/id: No such file or directory
sascha.silbe at emac:~$ cat /proc/cpuinfo
processor : 0
cpu : 7455, altivec supported
clock : 999.999997MHz
revision : 3.3 (pvr 8001 0303)
bogomips : 66.57
timebase : 33289815
platform : PowerMac
model : PowerMac4,4
machine : PowerMac4,4
motherboard : PowerMac4,4 MacRISC2 MacRISC Power Macintosh
detected as : 80 (eMac)
pmac flags : 00000010
L2 cache : 256K unified
pmac-generation : NewWorld
Memory : 640 MB
}}}
== OpenRD Ultimate (armel) ==
{{{
sascha.silbe at flatty:~$ uname -r
2.6.32-5-kirkwood
sascha.silbe at flatty:~$ ls /proc/device-tree
ls: cannot access /proc/device-tree: No such file or directory
sascha.silbe at flatty:~$ ls /sys/class/dmi/id
ls: cannot access /sys/class/dmi/id: No such file or directory
sascha.silbe at flatty:~$ cat /proc/cpuinfo
Processor : Feroceon 88FR131 rev 1 (v5l)
BogoMIPS : 1199.30
Features : swp half thumb fastmult edsp
CPU implementer : 0x56
CPU architecture: 5TE
CPU variant : 0x2
CPU part : 0x131
CPU revision : 1
Hardware : Marvell OpenRD Ultimate Board
Revision : 0000
Serial : 0000000000000000
}}}
== Athlon64 based PC (amd64) ==
{{{
sascha.silbe at twin:~$ uname -r
2.6.32-5-amd64
sascha.silbe at twin:~$ ls /proc/device-tree
ls: cannot access /proc/device-tree: No such file or directory
sascha.silbe at twin:~$ cat /sys/class/dmi/id/product_name
GA-MA78G-DS3H
sascha.silbe at twin:~$ cat /sys/class/dmi/id/product_version
sascha.silbe at twin:~$ cat /sys/class/dmi/id/bios_vendor
Award Software International, Inc.
sascha.silbe at twin:~$ cat /sys/class/dmi/id/bios_version
F3
}}}
== XO-1.5 (i386) ==
{{{
sascha.silbe at xo15-sascha:~$ uname -r
2.6.35.13-xo1.5-2-00905-g483bf23
sascha.silbe at xo15-sascha:~$ ls /proc/device-tree
ls: cannot access /proc/device-tree: No such file or directory
sascha.silbe at xo15-sascha:~$ tr '\0' '\n' < /ofw/model
D4
sascha.silbe at xo15-sascha:~$ tr '\0' '\n' < /ofw/compatible
-bash: /ofw/compatible: No such file or directory
sascha.silbe at xo15-sascha:~$ tr '\0' '\n' < /ofw/openprom/model
CL1 Q3A64 Q3A
sascha.silbe at xo15-sascha:~$ cat /sys/class/dmi/id/product_name
XO
sascha.silbe at xo15-sascha:~$ cat /sys/class/dmi/id/product_version
1.5
sascha.silbe at xo15-sascha:~$ cat /sys/class/dmi/id/bios_vendor
IE8y2D ScD%g4r2bAIFA.
sascha.silbe at xo15-sascha:~$ cat /sys/class/dmi/id/bios_version
OLPC Ver 1.00.15
}}}
== XO-1.75 (armel) ==
{{{
sascha.silbe at mimosa:~$ uname -r
3.0.0-mimosa-1-00159-g1abf0b6
sascha.silbe at mimosa:~$ tr '\0' '\n' < /proc/device-tree/model
1B1
sascha.silbe at mimosa:~$ tr '\0' '\n' < /proc/device-tree/compatible
olpc,xo-1.75
sascha.silbe at mimosa:~$ tr '\0' '\n' < /proc/device-tree/openprom/model
CL2 Q4B11 Q4B
sascha.silbe at mimosa:~$ tr '\0' '\n' < /proc/device-tree/banner-name
OLPC 1B1
sascha.silbe at mimosa:~$ tr '\0' '\n' < /proc/device-tree/serial-number |sed -e 's/[A-Za-z]/A/g' -e 's/[0-9]/0/g'
AAA0000000A
sascha.silbe at mimosa:~$ ls /sys/class/dmi/id
ls: cannot access /sys/class/dmi/id: No such file or directory
sascha.silbe at mimosa:~$ cat /proc/cpuinfo
Processor : ARMv7 Processor rev 5 (v7l)
BogoMIPS : 795.44
Features : swp half thumb fastmult vfp edsp iwmmxt thumbee vfpv3
vfpv3d16
CPU implementer : 0x56
CPU architecture: 7
CPU variant : 0x0
CPU part : 0x581
CPU revision : 5
Hardware : OLPC XO-1.75
Revision : 0000
Serial : 0000000000000000
}}}
All of the above are running Debian Squeeze, except for the XO-1.75
which is running Debian Wheezy. The XOs are running custom kernels
(based on OLPC git), all others stock Debian kernels.
Based on the limited sample given above, I can say:
1. On systems with device tree support, the information from device tree
is more useful than what's available via DMI (if anything).
2. There's no standard format for the openprom/model and serial-number
entries.
3. For the serial-number entry we can come up with a simple transformation
that can handle both formats given above: replace \0 with ' ' and
trim spaces.
4. For openprom/model OTOH we might want to special-case XOs as they
contain more than just the firmware version in that entry.
Your patch is almost fine - it should just make clear that what we get
from .../openprom/model is not always an OLPC style firmware version and
make sure not to choke on other formats. E.g.:
def _parse_firmware_number(firmware_no):
if firmware_no is None:
return _not_available
firmware_no = firmware_no.replace('\0', ' ').strip()
# try to extract Open Firmware version from OLPC style version
# string, e.g. "CL2 Q4B11 Q4B"
if len(firmware_no) != 16:
return firmware_no
fields = re.split(' +', firmware_no)
if len(fields) != 3 or not fields[1].startswith(fields[2]):
return firmware_no
return fields[1]
The patch description should also be updated to acknowledge the fact
that "systems with device tree" and "XOs" are overlapping, but not
identical sets - see my previous mail.
As for the serial number:
def _parse_serial_number(serial_no):
return ' '.join(serial_no.replace('\0', ' ').split())
Sascha
--
http://sascha.silbe.org/
http://www.infra-silbe.de/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 490 bytes
Desc: not available
URL: <http://lists.sugarlabs.org/archive/sugar-devel/attachments/20111009/e96201b6/attachment.pgp>
More information about the Sugar-devel
mailing list