![]() |
學校地址:湖南省 長沙市 雨花區 車站南路紅花坡路口 |
![]() |
學校地址:湖南省 長沙市 雨花區 車站南路紅花坡路口 |
大家經常能夠看到關于FIRMWARE討論的文章,感覺大家對FIRMWARE還是比較生疏,有的居然想出一些拆掉芯片用編程器燒錄后再焊回去的方式,這種方式千萬不能使用,因為一些隱含的問題會發生。具體的問題不必多說大家都會明白。
為什么很難獲得FIRMWARE?
作為一個程序員,我這里幾乎有全部種類的FIRMWARE,但是,有些不能公開,有的是為一些廠商而做的,是規定收取費用的種類,有的是內部測試版本,針對特定的方案而專門編寫的,不能公開。一般公開的版本號有特別的規定,不能高于市場正在銷售的版本。
1.對于普通用戶來說,有沒有升級硬盤固伯的必要?如果有,什么情況下推薦升級Firmware?
2.如果真的要升級硬件固件,是如何升級?跟升級DVD的Firmware一樣的道理,即跟涮新BIOS相似的道理和過程?
3.廠商會不會不斷升級Firmware,就像升級驅動程序一樣,不斷更新版本?這就想請你深入探討一下Firmware的作用了...
1.對于普通用戶來說,有沒有升級硬盤固伯的必要?如果有,什么情況下推薦升級Firmware?
>>對于普通用戶來說,沒有必要升級硬盤固件,一般微小的缺陷可以在軟件里使用補丁程序解決。除非和適配器的兼容性存在問題或者彌補硬件的某些缺陷,廠家才會推出升級的程序(括全部升級或部分補丁升級)。這里要著重說一下補丁,補丁具有很嚴密的針對性,不是每個同型號的產品都適用補丁,不正當的升級會導致嚴重的問題。
2.如果真的要升級硬件固件,是如何升級?跟升級DVD的Firmware一樣的道理,即跟涮新BIOS相似的道理和過程?
>>PC里的SCSI硬盤升級程序只是一個傳送升級代碼的程序,是把升級代碼送到硬盤緩沖里,然后讓硬盤的DSP運行升級代碼,升級代碼運行過程中執行升級過程并修改EEPROM相應的區域,這時候升級程序進入了狀態監視過程。
你們看到的FIRMWARE為什么和EEPROM的大小不一樣,現在該明白是什么原因了吧。
3.廠家會不會不斷升級Firmware,就像升級驅動程序一樣,不斷更新版本?這就想請你深入探討一下Firmware的作用了...
>>廠家會不斷升級Firmware,并且應用到新生產的產品中去,但是廠家不會公開發布FIRMWARE,只有當廠家判定你的硬盤確實需要升級的時候才會給你。當然對于升級的后果廠家不會承擔任何責任。FIRMWARE的作用,打個比方硬盤的控制板是臺電腦,FIRNWARE就是操作系統,它括很多模塊:驅動,控制,解碼,傳送,檢測……
低級格式化,大家可能不陌生,很多SCSI卡的BIOS里都帶了個小工具可以做到,但是如果我問你格式化進行到多少了,你就不能回答上來了,能不能象校驗磁盤一樣可以看到進度呢,答案是肯定的。不過是讓硬盤的FIRMWARE一個一個BLOCK的執行格式化,發現壞道就把他仍到P——LIST里,格完了還不需要校驗,更省時間,剩下的咱們不過是作個狀態監視就可以了。
既然是硬盤的FIRMWARE來執行格式化,不需要占用系統的資源那樣就可以幾個硬盤一起來格式化,一個狀態監視他們所有設備的進度,更省了大家的時間。
這個功能其實是硬盤固件的功能,你讓它開始格式化了,你還可以用計算機干其他的活兒,只要不斷電,硬盤會一直到任務完成為止,在這期間內,即使你拔掉信號線也終止不了任務。
上次說到低級格式化,涉及到缺陷列表的問題,看了這里好多的帖子,大家對缺陷列表的分類還是不明確,實際缺陷列表分為四類,1PLIST,2GLIST,3CLIST,4DLIST。
明確了這幾個列表的區別,才能更好的編制FIRMWARE來管理自己的硬盤,維護自己的數據。
1,PLIST,基本缺陷列表是廠家使用專門的測試設備發現的缺陷,這些缺陷是磁介質壽命完成之后產生的永久缺陷,對于非廠家來說是不能夠取消的,只能使用特別的設備來增加它,因為有GLIST,一般沒有必要去動它,所以有些廠家的新銷售磁盤里的GLIST的列表并不是空的。
2,GLIST,成長缺陷列表,對硬盤操作過程中發現的缺陷,這些缺陷可以在格式化的過程中發現,也可以由自動的(就是上面所說的讓FIRMWARE自動格式過程)或者使用REASSIGN BLOCK(操作碼為0X07,上面的程序里有例子)命令做重新分配的過程中發現。
3,CLIST,檢查列表,含了在操作系統格式化過程中發現的列表,一般也存儲為GLIST方式,
4,DLIST,可以人為定義的列表,先定義了這個列表, 后由系統傳送給硬盤的缺陷列表,在格式化的過程中,它將變成GLIST的一部分。也可以把好的塊定義進去。
實際234 后都存儲在GLIST列表里,這個GLIST總的列表和存儲PLIST的列表也是存放在一起的,都在磁盤的介質上。對于一些軟件表面看來是兩個大類,但是實際上由于產生的原因不同,軟件所發出的指令也是不一樣的。這點對一般人來說怎么分類不重要。
硬盤的代替扇區和柱面,模式頁參數和缺陷列表都是存儲在盤體的磁介質上的,這些參數和VID,PID,LBA(not LBN)等基本參數是分開的。從這一點大家可以想象,修改了FIRMWARE后還要修改盤片上的一些信息。一般情況下,修改了FIRMWARE后,低級格式化可以恢復一部分FIRMWARE預制的參數到盤片上,但是有些預制參數往往是編寫FIRMWARE時任意設置的,如果造成了數據偏移,就會使GLIST出現錯誤,SCSI的GLIST列表記錄一般 大為2000H(8191)個.發現接近或超過這個數目的GLIST記錄,那這個硬盤可能就報廢了。
另外說明一點,GLIST是可以讀取(0X37)清除(格式化)的,但是清楚以后故障還會存在。
再放一段程序便于你們理解。
int glist(SCSI *sp)
{
SCSI *s;
int al= 8, retval= -1, rv, format;
char format_mask[]= { 0x00, 0x04, 0x05, 0 };
int format_size[]= { 4,8,8,0 };
s= scsi_init(al);
idcpy(s, sp);
s->s.scsi_command[0]= 0x37;
s->s.scsi_command[2]= 0x08;
*(unsigned int *) &s->s.scsi_command[7]= swapint(al);
for (rv= 0, format= 0; format < 3 && rv!= 1; format++)
{
s->s.scsi_command[2]&= 0xf8;
s->s.scsi_command[2]|= format_mask[format];
rv= scsi_execute(s, 0);
}
format--;
if (rv== 1)
{
retval= swapint(*(unsigned int *)&s->s.data_buffer[2])
format_size[format];
}
scsi_destroy(s);
return(retval);
}
|
|