波波逸思的部落格 :: 隨意窩 Xuite日誌
    1. 沒有新回應!






  • 如何使用RSS
    Powered by Xuite
  • 搜尋
  • 網頁載入中,請稍候...
  • 2011-10-11 23:06[misc] My Fork; My Spoon

    Steins;Gate第十四話 "現在最想要My Fork,因為我已經有My Spoon". 我一直不瞭解這個意思. 網路上也一直沒看到什麼比較合理的解釋, 剛剛看到Broadcaster Hoshinomaster 問他的英文老師, 有個解釋.可能是my falk my spouse的同音字,falk spouse都好=家庭和諧. 而Steins;Gate第十四話 "現在最想要My Fork,因為我已經有My Spoon" 是不是意指"現在最想跟父親和解,因為我已經找到很好的異性朋友". 這是我覺得較合理的解釋.

    (繼續閱讀)

    以前, 就知道LD_LIBRARY_PATH可以優先指定library的路徑,

    因為最近要編譯sudo給WL700gE使用,

    卻發現LD_LIBRARY_PATH是對sudo無法產生效果,

    查了一下是因為有suid的檔案,

    是不會使用LD_LIBRARY_PATH的路徑去載入library.

    可是我又不想要build成static file.

    又查了一下,gcc有個-rpath的參數,

    可以直接指定elf檔要從哪個路徑載入library.

    這就可以解決掉suid的檔案不能用LD_LIBRARY_PATH.

    範例如下:

    #gcc -Wl,-rpath,/opt/lib -o sudo sudo.c

    如果想要檢查有沒有設成功,

    可以用

    #readelf -d sudo | grep RPATH

    0x0000000f (RPATH)       Library rpath: [/opt/lib]

    這就沒問題了...:)

    前幾天, 又update了一份自己編譯的Image,

    不知怎搞的,就再也連不進去WL700gE了.

    用Asus的FirmWare Restoration 也沒有反應.

    在好幾次的try and error之後.

    發現到, 如果, 你一開始就ping那臺WL700gE的,

    然後在一開始開機時, 就一直按著szSetup那按鈕,

    你會得到 TTL=100 的回應,

    Reply from 192.168.1.1: bytes=32 time<1ms TTL=100

    這時候你可以用tftp把 pivot_root.trx (註1) upload進WL700gE裡.

    之後再等個20幾秒, 再重新開機.

    重開機後,如果你還是有按下szSetup,

    看到 TTL=100時放掉,

    等到ping沒有回應時,再按下szSetup,

    應該會再一次得到回應,但這次TTL=64,

    Reply from 192.168.1.1: bytes=32 time<1ms TTL=64

    而這次就可以用Asus的FirmWare Restoration去還原回原來的Image了.

     

    註1:

    你可以去Asus的網站下載原始碼 GPL_WL700gE_1078.rar ,

    解開後,你可以找到這個檔案,

    WL700gE_FW_1.0.7.8_GPL/nasoc/src/apps/pivot_root/mipsel/pivot_root.trx.

    就可以用tftp upload上去.

     

    如果你跟我一樣,不喜歡win7把一些目錄名稱 localized.

    例如: C:\Users => C:\使用者

    Google了一下,發現是在 Desktop.ini 裡面,

    指定了所要使用的名稱.

    所以解決方法很簡單,

    就是把 Desktop.ini 裡面的

    LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-21813

    這一行給移除掉,

    或者只像我在前面加個#字號,

    免得以後後悔還可以改回來.

    所以,像是"桌面","下載"等等的目錄名稱,

    都是一樣的方法可以去除掉.

    因為最近在研究AMD CPU的控制電壓頻率的方法,

    想來寫個rmclock-like的程式.

    最主要的原因是rmclock沒有再更新了,

    手上這顆AMD Phenome X2不支援,

    只好自己來寫寫看嚕~

    因為需要讓每顆CPU都要設定到,

    所以使用SetThreadAffinityMask去設定要用哪顆CPU,

    之後再Call Sleep(1),

    這是讓目前的thread有機會content-switch.

    這樣下次再被執行時,就會根據 AffinityMask 去挑選 CPU.

    問題是, 這時候我想到那我怎麼確定目前thread有在某顆CPU上執行.

    直覺上, 覺得 CPUID 這個x86指令應該會提供,

    找了半天找到了一個ACPI ID.

    你可以用CPUID EAX:1 得到在 EBX 的 31:24,

    這就是 ACPI ID.

    而在網路上找到這段話,

    In MP systems, the local APIC ID is also used as a processor ID by the BIOS and the operating system. Some processors permit software to modify the APIC ID. However, the ability of software to modify the APIC ID is processor model specific. Because of this, operating system software should avoid writing to the local APIC ID register. The value returned by bits 31-24 of the EBX register (when the CPUID instruction is executed with a source operand value of 1 in the EAX register) is always the Initial APIC ID (determined by the platform initialization). This is true even if software has changed the value in the Local APIC ID register.

    在我這台notebook上試了一下.

    在CPU 0 是會對應到 ACPI ID: 0,

    而在CPU 1 則會對應到 ACPI ID: 1,

    基本上是沒問題的,

    但我換到另一台i5是四核心,

    卻出現了0,2,4,6,

    查了一下,似乎是因為 i5 是有 hyper-threading,

    但是被disabled掉, 就會出現這種情況.

    後來, T同事找到一個API KeGetcurrentProcessorNumber,

    但是這個API是要在 kernel 裡使用的.

    靈機一動, Google 看看有沒有 GetcurrentProcessorNumber,

    沒想到還真的有這個API.

    DWORD WINAPI GetCurrentProcessorNumber(void);

    但只有 vista 之後才可以使用.

    不過, 這也足夠了.

     

    第一頁  上一頁  1 2 3 4 5 6 7 8 9 10 下一頁  最後頁