| Summary: | Platform drivers autoloading from info in device tree does not work | ||
|---|---|---|---|
| Product: | buildroot | Reporter: | Artem Synytsyn <a.synytsyn> |
| Component: | Other | Assignee: | unassigned |
| Status: | RESOLVED WORKSFORME | ||
| Severity: | normal | CC: | buildroot |
| Priority: | P5 | ||
| Version: | unspecified | ||
| Target Milestone: | --- | ||
| Hardware: | All | ||
| OS: | Linux | ||
| Host: | Target: | ||
| Build: | |||
|
Description
Artem Synytsyn
2016-12-30 14:42:34 UTC
It is hard to know what is going on without more details. For drivers to load automatically, you need: - Device tree snippet according to the defined bindings (in your case it sounds like Documentation/devicetree/bindings/net/microchip,enc28j60.txt) - Driver enabled as a module in the kernel - A user space kernel module loader, E.G. mdev or (e)udev If you still have problems, please provide more details about the above. Hello, Peter, First of all I'll describe steps, which I've made. 1. Clone buildroot from official repo 2. make raspberrypi_defconfig 3. Add enc28j60.dtbo into overlays directory on boot partition 4. Add dtoverlay=enc28j60 into config.txt After boot lsmod command output is empty(except ipv6 module, which is marked as "permanent"). - I've used device tree overlay from the firmware, which was built by buildroot itself. As for the snippet it is standard also, here is its code: https://github.com/raspberrypi/linux/blob/rpi-4.4.y/arch/arm/boot/dts/overlays/enc28j60-overlay.dts. Also, as I said, device tree node with this device is exposed in /proc/device-tree, so I think it is ok. - driver enc28j60.ko is enabled in kernel configuration as loadable, it is present in /lib/modules filesystem. I can load it manually and it is ok too. - mdev is present in system. And I think it is root of the problem, because Raspbian distro has udev instead mdev and it successfully loads kernel module based on info from device tree. I take it that you somewhere in that sequence enabled mdev? (E.G. System configuration->/dev management (Dynamic using devtmpfs+mdev) The module specifies the following aliases: modinfo target/lib/modules/4.4.36-v7/kernel/drivers/net/ethernet/microchip/enc28j60.ko | grep alias alias: spi:enc28j60 alias: of:N*T*Cmicrochip,enc28j60* Can you first of all verify that you can load the module with these wildcards? E.G. modprobe 'spi:enc28j60' lsmod | grep enc28j60 rmmod enc28j60.ko modprobe 'of:N*T*Cmicrochip,enc28j60*' lsmod | grep enc28j60 rmmod enc28j60.ko And check what the modalias is for the /sys/bus/spi/* device? Now it works! Really, problem was in BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y option. Thank you very much! Great, I'll close the issue then. Perhaps it makes sense to enable mdev for the rpi*_defconfigs to make it easier to use? |