none
[CE6] RESUME 之後產生 VMProcessPageFault RRS feed

  • 問題

  • 並非是因為"K" flag or power on/off api 中使用了類似SLEEP() function.

    我有二顆64MB的RAM. 但二顆RAM在實體位址上並不連續.

    nk.bin 的大小只要超過64M..跨到了第二顆RAM.

    使用power button driver suspend,

    resume之後就會有VMProcessPageFault 的訊息.

    但是用"start\suspend",再resume就不會發生.

    start\suspend使用的是GWESpowerOff();

    在power button driver使用相同的API也是會ERROR的狀況.

    但是在runtime的時候一直執行程式使用到第二顆RAM都沒有問題.

    請問..有人碰過這種實體位址不連續的RAM要怎麼使用嗎?

     

     

     

     

    2011年12月1日 上午 08:45

解答

  • 1. 很久以前的經驗中, NK 所在的地方必須是 Physical continuous, 不然無法BOOTUP, 不過看來 RyanLin_taiwan 己沒遇到這個問題.

    2. Physical 不連續僅能用 OEMGetExtensionDRAM 將其接起來, 不可在 config.bib 中直接視為一塊 virtual 連續.

    3. 有的CPU在同一 chip select 內其未解碼位址有映射關係, 例如 cs0 定址空間為 0000 - 1000, 但只有 0000 - 03FF 有接記憶體, 有的CPU在 access 0400 or 0800 時, 都會去 0000 抓資料, 但有的CPU會產生 data abort. 若是有映射關係, 則可嘗試看看可不可以將兩塊記憶體合成一塊連續位址.

    4. 若是在 AP 層即可正常, 那最簡單的方式就是寫一個小AP, 並在 HKLM\Init 中加入讓其開機時就執行起來.

    Paul, Chao @ Techware

     

    2011年12月10日 上午 06:01

所有回覆

  • 做了一些實驗..

     

    把Wait Suspend 的thread

    放在ap層隨便一個exe檔

    和放在DRIVER層隨便一個DRIVER.

     

    一樣從POWER BUTTON DRIVER

    去送一個EVENT 讓該THREAD執行SUSPEND

     

    結果從AP層進SUSPEND而回來的..都正常.

    從DRIVER層進SUSPEND而回來的.都VMProcessPageFault.

    2011年12月2日 上午 06:37
  • 1. 很久以前的經驗中, NK 所在的地方必須是 Physical continuous, 不然無法BOOTUP, 不過看來 RyanLin_taiwan 己沒遇到這個問題.

    2. Physical 不連續僅能用 OEMGetExtensionDRAM 將其接起來, 不可在 config.bib 中直接視為一塊 virtual 連續.

    3. 有的CPU在同一 chip select 內其未解碼位址有映射關係, 例如 cs0 定址空間為 0000 - 1000, 但只有 0000 - 03FF 有接記憶體, 有的CPU在 access 0400 or 0800 時, 都會去 0000 抓資料, 但有的CPU會產生 data abort. 若是有映射關係, 則可嘗試看看可不可以將兩塊記憶體合成一塊連續位址.

    4. 若是在 AP 層即可正常, 那最簡單的方式就是寫一個小AP, 並在 HKLM\Init 中加入讓其開機時就執行起來.

    Paul, Chao @ Techware

     

    2011年12月10日 上午 06:01