WINCE6.0动态加载驱动问题

andylao62 2008-10-24 05:08:53
出现如下错误
BUILD: [00:0000000026:PROGC ] Building LIB Pass in D:\WINCE600\PLATFORM\LPC32XX\src\drivers\GPIO\ directory.
BUILD: [01:0000000036:PROGC ] Linking D:\WINCE600\platform\LPC32XX\lib\ARMV4I\debug\GPIO.lib
BUILD: [01:0000000045:ERRORE] GPIO.def : error LNK2001: unresolved external symbol GPI_Close
BUILD: [01:0000000046:ERRORE] GPIO.def : error LNK2001: unresolved external symbol GPI_Deinit
BUILD: [01:0000000047:ERRORE] GPIO.def : error LNK2001: unresolved external symbol GPI_IOControl
BUILD: [01:0000000048:ERRORE] GPIO.def : error LNK2001: unresolved external symbol GPI_Init
BUILD: [01:0000000049:ERRORE] GPIO.def : error LNK2001: unresolved external symbol GPI_Open
BUILD: [01:0000000050:ERRORE] GPIO.def : error LNK2001: unresolved external symbol GPI_PowerDown
BUILD: [01:0000000051:ERRORE] GPIO.def : error LNK2001: unresolved external symbol GPI_PowerUp
BUILD: [01:0000000052:ERRORE] GPIO.def : error LNK2001: unresolved external symbol GPI_Read
BUILD: [01:0000000053:ERRORE] GPIO.def : error LNK2001: unresolved external symbol GPI_Seek
BUILD: [01:0000000054:ERRORE] GPIO.def : error LNK2001: unresolved external symbol GPI_Write
BUILD: [01:0000000055:ERRORE] D:\WINCE600\platform\LPC32XX\lib\ARMV4I\debug\GPIO.lib : fatal error LNK1120: 10 unresolved externals


以下是我的GPIO.def
LIBRARY GPIO

EXPORTS
GPI_Init
GPI_Deinit
GPI_Open
GPI_Close
GPI_Read
GPI_Write
GPI_Seek
GPI_IOControl
GPI_PowerDown
GPI_PowerUp
说明WINCE6.0,我在DRIVER下建立的是一个动态WCE Dymanic-Link Library 驱动文件,然后单独编译,而D:\WINCE600\platform\LPC32XX\lib\ARMV4I\debug\GPIO.lib下没有 GPIO.lib这个文件,是不是还要设置那呢?

...全文
217 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
andylao62 2008-10-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 gooogleman 的回复:]
今天是周末,周一上班再分析一下。哈哈
[/Quote]
谢谢拉。。。
gooogleman 2008-10-25
  • 打赏
  • 举报
回复
今天是周末,周一上班再分析一下。哈哈
andylao62 2008-10-25
  • 打赏
  • 举报
回复
MSDN上的解释为:Error LNK1120 gives you a count (number) of unresolved externals for this link. The conditions that cause unresolved externals are described with error LNK2001, which precedes this error message (once for each unresolved external).
andylao62 2008-10-25
  • 打赏
  • 举报
回复
以下是我的source文件
TARGETNAME= GPIO
RELEASETYPE=PLATFORM
TARGETTYPE=DYNLINK
TARGETLIBS= \
$(_PROJECTROOT)\cesysgen\sdk\lib\$(_CPUINDPATH)\coredll.lib \


DEFFILE=GPIO.def
PREPROCESSDEFFILE=1
DLLENTRY=DllEntry

FILE_VIEW_INCLUDES_FOLDER= \
gpio.h \

