On Tue, Nov 4, 2008 at 19:39, Nathaniel McCallumIn this current patch, an error is returned. Like I said, this is more proof of concept than anything. I'm trying to ask a running kernel "What hardware do you at least pretend to support?" While I would love to get only the drivers that would actually bind to the device, I don't suspect this is possible since you'd need real or emulated hardware to test this. One of my explicit design requirements is that the hardware ids don't represent "real" hardware. The hardware might exist in real life, but I don't have it (and I can't emulate it). I just want to know what Linux would try to do with the hardware *if* I had it. Thus, I don't really care about the logic in the match() function since it would require real hardware.
<nathaniel@xxxxxxxxxxxxxxxx> wrote:
Please CC me to responses as I'm not subscribed to LKML. Also, this is my
first kernel patch, advise is certainly welcome.
For something I'm working on I have the need to answer the question, "given
a hardware ID, does Linux distro X have a driver to support this hardware?"
and more specifically, "which drivers support this hardware?" I can,
generally speaking, get this data from files like
/lib/modules/*/modules.alias. However, this does not work for drivers built
into the kernel. With that in mind, I've cooked up a little proof of
concept. Basically, its a sysfs file
/sys/modules/$module/drivers/$driver/modalias that, when read, contains
modalias-style filters for this driver.
The attached patch only does this for PCI drivers, each subsystem would need
a patch like this. Is this idea crazy? Is there a better implementation?
Hmm, what if that gets larger than 4k? It seems not really like
something for sysfs. There are also drivers which export a modalias
which matches more devices, than the device it actually would accept
to bind to. Some driver have logic in the match() function to exclude
stuff.
What's the exact information you need? Would it be sufficient to askI want to create a database of this information that exists outside the Linux kernel. This database should contain a map of filters to drivers such that, given any hardware id (real or otherwise), I should be able to determine which kernel drivers would attempt to "do something" with this hardware.
a bus with a modalias string, which driver of that bus matched that
device?