I am trying to learn about how the kernel is identifying, configuring, and operating the hardware on the beaglebone (using GPIO here as an example) and what exactly each piece in the /sys path for gpio files represents.
My current understanding is that the AM3358’s pin interface are each hardcoded to go directly to the corresponding hardware controllers, and that the drivers in the kernel have in them hardcoded information for being matched to those hardware components based off of unique identifiers.
e.g. the gpio-omap module has name “omap_gpio” and an of_device_id struct with information that will be matched at boot to some identifier that the hardware itself communicates to the kernel.
I am reasoning that it is the gpio-omap module because:
/sys/devices/platform/ocp/44e07000.gpio$ ls driver
lrwxrwxrwx 1 root gpio 0 Apr 21 15:17 driver → …/…/…/…/bus/platform/drivers/omap_gpio
However, the omap-gpio driver registers itself as a platform_driver. So where does the “ocp” filepath segment come from?
Also, does “platform” actually represent a physical bus or is just a catch-all for things that are connected directly to CPU pins that do not go through a conventional bus (like pci)?
And my last question is, how can I find where the sysfs nodes are created (as in which kernel module) for the files that the /sys/class/gpio/gpioXX links are pointing to?
/sys/class/gpio$ ls -lA gpio10
lrwxrwxrwx 1 root gpio 0 Apr 21 15:17 gpio10 → …/…/devices/platform/ocp/44e07000.gpio/gpiochip0/gpio/gpio10