SOURCES= \
GPIO.cpp \
andylao62 2008-10-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sunrain_hjb 的回复:]
从错误看,好像是没有相关函数的实现。
建议贴出sources文件和驱动代码,以便分析。
[/Quote]
/*******************************************************************************************
函数名称: GPI_IOControl
描 述: 驱动程序 I/O 请求
输入参数: DWORD dwIoControlCode: 见本文件的头文件
输出参数:
返 回: TRUE: 操作成功 FALSE: 操作失败
*******************************************************************************************/
static BOOL GPI_IOControl(
DWORD Handle,
DWORD dwIoControlCode,
PBYTE pInBuf,
DWORD nInBufSize,
PBYTE pOutBuf,
DWORD nOutBufSize,
PDWORD pBytesReturned
)
{
BOOL bErr = FALSE;
switch(dwIoControlCode & IOCTL_GPIO_FUN_MASK)
{
/*
* 设置引脚为输出
*/
case IOCTL_GPIO_SET_PIN_OUT:
if (nInBufSize > 0)
bErr = GPIO_SetPinOut(dwIoControlCode, *pInBuf);
break;
/*
* 设置引脚为输入
*/
case IOCTL_GPIO_SET_PIN_IN:
if (nInBufSize > 0)
bErr = GPIO_SetPinIn(dwIoControlCode, *pInBuf);
break;

/*
* 设置引脚输出高电平
*/
case IOCTL_GPIO_SET_PIN:
if (nInBufSize > 0)
bErr = GPIO_SetPin(dwIoControlCode, *pInBuf);
break;

/*
* 设置引脚输出低电平
*/
case IOCTL_GPIO_CLR_PIN:
if (nInBufSize > 0)
bErr = GPIO_ClrPin(dwIoControlCode, *pInBuf);
break;

/*
* 读取引脚电平状态
*/
case IOCTL_GPIO_INP_STATE:
if ((nOutBufSize > 0) && (nInBufSize > 0))
{
bErr = GPIO_ReadPin(dwIoControlCode, *pInBuf, pOutBuf);
*pBytesReturned = 1;
}
break;
/*
* 读取引脚方向状态
*/
case IOCTL_GPIO_DIR_STATE:
if ((nOutBufSize > 0) && (nInBufSize > 0))
{
bErr = GPIO_ReadDir(dwIoControlCode, *pInBuf, pOutBuf);
*pBytesReturned = 1;
}
break;
/*
* 复用引脚设置
*/
case IOCTL_GPIO_MUX_SET:
if ((nOutBufSize > 0) && (nInBufSize > 0))
{
bErr = GPIO_MUX_SET(dwIoControlCode, *pInBuf);
*pBytesReturned = 1;
}
break;

case IOCTL_GPIO_MUX_CLR:
if ((nOutBufSize > 0) && (nInBufSize > 0))
{
bErr = GPIO_MUX_CLR(dwIoControlCode, *pInBuf);
*pBytesReturned = 1;
}
break;
case IOCTL_GPIO_MUX_STATE:
if ((nOutBufSize > 0) && (nInBufSize > 0))
{
bErr = GPIO_MUX_STATE(dwIoControlCode, *pInBuf, pOutBuf);
*pBytesReturned = 1;
}
break;
default:
break;
}

return bErr;
}
static DWORD GPI_Open(DWORD Handle, DWORD dwAccess, DWORD dwShareMode) {
if (g_OpenCount > 0)
return 0;
RETAILMSG(1, (TEXT("GPIO OPENED!BUT NOTHING\r\n")));
g_OpenCount++;
return (g_OpenCount);
}
static BOOL GPI_Close(DWORD Handle) {
RETAILMSG(1, (TEXT("GPIO CLOSED!BUT NOTHING\r\n")));
g_OpenCount = 0;
return (1);
}

static BOOL GPI_Deinit(DWORD dwData)
{
if(g_pGPIORegs)
g_pGPIORegs = NULL;
RETAILMSG(1, (TEXT("GPIO Deinitted!\r\n")));
g_OpenCount = 0;
return 1;
}

static DWORD GPI_Read(DWORD Handle, LPVOID pBuffer, DWORD dwNumBytes)
{
RETAILMSG(1, (TEXT("GPIO READ!BUT NOTHING\r\n")));
return 1;
}

static DWORD GPI_Write(DWORD Handle, LPCVOID pBuffer, DWORD dwNumBytes)
{
RETAILMSG(1, (TEXT("GPIO WRITE!BUT NOTHING\r\n")));
return 1;
}

static DWORD GPI_Seek(DWORD Handle, long lDistance, DWORD dwMoveMethod)
{
return 1;
}

static void GPI_PowerUp(void)
{
//return 1;
}
static void GPI_PowerDown(void)
{
//return 1;
}
大家帮忙看看有什么问题
sunrain_hjb 2008-10-25
  • 打赏
  • 举报
回复
没有必要开这么多帖子吧~
我已经在其他帖子里回了。
sunrain_hjb 2008-10-24
  • 打赏
  • 举报
回复
从错误看,好像是没有相关函数的实现。
建议贴出sources文件和驱动代码,以便分析。
andylao62 2008-10-24
  • 打赏
  • 举报
回复
没人帮我吗。。。
欢迎阅读 Microsoft Windows Embedded CE 6.0 考试准备指南。该准备指南的目 的是帮助 Windows Embedded CE 开发人员准备 Microsoft Certified Technology Specialist ( 微软认证技术专家) (MCTS) Windows Embedded CE 6.0 Application Development (Windows Embedded CE 6.0 应用程序开发) 认证考试。 通过使用该准备指南,您可以最大化以下考试目标的成绩: ■ 自定义操作系统设计。 ■ 克隆 Windows Embedded CE 组件和管理编录项。 ■ 产生 Software Development Kit ( 软件开发包) (SDK). ■ 构建运行库映像和分析构建结果。 ■ 部署、监控、和优化运行库映像。 ■ 开发多线程系统应用程序。 ■ 实现异常处理。 ■ 在应用程序、设备驱动程序、和 OEM 适配层 (OAL) 中支持电源管理。 ■ 配置 Board Support Package ( 板级支持包) (BSP),包括对启动加载器和内 存映射的自定义。 ■ 开发功能完备的流接口驱动程序。 ■ 实现 Interrupt Service Routines ( 中断服务例程) (ISRs) 和 Interrupt Service Threads ( 中断服务线程) (ISTs) 及在内核模式和用户模式组件间 封送数据。 ■ 调试内核模式和用户模式组件以消除软件相关的错误。 ■ 使用 Windows Embedded CE Test Kit (Windows Embedded CE 测试工具包) (CETK),在开发工作站和目标设备上执行标准的和用户定义的测试。 ■ 开发 Tux 扩展组件来在基于 CETK 的测试中包括自定义设备驱动程序。

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