У меня есть некоторые драйверы Linux для некоторых аппаратных средств canbus напрямую от производителя, но они устарели (по крайней мере, для моего ядра), оставляя меня на произвол судьбы. Прыгнув через несколько обручей, я дошёл до одной ошибки при компиляции, но я не могу ее поколебать.
Ошибка такова:
./src/esdcan_pci.c:353:9: error: ‘struct device’ has no member named ‘driver_data’
После большого количества интернет-споров я почти уверен, что это связано с файлом заголовка для моего устройства device.h. Я открыл заголовок и посмотрел на структуру, и, конечно же, нет элемента с именем driver_data. В чем я не уверен, так это в том, какой член будет эквивалентен или если он вообще есть Вот версия структуры в моем заголовочном файле:
struct device {
struct device *parent;
struct device_private *p;
struct kobject kobj;
const char *init_name; /* initial name of the device */
struct device_type *type;
struct mutex mutex; /* mutex to synchronize calls to
* its driver.
*/
struct bus_type *bus; /* type of bus device is on */
struct device_driver *driver; /* which driver has allocated this
device */
void *platform_data; /* Platform specific data, device
core doesn't touch it */
struct dev_pm_info power;
#ifdef CONFIG_NUMA
int numa_node; /* NUMA node this device is close to */
#endif
u64 *dma_mask; /* dma mask (if dma'able device) */
u64 coherent_dma_mask;/* Like dma_mask, but for
alloc_coherent mappings as
not all hardware supports
64 bit addresses for consistent
allocations such descriptors. */
struct device_dma_parameters *dma_parms;
struct list_head dma_pools; /* dma pools (if dma'ble) */
struct dma_coherent_mem *dma_mem; /* internal for coherent mem
override */
/* arch specific additions */
struct dev_archdata archdata;
#ifdef CONFIG_OF
struct device_node *of_node;
#endif
dev_t devt; /* dev_t, creates the sysfs "dev" */
spinlock_t devres_lock;
struct list_head devres_head;
struct klist_node knode_class;
struct class *class;
const struct attribute_group **groups; /* optional groups */
void (*release)(struct device *dev);
};
Поскольку я впервые собираю драйвер для Linux, я не уверен, на что смотрю. У кого-нибудь есть опыт в такой области, который может дать некоторые подсказки? Благодарю.