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

IO Port Driver

[复制链接]
发表于 2009-5-13 17:14:34 | 显示全部楼层 |阅读模式
ECBACK.SYS
& U5 |5 D6 a& m3 R4 v3 T- e
: N! x0 u5 r5 k8 o
最近工厂PE端需要一堆测试程序,这些程序主要是用于测试EC的各种功能如:测试风扇,测试电池,测试键盘等等。而且要求通吃vista,xp,winpe
我最初打算使用wmi acpi实现,可是发现wmi acpiwinpe下无法工作。
1 Y  {8 k/ P& T3 L* E0 x; Z  r迫于无奈只有实现一个IO portdriver,然后AP透过ECback door 存取EC XRAM&REG,只有这个方法才能通吃三个平台了." Y7 h+ \. o2 m0 f4 ]  y

( Y6 H1 S  {5 k5 x3 H1 _IO port driver是非常简单的driver了,winio就是一只这种类型的driverwinio是通过修改IOPM开启应用程序IO RW权限的,我写的这个ECBACK.sys则是使用DDKAPI读写IO实现的。当然我也参考了winio加载 driver 的代码,所以我将ECBACK.sys kernel mode & user mode source code贴于附件中供下载。解压后会三个文件夹其中sys
中是
) P" Y; v2 q6 @ECBACK.syssource code,lib是我导出的user mode api 一共包含四个函数:
7 _" E) N$ p! Z! Q) f

$ M/ c" p$ w3 R8 C  p#ifndef
; t1 K" d3 B5 j5 `__ECBACKAPI_H__

: u" s. n( m' G$ c5 M" W/ D#define& x& z5 A& v/ M0 W; K4 O/ A* d
__ECBACKAPI_H__

% \2 Q, ~' G& ~" o  r2 n" U
" {0 _! d: ]. x8 I/ @  N. k5 Y) W+ dBOOL
5 Q) ], x; s/ G8 J# M9 m3 vInstall_ECBackDrv(
void);

% o) W, [9 @" d, W$ a) o. T+ m) {" s 6 ?& F% F, ]$ R% x7 k
BOOL* ?9 Z6 Y! G2 ]7 k
Uninstall_ECBACKDrv(
void);

0 W7 w; a/ e+ o& Z# o   l" ~. E, W0 s0 x5 ^1 i' I5 E
void
" f# L% u# |4 m7 T* {* e/ B$ zWrite_EC_UCHAR(IN UCHAR port_base,IN UCHAR add_H,IN UCHAR add_L,IN UCHAR data);

! O9 X+ R# `- V5 f( s# r2 f ; S( W8 A/ B8 @, M7 q, d% ]
UCHAR
, ?& S7 |- e! {& ]% ?Read_EC_UCHAR(IN UCHAR port_base, IN UCHAR add_H,UCHAR add_L);
# _1 F; Q) I# I. f7 v' s* v; o8 K0 ]1 A- q& @2 M8 `) M

6 r  e6 L4 C) t6 d% T#endif
2 S% c- a- ~' G- iInstall_ECBackDrv通过创建service的方式加载driver,这样AP才可以和driver沟通。读写io port部分也被封装到了Write_EC_UCHAR & Read_EC_UCHAR中了,user不用再去调用DeviceIoControl再往下送IRP了。使用完之后需要调用Uninstall_ECBACKDrv,该函数会将Install_ECBackDrv创建的service移除掉。文件夹
4 r" O5 ]% ?9 m' i$ YECBDTest是我写的一个测试程式用于演示如何使用lib文件夹中导出的函数。这些部分实现了以后其他组写测试程序只需要按照sample code写法实现就好了,我就解放了J!
0 B) K8 Q+ s  O# k" j, u
* ~1 W7 }$ T5 k' G
That’s all!4 e3 g  D# n$ S3 ~, D
; B: Z! c/ Q% ^+ y  s2 h/ }
Peter

本帖子中包含更多资源

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

×
发表于 2009-8-12 14:20:15 | 显示全部楼层
Hi,peter.hu
3 }/ Z4 m9 g9 ~; e& E
$ M( |! ^( p1 p3 r6 b3 Qdontuse.h头文件在哪里可以找到啊,谢谢了
回复

使用道具 举报

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

使用道具 举报

发表于 2009-8-15 00:57:25 | 显示全部楼层
hi,peter.hu' E. h( Q; D" q4 z  p

5 L" e3 x+ S& ?! C' E! s我安装了DDK 2006,但是还是没有找到这个文件,请指教,谢谢
回复

使用道具 举报

发表于 2009-8-17 13:04:29 | 显示全部楼层
ddk已经带有完整的示例代码了,就在src\gerneral\portio下。* _: M$ p5 b4 [$ N) Q1 p! b4 U; x
包括驱动的加载,驱动代码,测试应用。
回复

使用道具 举报

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

使用道具 举报

发表于 2010-1-18 17:31:35 | 显示全部楼层
我以前是用我們的產品解決類似的問題:
5 d9 i& y3 `* }4 _  E) W7 thttp://www.samedisk.com/cht/productinfo1051.php
8 r' |; s! u* D- h) t8 b+ Z3 P) k+ C0 ?0 [
也是在產線測試和BURN-IN用的, 主要是S3切換方面0 l# `5 s0 g) I$ M, S- F
要打下一些進S3特定時間後回來有問題的板子5 T# I% _. ^0 b# \) Z
3 W) h; k" X) D- U
除了常用的OS以外還支持APPLE/MAC OS, Linux, WindowsCE5/6
$ d/ i$ C5 Y8 _1 t當初還要用網路收集各站的資料, 所以支持Windows目錄網路共享- n6 Y" S; t7 q9 s: D* a, W) ]

% u: Z+ b* h, l: `* g' L2 N優點是"免驅動程式"~
* X; Z. u3 m4 K7 \9 v6 k缺點是反應慢, 一秒20次左右~
9 T) w3 w; R3 j$ D( K- \, ]( P) C傳SMBUS會傳到吐血
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 17:54 , Processed in 0.029518 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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