[USB驱动]多谢各位的帮助,现在有新的问题

根据参考,我自己写了一个驱动 .c和 .h
但是编译时遇到了如下问题:

undefined reference to ‘usbd_attach’ 等等

也就是说所有系统应该提供的 usb 操作函数都找不到实体。
追查头文件,发现这些函数都是在 usbdi.h 里面声明的,但是却找不到函数实体。
这是怎么一回事?该如何解决呢?


还有一个问题。
在 callback sen_insertion() 里面通过调用 sen_resmgr_attach() 函数,
注册了对设备进行操作的若干函数,如 sen_io_open, sen_io_read 等等。
这样,在本驱动程序加载后,该如何对USB设备进行读写操作呢?
是向普通文件一样直接操作USB设备么?具体是怎样的呢?

例如, sen_io_read() 如下:

int sensor_io_read( resmgr_context_t *ctp, io_read_t *msg, RESMGR_OCB_T *ocb )

需要返回得到的数据的地址和长度等信息。

谢谢

如下:

// signal handler
void sen_signal_handler( )
{
	siginfo_t		info;
	sigset_t		set;
	sen_t			*sen;
	sen_t			*nsen;

	// set signals to 0xFFFFFFFF, no signals to resmgr threads
	sigfillset( &set );
	sigdelset( &set, SIGTERM );
	// examine and change blocked signals
	sigprocmask( SIG_BLOCK, &set, NULL );

	// initialize set to no signals
	sigemptyset( &set );
	// add signal to set
	// SIGTERM: the macro yields the sig argument value for the asynchronous termination request signal
	sigaddset( &set, SIGTERM );
	// select the pending signal from set or block itself if no signal in set is pending at the time of the call
	// return -1 if an error occurs
	while( SignalWaitinfo( &set, &info ) == -1 )
		;

	// free resources hold by sen
	for( sen = TAILQ_FIRST( &SenCtrl.dlist ); sen; sen = nsen ) {
		nsen = TAILQ_NEXT( sen, dlink );
		sen_free( sen );
	}
}

// callback in bulk mode
void sen_bulk_cbf( struct usbd_urb *urb, struct usbd_pipe *pipe, void *hdl )
{
	pipe = pipe, hdl = hdl;

	pthread_sleepon_lock( );
	pthread_sleepon_signal( urb );
	pthread_sleepon_unlock( );

	return;
}

都有什么作用呢?。。。
(注释是我自己写的,但是函数的作用不明白。。。)

在工程的特性设置里,linker->extra libraries连接上libusbdi.so就可以了。

问题解决了。。。

之前我把问题想的过于复杂,实际很简单的。
驱动把USB设备注册到了资源管理器,可以对设备使用普通的操作函数,如 open,write,read等。