Отсутствует dev/spidev

Вопрос или проблема

Недавно я взялся за проект по созданию образа Linux с базовой поддержкой аппаратного обеспечения для NanoPi Neo SOM. Это мой первый опыт работы с встроенным Linux, так как моя предыдущая деятельность в основном была связана с разработкой аппаратного обеспечения для микроконтроллеров.

Для этой задачи я использую Buildroot. Хотя выходной образ работает хорошо, я столкнулся с проблемой: я не могу найти поддержку SPI в /dev/ директории, которая, как я считаю, является ключевой для моего приложения. Тем не менее, я вижу некоторые файлы, связанные с SPI, находящиеся в других частях системы, таких как /sys/bus/, /sys/class/ и /lib/modules/6.10.9/kernel/drivers/.

При вызове команды make linux-menuconfig и поиске конфигурации SPI я нашел следующее:

Symbol: SPI_SPIDEV [=y]
│ Type : tristate
│ Defined at drivers/spi/Kconfig:1222
│ Prompt: Поддержка драйвера SPI устройств в пользовательском режиме
│ Depends on: SPI [=y] && SPI_MASTER [=y]
│ Location:
│ -> Устройства драйверов
│ -> Поддержка SPI (SPI [=y])
│ (1) -> Поддержка драйвера SPI устройств в пользовательском режиме (SPI_SPIDEV [=y])

Вот что я нашел в ./buildroot/output/target/boot/sun8i-h3-nanopi-neo.dtb:

pinctrl@1c20800 {
    spi0-pins {
        pins = "PC0\0PC1\0PC2\0PC3";
        function = "spi0";
        phandle = <0x14>;
    };

    spi1-pins {
        pins = "PA15\0PA16\0PA14\0PA13";
        function = "spi1";
        phandle = <0x15>;
    };
};

soc {
    spi@1c68000 {
        compatible = "allwinner,sun8i-h3-spi";
        reg = <0x1c68000 0x1000>;
        interrupts = <0x00 0x41 0x04>;
        clocks = <0x03 0x1e 0x03 0x52>;
        clock-names = "ahb\0mod";
        dmas = <0x13 0x17 0x13 0x17>;
        dma-names = "rx\0tx";
        pinctrl-names = "default";
        pinctrl-0 = <0x14>;
        resets = <0x03 0x0f>;
        status = "disabled";
        #address-cells = <0x01>;
        #size-cells = <0x00>;
        phandle = <0x4e>;
    };

    spi@1c69000 {
        compatible = "allwinner,sun8i-h3-spi";
        reg = <0x1c69000 0x1000>;
        interrupts = <0x00 0x42 0x04>;
        clocks = <0x03 0x1f 0x03 0x53>;
        clock-names = "ahb\0mod";
        dmas = <0x13 0x18 0x13 0x18>;
        dma-names = "rx\0tx";
        pinctrl-names = "default";
        pinctrl-0 = <0x15>;
        resets = <0x03 0x10>;
        status = "disabled";
        #address-cells = <0x01>;
        #size-cells = <0x00>;
        phandle = <0x4f>;
    };
};

__symbols__ {
        spi0_pins = "/soc/pinctrl@1c20800/spi0-pins";
        spi1_pins = "/soc/pinctrl@1c20800/spi1-pins";
        spi0 = "/soc/spi@1c68000";
        spi1 = "/soc/spi@1c69000";
};

Я изменил статус с “disabled” на “okay”, но это не помогло.

У кого-нибудь есть идеи, почему это может происходить, или предложения по решению этой проблемы?

Спасибо!

Ответ или решение

Ваша проблема связана с отсутствием устройства /dev/spidev в вашей системе на базе NanoPi Neo SOM. Давайте рассмотрим несколько шагов для решения этой проблемы.

1. Проверка конфигурации ядра

Вы уже проверили параметры конфигурации ядра через интерфейс linux-menuconfig. Убедитесь, что следующие параметры включены:

  • SPI Support (SPI [=y]) должен быть активирован.
  • User mode SPI device driver support (SPI_SPIDEV [=y]) также должен быть активирован.

Проверьте, что все зависимости (например, SPI_MASTER) также активированы.

2. Проверка устройства в Device Tree

Согласно вашему выводу из Device Tree, статус ваших контроллеров SPI установлен на "disabled". Вам необходимо изменить его на "okay" как для spi@1c68000, так и для spi@1c69000.

Ваши изменения в Device Tree могут выглядеть так:

spi@1c68000 {
    ...
    status = "okay";
    ...
};

spi@1c69000 {
    ...
    status = "okay";
    ...
};

Убедитесь, что вы правильно переписали и применили изменения в Device Tree. Если вы используете Buildroot, возможно, вам необходимо пересобрать образ и перезаписать его на ваше устройство.

3. Пересборка образа

После внесения изменений в Device Tree и подтверждения конфигурации модуля SPI, вам нужно будет:

  1. Пересобрать образ с помощью команд make в каталоге buildroot.
  2. Загрузить обновленный образ на ваше устройство.

4. Проверка наличия устройства

После успешной загрузки проверьте наличие устройства /dev/spidev* с помощью команды:

ls /dev/spidev*

Если устройство всё ещё отсутствует, выполните следующую команду для проверки загруженных модулей:

lsmod | grep spidev

Если модуль spidev не подключён, попробуйте вручную загрузить модуль:

modprobe spidev

5. Логи ядра

Если после всех вышеописанных шагов проблема не исчезает, полезно проверить логи ядра на наличие ошибок:

dmesg | grep spi

Это может дать информацию о том, что именно произошло с SPI-устройствами при загрузке.

Заключение

Следуя этим шагам, вы должны быть в состоянии активировать поддержку SPI и получить доступ к устройствам /dev/spidev. Не забывайте учитывать все зависимости и требуемые конфигурации при работе с Buildroot и ядром Linux. Если у вас есть дополнительные вопросы или возникают сложности, не стесняйтесь задавать их. Удачи в вашем проекте!

Оцените материал
Добавить комментарий

Капча загружается...