Gå till innehåll
Just nu i M3-nätverket

Huawei patch


Anvil

Rekommendera Poster

Hej,

Jag skaffade nyligen ett 3G USB modem av typen Huawei E220...

 

Och märkte efter några timmars användande att disk aktiviteten samt datorn kändes lite långsammare medans jag var uppkopplad, och började undersöka...

 

Jag fan ganska snabbt att syslogd ockuperade en ganska betydande mängd processor uppmärksamhet- och lokaliserade användandet till Huaweis drivrutin, som spammade systemloggen med onödiga debug meddelanden (som borde vara avstängda för release produkt)

 

Jag sökte runt lite på nätet och uppmärksammade att fler märkt av detta- vissa till den grad att deras datorer knappt var användbara medans dom surfade, Huawei själva har uppenbarligen inte gjort något åt problemet- Så jag beslutade mig för att ta tag i det själv.

 

Problemet är nu av löst- och förutom att datorn blev rappare i sig, mindre skräp i loggen- så märkte jag även att hastigheten på anslutningen gick upp en bit.

 

Så jag är nöjd, drivrutinen som avses är den som ligger på modemet som standard. Om någon har enorma problem att lokalisera denna så PM:a så kan jag skicka komplett drivrutin, men för att undvika problem med upphovsrättighet osv så valde jag att återge den i källkod- ifrom av en självgående patch.

 

Användandet är enkelt, men kräver att du har utvecklingsverktyg installerade.

 

Spara ner allt inom paragrafen "code" till en vanlig fil- döp filen patch.c och placera på skrivbordet

öppna sedan Terminalen, och skriv gcc ~/Desktop/patch.c -o huaweipatch

därefter om du är uppkopplad på modemet, koppla ner.

skriv sedan sudo ./huaweipatch

slå in ditt lösenord och tryck enter.

Om allt gick som det skulle ska följande stå i terminal fönstret

 

"Everything seems fine.

Applying 60 bytes

We're done.

Reboot your system and enjoy"

 

Efter en omstart så bör även du vara nöjdare med ditt 3G modem :)

 

OBS- detta ska fungera ihop med samtliga Huawei modem, men jag har personligen enbart testat det med E220.

 

/*
DO NOT EDIT! GENERATED CODE!

Patch code generated by PATCHTOC (Fredrik Andersson -2008)
Patch generated by CMPTOPATCH (Fredrik Andersson -2008)

Huawei patch analysed and created by Fredrik Andersson <fredrikandersson@mac.com> -2009	

Description:
This patch will silent the Huawei datacard driver (used by most Huawei products) and prevent it from flooding the systemlog with 
irrelevant debugdata- why the driver even reached the public in this condition is for me a big question mark- seeing how it actually
creates tons of data in the log files- a few hours can easially result in MBs of data. 

Besides the obvious diskusage- this patch does infact ease the drivers processor load- and as a side effect even increase the throughput
this is of course dependent on the CPU used, this patch will ONLY work on INTEL MACS! 

If there is interest I'll make a PowerPC patch aswell, however right now I don't have access to any PowerPC mac.
																																			*/

#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/stat.h>

typedef struct patchinfo{ unsigned long addr; unsigned char old; unsigned char data;}patchinfo;

