討論區快速選單
知識庫快速選單
掌握Salesforce雲端管理秘訣 討論區最近新進100則主題 政府補助!學嵌入式+物聯網
[ 回上頁 ] [ 討論區發言規則 ]
AML要如何動態的加入ACPI Namespace裡
更改我的閱讀文章字型大小
作者 : sasayaki64(sasayaki64) 人氣指數超過10000點
[ 貼文 23 | 人氣 14382 | 評價 10 | 評價/貼文 0.43 | 送出評價 5 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/11/10 下午 08:18:54
我寫了一個測試用的AML,
卻不知道要如何動態的加入ACPI Namespace裡?
雖然Microsoft的ASL Compiler裡有Loading Tables via the Registry的選項,
但是我的Windows不是Debug版本。
難道AML只能預先燒進到儲存RSDT或SSDT的韌體裡嗎?
作者 : weber(weber) 程式設計甘苦談優秀好手貼文超過200則人氣指數超過30000點
[ 貼文 302 | 人氣 33525 | 評價 2220 | 評價/貼文 7.35 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人sasayaki64註記此篇回應為最佳解答 2006/11/17 下午 06:11:41
沒錯, 你要乖乖加到 ACPI BIOS source code 中,
然後 compile 成 bin code, 燒到 EEPROM.

MS 的 system ACPI.SYS 在 Bootup 時, 會去搜尋 BIOS
中的 ASL code, 然後 enumerate 出ㄧ堆 ACPI device node.
Device Manager -> system device 中可以看到這些 node.

而要從 user mode App or Driver 去啟動對應的 AML code, 必須先
取得這些 ACPI device node.

7 年前我為了寫 ACPI Driver, 還向 BIOS RD 要 ACPI BIOS
來改 AML code. 所以還是多動動手.

後來華碩全系列 NB 都有裝這一支 ACPI driver.
作者 : sasayaki64(sasayaki64) 人氣指數超過10000點
[ 貼文 23 | 人氣 14382 | 評價 10 | 評價/貼文 0.43 | 送出評價 5 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/11/20 上午 08:14:42
大哥的回答真是致命的一擊,
因為我沒辦法拿到BIOS的源碼更不用說重新Compile了,
這些天的努力都沒用了,
看來還是只能直接讀寫IO控制SMBus了,
不過這樣應該不是Vista希望的吧^^
作者 : weber(weber) 程式設計甘苦談優秀好手貼文超過200則人氣指數超過30000點
[ 貼文 302 | 人氣 33525 | 評價 2220 | 評價/貼文 7.35 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/11/20 下午 01:51:29
就我知再 Windows 下, 要去動 SMBus 有 3 招.
1. I/O Port Driver - maintain 很費時, 又無聊.
2. BIOS SMI Mode - 偷開後門, 無規格.
3. ACPI Driver. - 正規做法

我早年搞 ASUS Probe 時, 常常遇到在不同的主機板上,
只要 EE layout 時使用不一樣的 SM Bus 時, 就要改
I/O Port Driver 的 IO address 來讀 Health Monitor 值.
實在是很煩又無聊.

BIOS SMI Mode 就是, 用 driver 發出 SMI 命令, 進入 BIOS system
manager mode, 由 BIOS 取執行 SM Bus access. 不過 driver 跟
BIOS SMI 之間無標準介面, 沒辦法達到心目中一網打盡的功能.

後來在 1999 年, 看到 ACPI BIOS 1.0 的 spec 時, 找到解脫之道.
Microsoft 搞 ACPI 的用意是, Hardware dependent 的東西, 全放在
ACPI BIOS 中, 然後用 MS 的 ACPI.sys(有點類似 interpreter),
在 Windows 下去讀 ACPI ASL code, 並執行之.

1999 年要導入 ACPI Driver 時, 也遇到 BIOS Team 很大的抗拒, 因為
BIOS team 不認為這是它們的工作. 後來是 Win2000 ㄧ定要用 ACPI BIOS,
且 ASUS NB 種類激增, BIOS team 無法負荷 OSD menu 的工作, 在
2002 年, 主動要求我提供 ACPI driver 的解決法.

在 NB 上的 Power Manager, Battery, CPU/Thermal Control 現都是使用
ACPI.SYS 來控制. 除了 MS default 規範的功能外, ACPI.SYS 還可以
customized 來擴充控制範圍. 像一些 NB embedded controller
, Hardware Access, WMI 都可以用 ACPI 去攔截.

像 ASUS 的 PC Probe, WinFlash, Power4Gear, OSD 等, 皆是透過 ACPI driver,
來省掉一大堆 maintain 的 effort.

只不過 MS 很賊, 它在 DDK 內不講有這種擴充功能, 也無類似的 sample code.
但卻跟 Intel 合作, 在 Intel 的網管軟體內, 偷用 WMI+ACPI 這種技術.
我自己摸索, 花了 3 個多月才搞出來.
作者 : seanchang(H) Assembly卓越專家貼文超過1000則
[ 貼文 1200 | 人氣 773 | 評價 3240 | 評價/貼文 2.7 | 送出評價 43 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/11/28 下午 04:59:26
>就我知再 Windows 下, 要去動 SMBus 有 3 招.
>1. I/O Port Driver - maintain 很費時, 又無聊.
>2. BIOS SMI Mode - 偷開後門, 無規格.
    這是我們之前的作法, 因此我們定義了一個interface.
>3. ACPI Driver. - 正規做法
    雖然我是做BIOS的, 不過我完全同意這個論點

>BIOS SMI Mode 就是, 用 driver 發出 SMI 命令, 進入 BIOS system
>manager mode, 由 BIOS 取執行 SM Bus access. 不過 driver 跟
>BIOS SMI 之間無標準介面, 沒辦法達到心目中一網打盡的功能.
    這是我們之前的作法, 也訂了一個適用自己公司的介面. 不過這個方法在Hyper threading和 Multi core CPU出現以後,就是一個麻煩. 因為會發SMI的CPU此時為不確定的.所以SMI 一但產生我們必須檢查所有的CPU core(real or virtual), 在必要的地方處理以確保上層可以得到正確的回應.


>1999 年要導入 ACPI Driver 時, 也遇到 BIOS Team 很大的抗拒, 因為
>BIOS team 不認為這是它們的工作. 後來是 Win2000 ㄧ定要用 ACPI BIOS,
>且 ASUS NB 種類激增, BIOS team 無法負荷 OSD menu 的工作, 在
>2002 年, 主動要求我提供 ACPI driver 的解決法.
這跟我不同, 我們是software team 有很大的抗拒. 由於我們不會寫driver, AP. 所以到現在還沒辦法實踐. 目前是逼迫software team 用I/O Port Driver的方式自己搞定. 只好software team什麼時候受不了來妥協.^_^

>
>在 NB 上的 Power Manager, Battery, CPU/Thermal Control 現都是使用
>ACPI.SYS 來控制. 除了 MS default 規範的功能外, ACPI.SYS 還可以
>customized 來擴充控制範圍. 像一些 NB embedded controller
>, Hardware Access, WMI 都可以用 ACPI 去攔截.
>
>像 ASUS 的 PC Probe, WinFlash, Power4Gear, OSD 等, 皆是透過 ACPI driver,
>來省掉一大堆 maintain 的 effort.
>
>只不過 MS 很賊, 它在 DDK 內不講有這種擴充功能, 也無類似的 sample code.
>但卻跟 Intel 合作, 在 Intel 的網管軟體內, 偷用 WMI+ACPI 這種技術.
>我自己摸索, 花了 3 個多月才搞出來.
>
如果您這麼熟driver都要花這些時間. 大概是這樣,我們的software team不想這樣做.

作者 : weber(weber) 程式設計甘苦談優秀好手貼文超過200則人氣指數超過30000點
[ 貼文 302 | 人氣 33525 | 評價 2220 | 評價/貼文 7.35 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/10 下午 10:15:54
更正:
ASL code 可以利用 MS ASL Loader,
將它 load into registry, 然後下參數.

將系統 reboot 後, MS ACPI.SYS 會去
registry 中讀 ASL code, 而不會到
ACPI BIOS 中去找. 所以你不用 ACPI BIOS
也可以實驗 ASL code. 除非你是在熟悉的
自家公司板子上實驗. 不然最好做些 hardware
indepent 的動作, 以免當機.

詳細用法去上 Microsoft Web Site.

這是我最近準備翻修 ACPI Driver 時,
看到 Microsoft 對 ACPI 最新的支援.
作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/15 上午 09:48:28
I/O Port Driver <--這部份可以使用Undocument API去開啟Ring 0 權限,做法是用User App去載入一個Driver,而這個Driver呼叫API去開啟Ring 0權限,那麼就可以直接在C++ Source code之中去使用IO function call() 或是直接使用Assembly code(IN/OUT) 去存取I/O。

我最近有去測試了Vista,這些Undocument API還可以在Vista 下使用,所以很容易的可以存取I/O而不用透過DeviceIoControl API方式與I/O Port Driver溝通,不過缺點跟I/O Port Driver一樣,你執行時必須要有管理者權限,因為我是透過SCM 去動態載入驅動程式....

VC++ Source code中直接使用I/O function call與Assembly code範例:
(1)
     mov dx,0x70
out dx,al
mov dx,0x71
in al, dx
     (2)
_outp(0x70,ireg.h );
rVal=_inp(0x71);

所以還在研究如何直接用Application 去改變權限,然後直接存取I/O 而不用透過IO Port Driver...(利用SeTcbPrivilege和使用ProcessUserModeIOPL structure呼叫undocumented Native API NtSetInformationProcess())

P.S 我也是寫BIOS的,不過還是菜鳥,很多Windows 的東西都不懂,目前就只會這些,我也很想學習去寫ACPI Driver 希望前輩可以多多指導,這些東西的資料要去哪邊找 ? ^^
作者 : weber(weber) 程式設計甘苦談優秀好手貼文超過200則人氣指數超過30000點
[ 貼文 302 | 人氣 33525 | 評價 2220 | 評價/貼文 7.35 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/23 下午 01:01:58
其實我覺得 ACPI BIOS 的最大貢獻有 2 點:

1. 架起 Application 跟 BIOS 溝通的橋樑.
   將 hardware dependent 放在 ASL,
   將 GUI/OS/Driver dependent 放在 application.
   然後聯手出擊, 這會遠比以往單靠 BIOS SMI 處理法,
   帶來更多附加價值, 實現更多創意.

2. 簡化許多無聊的 maintain 工作.
   其實一堆碩士 programmer,
   有 70% 工作時間, 都是在做 maintain 工作.
   講白一點, 把碩士拿來當作業員用.
   而有些碩士確安於過這種工作模式. 導致毫無競爭力.
  
   我的策略是, 制定良好的軟體架構, 降低 maintain effort,
   啟用大量大陸 programmer 來做 maintain job.
   台灣留 1 組實作軟體架構, 導入新技術, 導 algorithm
   的軟體團隊. 唯有如此, 才能運用大陸優勢的人力薪資,
   又不用怕技術外流, 而且可應付日增的 project.

你目前這種作法, 適合在種類少的產品上應用.
一但遇上 20, 30 幾種產品時, 你光改 application
去 meet different hardware, 就改翻天.

ACPI 資料上 WWW.ACPI.ORG, MS 網站找,
如果你也想知道 ACPI interpreter 的實作,
可以去挖 Linux 2.6.20 的 ACPI Driver
open source code 來看.
作者 : luobing4365(robin)
[ 貼文 3 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/6/21 下午 12:53:47
各位前辈,最近也遇到类似的问题。我自己做了一个smbus设备,希望在OS层访问。目前制定了两个方案:
1 通过 I/O Port去访问设备;
2 call acpi driver去访问。
第2个方案的研究过程中,用到《SMBus Device Driver External Architecture Specification》,它提供了GUID_SMB去获取handler,我按照代码去调试,没有获取成功。并且在系统中也没有发现smbhc.sys和smbclass.sys,微软的文档有错吗?
问了bios工程师,需要在acpi中提供对应的method,才可以访问,并且也说不清楚应该怎么去访问。
第1个方案我在Intel主板上已经成功了,一位前辈告诉我,可能存在冲突。我一直想不明白,会有什么冲突,到底应该怎么去防止冲突。因为我所在的公司没有办法得到其他厂商的南桥资料,所以也没办法去做其他厂商主板的访问。
我的问题:
1 我的这些方法是否正确?
2 如果我采用方案2,是不是bios必须要提供相应的支持,还是说现在的bios已经都做好了这样的支持?
3 我找了很久,只找到smartbattery的例子,不知道怎么安装调试,哪位前辈可以指点一二?
4 第1个方案的冲突是怎么回事情,各位前辈写的I/O 方式的时候遇到过这样的问题吗,如何防止?

谢谢^^
 板主 : 徵求中
 > 驅動程式 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 驅動程式 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
驅動程式
1 新兵衛 1240 
2 eBoy 980 
3 牧童哥 780 
4 北極熊 580 
5 天行者 580 
6 燒酒仙 440 
7 weber 380 
8 KEN 350 
9 jonay 180 
10 掌握文武半邊天 180 
驅動程式
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
6.298828E-02