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

IO Port Driver

[复制链接]
发表于 2009-5-13 17:14:34 | 显示全部楼层 |阅读模式
ECBACK.SYS
  F8 g1 ~7 G2 |- t! n, P& x
; ~# I. V( \6 E/ X( l% N$ b
最近工厂PE端需要一堆测试程序,这些程序主要是用于测试EC的各种功能如:测试风扇,测试电池,测试键盘等等。而且要求通吃vista,xp,winpe
我最初打算使用wmi acpi实现,可是发现wmi acpiwinpe下无法工作。0 r% u6 g# H. v$ n3 Z
迫于无奈只有实现一个IO portdriver,然后AP透过ECback door 存取EC XRAM&REG,只有这个方法才能通吃三个平台了.0 ^* ]5 ]; h: h8 w3 n7 J

, \9 V1 `) L% b! T! IIO port driver是非常简单的driver了,winio就是一只这种类型的driverwinio是通过修改IOPM开启应用程序IO RW权限的,我写的这个ECBACK.sys则是使用DDKAPI读写IO实现的。当然我也参考了winio加载 driver 的代码,所以我将ECBACK.sys kernel mode & user mode source code贴于附件中供下载。解压后会三个文件夹其中sys
中是
! ~1 M- g+ L5 W1 ]9 }ECBACK.syssource code,lib是我导出的user mode api 一共包含四个函数:

( {6 F: [( J0 \# H* s
7 B: \4 H! ]6 B0 `& E! ^: W#ifndef
* G) k; V2 P4 p7 o  d& p" ?  l__ECBACKAPI_H__

, K5 R- l: V* ^  {$ {# f: g; e/ b#define
/ i  _$ e2 w2 T__ECBACKAPI_H__
2 x& V+ U) ]% |& s$ \, d

/ [8 y3 y' c$ V( T' a5 \BOOL5 a- W4 l, h' J3 S  _. B
Install_ECBackDrv(
void);
! A8 k- `5 P8 r

) K+ a8 A) b& K- W6 f4 k( yBOOL
9 |: V3 t$ ~: y) j  U) ]Uninstall_ECBACKDrv(
void);
6 s) b9 A) [6 D; V
+ m& u* m  b1 [2 g% r/ `5 P2 E" h
void/ r9 R. \4 a- L
Write_EC_UCHAR(IN UCHAR port_base,IN UCHAR add_H,IN UCHAR add_L,IN UCHAR data);
+ ]/ F$ `3 B# K. z% w2 @% J
( ^5 q2 K- ~4 `5 Q- n
UCHAR
$ w- P2 m2 B2 V5 V( ?* T5 y; cRead_EC_UCHAR(IN UCHAR port_base, IN UCHAR add_H,UCHAR add_L);; f. n/ G6 t9 A- ?. H3 z# s& K

* I& Z2 @3 _1 T& N3 a9 G! i. E0 j
! O: f1 o) Y7 |* d+ J
#endif7 T) W9 e/ K, X% f. E, s
Install_ECBackDrv通过创建service的方式加载driver,这样AP才可以和driver沟通。读写io port部分也被封装到了Write_EC_UCHAR & Read_EC_UCHAR中了,user不用再去调用DeviceIoControl再往下送IRP了。使用完之后需要调用Uninstall_ECBACKDrv,该函数会将Install_ECBackDrv创建的service移除掉。文件夹* B6 H" g/ q4 E4 n5 P
ECBDTest是我写的一个测试程式用于演示如何使用lib文件夹中导出的函数。这些部分实现了以后其他组写测试程序只需要按照sample code写法实现就好了,我就解放了J!
5 j& i4 E. D0 _; N! _

  ~( h/ X9 y) S! |8 L9 AThat’s all!/ \1 y/ v% m1 g* x
5 U2 h) N- k. N( `4 ?
Peter

本帖子中包含更多资源

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

×
发表于 2009-8-12 14:20:15 | 显示全部楼层
Hi,peter.hu
& N1 v  e, N0 u+ H4 L4 w
# P5 H( _# x$ L: f8 z" ~dontuse.h头文件在哪里可以找到啊,谢谢了
回复

使用道具 举报

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

使用道具 举报

发表于 2009-8-15 00:57:25 | 显示全部楼层
hi,peter.hu8 M9 a/ l$ L* N- X5 X- d" F8 j

' G& A1 Y- w3 N5 c2 a9 n* A我安装了DDK 2006,但是还是没有找到这个文件,请指教,谢谢
回复

使用道具 举报

发表于 2009-8-17 13:04:29 | 显示全部楼层
ddk已经带有完整的示例代码了,就在src\gerneral\portio下。6 t. T" r0 Q4 P$ C2 H& n3 F
包括驱动的加载,驱动代码,测试应用。
回复

使用道具 举报

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

使用道具 举报

发表于 2010-1-18 17:31:35 | 显示全部楼层
我以前是用我們的產品解決類似的問題:$ H7 k+ n5 }- `- x# O% e' O
http://www.samedisk.com/cht/productinfo1051.php
8 v9 {8 B6 H9 I$ K' ~, g' @& k6 M1 s6 C/ m) j
也是在產線測試和BURN-IN用的, 主要是S3切換方面
0 O2 h* ?' y/ ^要打下一些進S3特定時間後回來有問題的板子
7 v* j, ]9 Y1 [- A  q) t$ E7 A# [( y+ ?6 e2 g
除了常用的OS以外還支持APPLE/MAC OS, Linux, WindowsCE5/6
9 V0 o' q8 D3 C! o/ Q- R當初還要用網路收集各站的資料, 所以支持Windows目錄網路共享
( U) z# o+ `" }" i" C
3 m( p9 ]8 d6 q優點是"免驅動程式"~
  Y8 c& |+ o& z0 ?5 _5 A0 k缺點是反應慢, 一秒20次左右~
8 |8 w" w; Z; S( c2 r4 o傳SMBUS會傳到吐血
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-5 14:12 , Processed in 0.161793 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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