1 .rtCAN 驱动模块到RTDM 中
int __init rtcan_init(void)
{
int err = 0;
if (!realtime_core_enabled())
return 0;
printk("RT-Socket-CAN %d.%d.%d - %s\n",
RTCAN_MAJOR_VER, RTCAN_MINOR_VER, RTCAN_BUGFIX_VER,
rtcan_rtdm_provider_name);
if ((err = rtcan_raw_proto_register()) != 0)
goto out;
#ifdef CONFIG_PROC_FS
if ((err = rtcan_proc_register()) != 0)
goto out;
#endif
out:
return err;
}
module_init(rtcan_init);
rtcan_init()->rtcan_raw_proto_register()
其中 rtcan_raw_proto_register()
int __init rtcan_raw_proto_register(void)
{
return rtdm_dev_register(&rtcan_device);
}
rtcan_init()->rtcan_raw_proto_register()->rtdm_dev_register(&rtcan_device)
rtdm_dev_register(&rtcan_device)
注册RTDM设备
/**
* @brief Register a RTDM device
*
* Registers a device in the RTDM namespace.
*
* @param[in] dev Device descriptor.
*
* @return 0 is returned upon success. Otherwise:
*
* - -EINVAL is returned if the descriptor contains invalid
* entries. RTDM_PROFILE_INFO() must appear in the list of
* initializers for the driver properties.
*
* - -EEXIST is returned if the specified device name of protocol ID is
* already in use.
*
* - -ENOMEM is returned if a memory allocation failed in the process
* of registering the device.
*
* - -EAGAIN is returned if no registry slot is available (check/raise
* CONFIG_XENO_OPT_REGISTRY_NRSLOTS).
*
* @coretags{secondary-only}
*/
int rtdm_dev_register(struct rtdm_device *dev)
{
struct class *kdev_class = rtdm_class;
struct device *kdev = NULL;
struct rtdm_driver *drv;
int ret, major, minor;
xnkey_t id;
dev_t rdev;
secondary_mode_only();
if (!realtime_core_enabled())
return -ENOSYS;
mutex_lock(®ister_lock);
dev->name = NULL;
drv = dev->driver;
ret = registe