It seems to me that in fact there are two questions that really do not have much to do with each other.
First, "what does Linux require device drivers?" This will almost always be answered by reading the documentation. Although the device driver documentation may (possibly) be slightly less complete, complete, easy to read, etc., than documents for writing regular programs, it is still pretty decent. Probably the biggest difference from regular code is debugging, which is most often done by simply printing with printk .
Another question: "How do you determine which protocol (or" protocols ") are used by certain equipment, such as an SNES controller. When you design something like a regular hard drive or keyboard, you can pretty much just follow the documentation. You can (often (at least in my experience) to find that you need to compensate for some errors in the hardware, but besides this (again) pretty normal programming.Some of these cases just decide how you want to present the con the retrieval device in question to the rest of the system.For something like a hard drive, which is usually quite simple, but for something like an interface device for a person, it can be a little more complicated (for example, do you want to introduce it as it is, or do you want to emulate any existing type of device, such as a keyboard or mouse?)
For hardware that is not really documented, things can get a little more complicated. Of course, a universal tool for searching for logical signals is a logical analyzer. If you have something that uses a well-known hardware interface (e.g. PS / 2 keyboard / mouse, USB, SATA), you can find more specialized tools (and / or add-ins for the logic analyzer) that make life quite a bit easier. . Something like an NES controller or SNES will almost certainly use a proprietary interface, so for them you are likely to end up using a logic analyzer. Fortunately, they can also be a rather narrow, slow interface, so the logic analyzer does not have to be very fast or support a huge number of channels.
Using a logic analyzer, you can see all the individual signals, but for a proprietary interface, you still need to figure out which signals do what. In a typical case, you will have at least a few that are fairly obvious: power, land, quite possibly, hours, etc. In quite a few cases, you quickly find that even if it is not publicly documented, it can follow a well-known protocol, such as I 2 C, SPI, etc.