+
Yesterday, I wrote about the
+modalias
+values provided by the Linux kernel following my hope for
+better
+dongle support in Debian. Using this knowledge, I have tested how
+modalias values attached to package names can be used to map packages
+to hardware. This allow the system to look up and suggest relevant
+packages when I plug in some new hardware into my machine, and replace
+discover and discover-data as the database used to map hardware to
+packages.
+
+
I create a modaliases file with entries like the following,
+containing package name, kernel module name (if relevant, otherwise
+the package name) and globs matching the relevant hardware
+modalias.
+
+
+Package: package-name
+
Modaliases: module(modaliasglob, modaliasglob, modaliasglob)
+
+
+
It is fairly trivial to write code to find the relevant packages
+for a given modalias value using this file.
+
+
An entry like this would suggest the video and picture application
+cheese for many USB web cameras (interface bus class 0E01):
+
+
+Package: cheese
+
Modaliases: cheese(usb:v*p*d*dc*dsc*dp*ic0Eisc01ip*)
+
+
+
An entry like this would suggest the pcmciautils package when a
+CardBus bridge (bus class 0607) PCI device is present:
+
+
+Package: pcmciautils
+
Modaliases: pcmciautils(pci:v*d*sv*sd*bc06sc07i*)
+
+
+
An entry like this would suggest the package colorhug-client when
+plugging in a ColorHug with USB IDs 04D8:F8DA:
+
+
+Package: colorhug-client
+
Modaliases: colorhug-client(usb:v04D8pF8DAd*)
+
+
+
I believe the format is compatible with the format of the Packages
+file in the Debian archive. Ubuntu already uses their Packages file
+to store their mappings from packages to hardware.
+
+
By adding a XB-Modaliases: header in debian/control, any .deb can
+announce the hardware it support in a way my prototype understand.
+This allow those publishing packages in an APT source outside the
+Debian archive as well as those backporting packages to make sure the
+hardware mapping are included in the package meta information. I've
+tested such header in the pymissile package, and its modalias mapping
+is working as it should with my prototype. It even made it to Ubuntu
+Raring.
+
+
To test if it was possible to look up supported hardware using only
+the shell tools available in the Debian installer, I wrote a shell
+implementation of the lookup code. The idea is to create files for
+each modalias and let the shell do the matching. Please check out and
+try the
+hw-support-lookup
+shell script. It run without any extra dependencies and fetch the
+hardware mappings from the Debian archive and the subversion
+repository where I currently work on my prototype.
+
+
When I use it on a machine with a yubikey inserted, it suggest to
+install yubikey-personalization:
+
+
+% ./hw-support-lookup
+
yubikey-personalization
+
%
+
+
+
When I run it on my Thinkpad X40 with a PCMCIA/CardBus slot, it
+propose to install the pcmciautils package:
+
+
+% ./hw-support-lookup
+
pcmciautils
+
%
+
+
+
If you know of any hardware-package mapping that should be added to
+my
+database, please tell me about it.
+
+
It could be possible to generate several of the mappings between
+packages and hardware. One source would be to look at packages with
+kernel modules, ie packages with *.ko files in /lib/modules/, and
+extract their modalias information. Another would be to look at
+packages with udev rules, ie packages with files in
+/lib/udev/rules.d/, and extract their vendor/model information to
+generate a modalias matching rule. I have not tested any of these to
+see if it work.
+
+
If you want to help implementing a system to let us propose what
+packages to install when new hardware is plugged into a Debian
+machine, please send me an email or talk to me on
+#debian-devel.
+
+