找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 16903|回复: 6

IO Port Driver

[复制链接]
发表于 2009-5-13 17:14:34 | 显示全部楼层 |阅读模式
ECBACK.SYS

3 ~+ t: u9 E! J: b! B4 U3 \
( G! t; ]  T+ m/ b1 t  J9 m( r* i最近工厂PE端需要一堆测试程序,这些程序主要是用于测试EC的各种功能如:测试风扇,测试电池,测试键盘等等。而且要求通吃vista,xp,winpe
我最初打算使用wmi acpi实现,可是发现wmi acpiwinpe下无法工作。4 t% J$ F9 n+ U5 V; H  M
迫于无奈只有实现一个IO portdriver,然后AP透过ECback door 存取EC XRAM&REG,只有这个方法才能通吃三个平台了.
: m- s& |& R# o. s( J+ I) N$ C3 i, ^3 d, q2 K0 K
IO port driver是非常简单的driver了,winio就是一只这种类型的driverwinio是通过修改IOPM开启应用程序IO RW权限的,我写的这个ECBACK.sys则是使用DDKAPI读写IO实现的。当然我也参考了winio加载 driver 的代码,所以我将ECBACK.sys kernel mode & user mode source code贴于附件中供下载。解压后会三个文件夹其中sys
中是
+ k5 b/ n0 b6 m; gECBACK.syssource code,lib是我导出的user mode api 一共包含四个函数:

; D6 n+ }3 _1 h  I, X3 n 3 g: r' M- \  Y; C
#ifndef
! Q2 T0 Q& d3 m5 C, m3 S__ECBACKAPI_H__
: d: w6 R  M7 e; S/ B
#define3 E3 L0 Z8 Y' F( P! H
__ECBACKAPI_H__

+ T8 O# v' C" _0 F1 l: [: w4 W9 V 4 \1 s2 O* Z: `$ Q5 u
BOOL
$ r' t4 j# H, O3 F2 y9 A2 pInstall_ECBackDrv(
void);
+ g( b# b" g/ U$ y% e0 r

" k8 `9 m* G  I5 mBOOL) N3 u8 T3 ], U
Uninstall_ECBACKDrv(
void);

" B- E. d( P% u+ L* F. o& r- s' c6 a
- ~! A+ N9 K8 v; |4 yvoid
" _0 T) B) t$ a- H" j. bWrite_EC_UCHAR(IN UCHAR port_base,IN UCHAR add_H,IN UCHAR add_L,IN UCHAR data);

5 a3 g4 U& j; I: R: i2 a  G & D- e/ m2 _4 H& c
UCHAR; P5 J. t9 a" u. I, a
Read_EC_UCHAR(IN UCHAR port_base, IN UCHAR add_H,UCHAR add_L);0 o) u* c. ~- t& H) C9 r
  T2 j* b: M$ |* \9 L$ Y6 Y$ C, u, Z
; B( [8 F* O9 |+ |0 ?' ]; E( I
#endif2 y$ F! j/ k# T0 ]* Q/ ]- s
Install_ECBackDrv通过创建service的方式加载driver,这样AP才可以和driver沟通。读写io port部分也被封装到了Write_EC_UCHAR & Read_EC_UCHAR中了,user不用再去调用DeviceIoControl再往下送IRP了。使用完之后需要调用Uninstall_ECBACKDrv,该函数会将Install_ECBackDrv创建的service移除掉。文件夹
9 ]+ b; d, h. d7 mECBDTest是我写的一个测试程式用于演示如何使用lib文件夹中导出的函数。这些部分实现了以后其他组写测试程序只需要按照sample code写法实现就好了,我就解放了J!

, T7 z: A4 w% [* y/ q" h+ q5 Q
0 e9 C+ j' q, t* O. VThat’s all!  e1 Q) d. ~4 \9 t# A; v) F2 x! `
( D, ~; J  t7 B1 f& _1 V
Peter

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入计匠网

×
发表于 2009-8-12 14:20:15 | 显示全部楼层
Hi,peter.hu
. p" y/ m0 w& G1 q9 q  v% O% {& E
) h- V' F8 H" Z* t( [3 Rdontuse.h头文件在哪里可以找到啊,谢谢了
回复

使用道具 举报

 楼主| 发表于 2009-8-12 17:06:11 | 显示全部楼层
应该在DDK里面,你装个DDK然后到安装目录下的include文件夹下找找看。
回复

使用道具 举报

发表于 2009-8-15 00:57:25 | 显示全部楼层
hi,peter.hu, {8 _( m- y$ h4 E1 G$ W$ X
: q) f  p& n& g
我安装了DDK 2006,但是还是没有找到这个文件,请指教,谢谢
回复

使用道具 举报

发表于 2009-8-17 13:04:29 | 显示全部楼层
ddk已经带有完整的示例代码了,就在src\gerneral\portio下。
2 r4 k& I% A: h" s- i+ j2 ]包括驱动的加载,驱动代码,测试应用。
回复

使用道具 举报

发表于 2009-12-28 13:56:50 | 显示全部楼层
Write_EC_UCHAR和Read_EC_UCHAR函数的参数跟WinIO的IOPort函数不一样,我不太明白,可否说明下这2个函数里参数的意义。
回复

使用道具 举报

发表于 2010-1-18 17:31:35 | 显示全部楼层
我以前是用我們的產品解決類似的問題:
" D) t. A) M* ehttp://www.samedisk.com/cht/productinfo1051.php& ]! o7 g( e% W. f) {6 \
9 g2 L" X3 b6 W- I
也是在產線測試和BURN-IN用的, 主要是S3切換方面* h. A6 u2 ~; \, X, ?. o6 l
要打下一些進S3特定時間後回來有問題的板子+ r0 {% v1 M# G' \! k% J( h
2 H6 Q2 ~+ ^4 {; z
除了常用的OS以外還支持APPLE/MAC OS, Linux, WindowsCE5/6
; P/ B' o2 k( K! v& D2 F; p當初還要用網路收集各站的資料, 所以支持Windows目錄網路共享
& ^' |8 z8 p1 B; F3 M5 r7 @* G0 x* ~/ l; i4 x# ]
優點是"免驅動程式"~9 @4 W1 q: H' i4 L8 A( r
缺點是反應慢, 一秒20次左右~
5 Z% K0 d1 K9 ~% I; o, G9 s傳SMBUS會傳到吐血
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

Archiver|手机版|小黑屋|计匠网

GMT+8, 2025-12-1 00:46 , Processed in 0.140431 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表