patchinfo patchdata[]={
				{ 0x00000513 , 0xe8 , 0x90 } , { 0x00000514 , 0xc4 , 0x90 } , { 0x00000515 , 0xfd , 0x90 } , { 0x00000516 , 0xff , 0x90 } , 
				{ 0x00000517 , 0xff , 0x90 } , { 0x00000554 , 0xe8 , 0x90 } , { 0x00000555 , 0x83 , 0x90 } , { 0x00000556 , 0xfd , 0x90 } , 
				{ 0x00000557 , 0xff , 0x90 } , { 0x00000558 , 0xff , 0x90 } , { 0x0000056b , 0xe8 , 0x90 } , { 0x0000056c , 0x6c , 0x90 } , 
				{ 0x0000056d , 0xfd , 0x90 } , { 0x0000056e , 0xff , 0x90 } , { 0x0000056f , 0xff , 0x90 } , { 0x0000057c , 0xe8 , 0x90 } , 
				{ 0x0000057d , 0x5b , 0x90 } , { 0x0000057e , 0xfd , 0x90 } , { 0x0000057f , 0xff , 0x90 } , { 0x00000580 , 0xff , 0x90 } , 
				{ 0x0000058d , 0xe8 , 0x90 } , { 0x0000058e , 0x4a , 0x90 } , { 0x0000058f , 0xfd , 0x90 } , { 0x00000590 , 0xff , 0x90 } , 
				{ 0x00000591 , 0xff , 0x90 } , { 0x0000059b , 0xe8 , 0x90 } , { 0x0000059c , 0x3c , 0x90 } , { 0x0000059d , 0xfd , 0x90 } , 
				{ 0x0000059e , 0xff , 0x90 } , { 0x0000059f , 0xff , 0x90 } , { 0x00000639 , 0xe8 , 0x90 } , { 0x0000063a , 0x9e , 0x90 } , 
				{ 0x0000063b , 0xfc , 0x90 } , { 0x0000063c , 0xff , 0x90 } , { 0x0000063d , 0xff , 0x90 } , { 0x00000679 , 0xe8 , 0x90 } , 
				{ 0x0000067a , 0x5e , 0x90 } , { 0x0000067b , 0xfc , 0x90 } , { 0x0000067c , 0xff , 0x90 } , { 0x0000067d , 0xff , 0x90 } , 
				{ 0x00000690 , 0xe8 , 0x90 } , { 0x00000691 , 0x47 , 0x90 } , { 0x00000692 , 0xfc , 0x90 } , { 0x00000693 , 0xff , 0x90 } , 
				{ 0x00000694 , 0xff , 0x90 } , { 0x000006a1 , 0xe8 , 0x90 } , { 0x000006a2 , 0x36 , 0x90 } , { 0x000006a3 , 0xfc , 0x90 } , 
				{ 0x000006a4 , 0xff , 0x90 } , { 0x000006a5 , 0xff , 0x90 } , { 0x000006b2 , 0xe8 , 0x90 } , { 0x000006b3 , 0x25 , 0x90 } , 
				{ 0x000006b4 , 0xfc , 0x90 } , { 0x000006b5 , 0xff , 0x90 } , { 0x000006b6 , 0xff , 0x90 } , { 0x000006c8 , 0xe8 , 0x90 } , 
				{ 0x000006c9 , 0x0f , 0x90 } , { 0x000006ca , 0xfc , 0x90 } , { 0x000006cb , 0xff , 0x90 } , { 0x000006cc , 0xff , 0x90 } , 
				{ 0x000006cc , 0xff , 0x90 } };

#define kPatchTarget "/System/Library/Extensions/HuaweiDataCardDriver.kext/Contents/MacOS/HuaweiDataCardDriver"
#define kPatchSize ((sizeof(patchdata)/sizeof(patchinfo))-1)

int main(int argc,char **argv)
{
int patchfile;
char *binaryinterface;
struct stat pstat;
int x;

/* Quick hack- to make sure this works even for kernel extensions... --- FCA -09 */
if(geteuid()!=0)
{
	printf("Sorry, you need to be a superuser\n");
	printf("usage: sudo %s\n",argv[0]);
	return 0;
}

if((patchfile=open(kPatchTarget,O_RDWR))==-1){perror("open");return 0;}
if(stat(kPatchTarget,&pstat)==-1){perror("stat");return 0;}
if((binaryinterface=(char*)mmap(0,pstat.st_size, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, patchfile, 0))==-1){ perror("mmap"); return 0; }

for(x=0;x<=kPatchSize;x++)
{
	if((unsigned char)binaryinterface[patchdata[x].addr]!=patchdata[x].old)
	{
		printf("Sorry, seems like you've got another version of the target file.\n");
		return 0;
	}
}
printf("Everything seems fine.\nApplying %d bytes\n",kPatchSize);
for(x=0;x<=kPatchSize;x++)
	binaryinterface[patchdata[x].addr]=(char)patchdata[x].data;
printf("We're done.\nReboot your system and enjoy.\n");
close(patchfile);
}

Länk till kommentar
Dela på andra webbplatser

  • 8 months later...

Hej Anvil!

 

Väldigt bra initiativ! Får det dock inte att fungera. Jag har laddat ner följande driver:

 

E220 Client Software MACHOSTB023D01SP00C03 for Mac (1298 KB) 01-Apr-2008

 

från..

 

http://www.huawei.com/mobileweb/en/doc/lis...e=-1&id=736

 

Jag kör en macbook pro intel-processor och har utvecklingverktyg installerade.

 

Men patchen påstår ändå, citat "Sorry, seems like you've got another version of the target file."

 

Har du nåt tips?

 

Mvh Ola

Länk till kommentar
Dela på andra webbplatser

  • 2 months later...
Hej Anvil!

 

Väldigt bra initiativ! Får det dock inte att fungera. Jag har laddat ner följande driver:

 

E220 Client Software MACHOSTB023D01SP00C03 for Mac (1298 KB) 01-Apr-2008

 

från..

 

http://www.huawei.com/mobileweb/en/doc/lis...e=-1&id=736

 

Jag kör en macbook pro intel-processor och har utvecklingverktyg installerade.

 

Men patchen påstår ändå, citat "Sorry, seems like you've got another version of the target file."

 

Har du nåt tips?

 

Mvh Ola

 

Jag minns tyvärr inte vilka drivrutiner patchen var gjord för, men troligtvis nyare än apr 2008.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.



×
×
  • Skapa nytt...