如何修改wince s3c2410 的MAC位址?

2021-04-19 22:13:21 字數 2645 閱讀 9592

wince中的mac位址是在驅動中寫死的。如果不修改會造成一些網路方面的功能故障。比如不能互ping。

下面是我解決的方法:

1.新增如下登錄檔

[hkey_local_machine/comm/cs8900/parms]

"mac12"=dword:3322

"mac34"=dword:5544

"mac56"=dword:0f66

2.修改cs8900驅動

在cs8900.c檔案中,作如下修改:

word imac3=;  //新增mac位址的原始資料

//新增函式,讀取登錄檔中的mac位址的值

void readregsister()

dwstatus = regqueryvalueex(hkmac, _t("mac34"), null, &dwtype, (lpbyte) &mac, &dwsize);  

if (dwstatus == error_success)

dwstatus = regqueryvalueex(hkmac, _t("mac56"), null, &dwtype, (lpbyte) &mac, &dwsize);  

if (dwstatus == error_success)}}

int initcs()

boolean cs8900readethernetaddress(

in pcs8900_adapter adapter

)return(true);

}編譯後就可以了,這樣就讓驅動是從登錄檔中讀取mac位址了。那麼接下來我們就有辦法修改這個mac位址了。

3.寫**修改登錄檔

下面是關鍵**:

void cwincemacdlg::readregsister()

dwstatus = regqueryvalueex(hkmac, _t("mac34"), null, &dwtype, (lpbyte) &mac, &dwsize);

if (dwstatus == error_success)

dwstatus = regqueryvalueex(hkmac, _t("mac56"), null, &dwtype, (lpbyte) &mac, &dwsize);

if (dwstatus == error_success)

}regclosekey( hkmac );

updatedata(false);

}void cwincemacdlg::writeregsister()

;byte * lpbuffer;

updatedata(true);

value=0;

wsprintf(num,l"0x%s", m_edt1.getbuffer(0));

value += _ttoi(num)<<8;

wsprintf(num,l"0x%s", m_edt0.getbuffer(0));

value += _ttoi(num);

lpbuffer = (byte *)&value;

regsetvalueex(hkmac, _t("mac12"), 0, reg_dword, lpbuffer,dwsize);

value=0;

wsprintf(num,l"0x%s", m_edt3.getbuffer(0));

value += _ttoi(num)<<8;

wsprintf(num,l"0x%s", m_edt2.getbuffer(0));

value += _ttoi(num);

lpbuffer = (byte *)&value;

regsetvalueex(hkmac, _t("mac34"), 0, reg_dword, lpbuffer,dwsize);

value=0;

wsprintf(num,l"0x%s", m_edt5.getbuffer(0));

value += _ttoi(num)<<8;

wsprintf(num,l"0x%s", m_edt4.getbuffer(0));

value += _ttoi(num);

lpbuffer = (byte *)&value;

regsetvalueex(hkmac, _t("mac56"), 0, reg_dword, lpbuffer,dwsize);

}regclosekey( hkmac );}

4.如果有外接eeprom之類的話,那麼一般是寫在eeprom裡面的,而不是寫登錄檔。如果這種實現方式必須採用hive方式的登錄檔。不然也是儲存不了的。

5.特別說明

mac位址一般由12個16進製制數字組成,每2個為一組,前面3組代表網路硬體製造商的編號,這個一般是由ieee來分配。

後面3組代表該製造商所製造的某個網路產品的序列號。這樣也就為什麼我們說mac位址是唯一的了(當然前提是你沒有自己修改過)。

wince驅動由於比較特殊,6組值要寫入3個io裡面乙個io只能寫入16個位元組,為了方便我就不按照正常定義為兩個部分,

而是簡單定義成3個部分,這樣容易寫**。

必須說明的是mac位址前3組值不是能隨便更改的,我們一般就改動後3組就行了。非要改就要找乙個製造商的編號才行。

另外如果不修改mac位址不組網是沒有問題的,但是如果組網就會有一些小問題,比如ping,wince之間無法相互ping。當然還有別的。

如何修改wince s3c2410 的MAC位址?

wince中的mac位址是在驅動中寫死的。如果不修改會造成一些網路方面的功能故障。比如不能互ping。下面是我解決的方法 1.新增如下登錄檔 hkey local machine comm cs8900 parms mac12 dword 3322 mac34 dword 5544 mac56 dw...

3 Git如何管理修改

git跟蹤並管理修改,而非檔案。做實驗驗證。第一步,對readme.txt做乙個修改,比如加一行內容 cat readme.txt git is a distributed version control system.git is free software distributed under t...

如何修改Firefox 3快取Cache的位置

安裝了firefox,在進行設定的時候,發現沒有臨時資料夾位置的修改.為了避免使系統盤產生磁碟碎片,我們最好把所有臨時資料夾都放到非系統盤,如e盤。詳細修改步驟如下 1 開啟firefox瀏覽器 2 在位址列輸入 about config 3 查詢browser.cache.disk.parent ...