Я использую RTEMS и пытаюсь настроить собственный клиент NFS. Хотя я включил это правильно, для драйвера недостаточно записей динамического драйвера. Вы можете искать больше информации Вот.
Чтобы настроить дополнительные динамические драйверы, необходимо добавить элементы NULL в большую таблицу бесплатных драйверов. Смотрите следующее:
#define NULL_DRIVER_TABLE_ENTRY \
{ NULL, NULL, NULL, NULL, NULL, NULL}#ifdef CONFIGURE_INIT
rtems_driver_address_table Device_drivers[] = {
#ifdef CONFIGURE_BSP_PREREQUISITE_DRIVERS
CONFIGURE_BSP_PREREQUISITE_DRIVERS,
#endif
#ifdef CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS,
#endif
...
#ifdef CONFIGURE_APPLICATION_EXTRA_DRIVERS
CONFIGURE_APPLICATION_EXTRA_DRIVERS,
#endif
#ifdef CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
NULL_DRIVER_TABLE_ENTRY
#elif !defined(CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER) && \
!defined(CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER) && \
!defined(CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER) && \
!defined(CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER) && \
!defined(CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER) && \
!defined(CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER) && \
!defined(CONFIGURE_APPLICATION_EXTRA_DRIVERS)
NULL_DRIVER_TABLE_ENTRY
#endif
};
#endif
По сути, это создание таблицы драйверов устройств …
Драйвер устройства выглядит так:
typedef struct {
rtems_device_driver_entry initialization_entry; /* initialization procedure */
rtems_device_driver_entry open_entry; /* open request procedure */
rtems_device_driver_entry close_entry; /* close request procedure */
rtems_device_driver_entry read_entry; /* read request procedure */
rtems_device_driver_entry write_entry; /* write request procedure */
rtems_device_driver_entry control_entry; /* special functions procedure */
} rtems_driver_address_table;
Проблема, которая может быть исключительно простой, заключается в том, что при сборке я получаю следующую ошибку:
confdefs.h:568: error: too many initializers for 'rtems_driver_address_table'
От глядя Вот похоже, это проблема компиляции с неопределенным количеством элементов таблицы. Что я не понимаю, так это то, что это в настоящее время за работой в том, что если я укажу NULL_DRIVER_TABLE_ENTRY
с 7 NULL
s (номер, который мне нужен), он потерпит неудачу, но с 6 NULL
с отлично работает?
Насколько я могу сказать, нет никакого определения относительно размера этой таблицы или ее элементов? Есть идеи?
Так что это была глупая ошибка …
Эта таблица работает так, что запись таблицы NULL:
#define NULL_DRIVER_TABLE_ENTRY \
{ NULL, NULL, NULL, NULL, NULL, NULL}
На самом деле запись в массиве, которая соответствует rtems_driver_address_table
, Этот драйвер имеет 6 элементов, а я пытался получить 7. Решением этой проблемы было добавление дополнительной нулевой записи следующим образом:
rtems_driver_address_table Device_drivers[] = {
...
#ifdef CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
NULL_DRIVER_TABLE_ENTRY,
NULL_DRIVER_TABLE_ENTRY // Add extra entry here!
...
};