バックグラウンド
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
基本的にこれが行っているのは、デバイス ドライバー テーブルの構築です...
deice ドライバーは次のようになります。
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
と失敗しますが、6NULL
秒では完全に正常に動作しますか?
私が知る限り、このテーブルまたはその要素のサイズに関する定義はありませんか? 何か案は?