avia_av_core.c avia600.ux bzw. avia500.ux löschen

Sklaventreiber
gweny
Interessierter
Interessierter
Beiträge: 64
Registriert: Montag 13. Juni 2005, 17:51

avia_av_core.c avia600.ux bzw. avia500.ux löschen

Beitrag von gweny »

hallo leute,

in der avia_av_core.c wird ja abgefragt welche firmware geladen werden soll.
so dachte ich mir ich bau da nach der abfrage nen remove rein u. lass die unnötige firm durch den treiber löschen, aber das klappt nicht.
folgendes hab ich versucht


#include <stdio.h>
remove("/var/tuxbox/ucodes/avia600.ux");

dies führt aber leider dazu das der treiber danach nicht mehr läuft u. ich nur mehr unresolved symbols habe.
gibts da ne lösung die auch funktioniert ? bzw. gibts da nen befehl der auch funktioniert ?
::::....Power-Board....::::
2xNokiaDB2
1xDream7000
AudioSlyer
Erleuchteter
Erleuchteter
Beiträge: 450
Registriert: Sonntag 28. Juli 2002, 01:18

Beitrag von AudioSlyer »

Oha,
ist es denn auch ein "jffs2_only" Image, sonst ist nichts mit löschen.
Einfacher wäre es die Abfrage in die rcS einzubauen. Dateilöschungen haben nichts im Treiber zu suchen.

:gruebel:
Gorcon
Tuxboxer
Tuxboxer
Beiträge: 5873
Registriert: Samstag 23. Februar 2002, 22:46

Beitrag von Gorcon »

ist es denn auch ein "jffs2_only" Image, sonst ist nichts mit löschen.
Warum? Die Datei ist doch im jffs Bereich(/var/tuxbox/ucodes/avia600.ux). :wink:
AudioSlyer
Erleuchteter
Erleuchteter
Beiträge: 450
Registriert: Sonntag 28. Juli 2002, 01:18

Beitrag von AudioSlyer »

bei mir nicht ;)
Gorcon
Tuxboxer
Tuxboxer
Beiträge: 5873
Registriert: Samstag 23. Februar 2002, 22:46

Beitrag von Gorcon »

Dann hast Du aber ein komisches Image. :lol: :wink:
rasc
Senior Member
Beiträge: 5071
Registriert: Dienstag 18. September 2001, 00:00

Beitrag von rasc »

Warum soll die Firmware gelöscht werden???

Ich habe immer alle Ucodes auf meinem CDK, damit ich mehrere Boxen booten kann. Wenn da gelöscht wird, wäre das nicht so schön.
gweny
Interessierter
Interessierter
Beiträge: 64
Registriert: Montag 13. Juni 2005, 17:51

Beitrag von gweny »

so die besten ;) ...
@AudioSlyer
1.) jou is ein jffsonly
2.) wäre das wohl egal, denn var is überall beschreibbar, außer du hast das ganze image so gepackt das es nicht beschreibbar sein sollte.
3.) jou wäre schön wenn ich dafür den code wüßte bzw. wüßte was ich abfragen soll, um es über das rcS-script zu machen.
4.) hab ich bis jetz nur in dieser datei ne abfage gefunden, die den chip gewisser maßen identifiziert u. somit die richtige firm lädt. deshalb von mir mal dort der erste ansatz.

@rasc
weil ich mein image auch auf mehreren boxen einsetze u. mir der platz schön langsam zu eng wird in meinem jffsonly. u. 128kb sind auch ne menge!
::::....Power-Board....::::
2xNokiaDB2
1xDream7000
zor
Einsteiger
Einsteiger
Beiträge: 337
Registriert: Mittwoch 2. April 2003, 18:55

Beitrag von zor »

@gweny

http://cvs.tuxbox-cvs.sourceforge.net/c ... iew=markup

ist mal interessant durchzustöbern was da alles so abläuft.. ;-)

Code: Alles auswählen

if [ -e /var/etc/.ich_hab_600er ]; then
	#lade 600er
else
	#lade 500er
fi
gruss zor
gweny
Interessierter
Interessierter
Beiträge: 64
Registriert: Montag 13. Juni 2005, 17:51

Beitrag von gweny »

@zor
also das hilft mir net viel weiter ....
hab da nix gefunden was da ausgibt welchen aviachip ich da habe ...
::::....Power-Board....::::
2xNokiaDB2
1xDream7000
CarstenW
Erleuchteter
Erleuchteter
Beiträge: 416
Registriert: Mittwoch 17. Januar 2007, 16:47

Beitrag von CarstenW »

@gweny,
das ist ja auch nur eine Abfrage: Wenn unter "/var/etc/" eine Datei existiert die ".ich_hab_600er" heißt, mache das oder das.

Carsten
gweny
Interessierter
Interessierter
Beiträge: 64
Registriert: Montag 13. Juni 2005, 17:51

Beitrag von gweny »

tja das is mir scho klar, aber was hilft mir das wenn das touchfile nicht angelegt wird ... es wäre halt schön, wenn dieses touchfile vom treiber aus angelegt würde bzw. könnte man sich das sparen, wenn ich irgendwie auslesen könnte welchen chip ich hab!
::::....Power-Board....::::
2xNokiaDB2
1xDream7000
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Beitrag von seife »

Laß den treiber doch in /proc irgendwo den typ ausgeben, das kannst du in einem Skript abfragen und gut ist.
BTW: da das JFFS2 auch komprimiert, brauchen die ucodes nicht ~128kB sondern eher so ca. 50kB.
gweny
Interessierter
Interessierter
Beiträge: 64
Registriert: Montag 13. Juni 2005, 17:51

Beitrag von gweny »

so hab jetz alles durchsucht in proc, aber werlcher das geladen wurde kann ich niergenst finden ...
also bis jetz bin ich net viel weiter :(
::::....Power-Board....::::
2xNokiaDB2
1xDream7000
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Beitrag von seife »

Du mußt den avia-Treiber so ändern, daß er das in /proc irgendwo exportiert. Noch tut er das nicht.
gweny
Interessierter
Interessierter
Beiträge: 64
Registriert: Montag 13. Juni 2005, 17:51

Beitrag von gweny »

tjou werd ich wohl machen müssen ..
::::....Power-Board....::::
2xNokiaDB2
1xDream7000
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Beitrag von mb405 »

im code wird ja gecheckt, und danach der code geladen.

Code: Alles auswählen

if (!aviarev)
	strcat(firmwarePath, "/avia600.ux");
else
	strcat(firmwarePath, "/avia500.ux");
wenn du das abwandelst, kannste den anderen code löschen lassen.

Code: Alles auswählen

if (!aviarev)
{
	strcat(firmwarePath, "/avia600.ux");
	//hier das löschen des avia500 rein

}
else
{
	strcat(firmwarePath, "/avia500.ux");
	//hier das löschen des avia600 rein
}
das müsste so gehen, aber irgendwie musste noch checken, ob der schon weg ist, damit keine unschönen sachen auftreten.
TommiSat
Interessierter
Interessierter
Beiträge: 33
Registriert: Mittwoch 22. Juni 2005, 18:55

Beitrag von TommiSat »

Nicht getestet, aber so sollte es funktionieren:

if (!aviarev) {
strcat(firmwarePath, "/avia500.ux");
unlink(firmwarePath);
firmwarePath[sizeof(firmwarePath) - sizeof("/avia500.ux") - 2] = 0;
strcat(firmwarePath, "/avia600.ux");
}
else {
strcat(firmwarePath, "/avia600.ux");
unlink(firmwarePath);
firmwarePath[sizeof(firmwarePath) - sizeof("/avia600.ux") - 2] = 0;
strcat(firmwarePath, "/avia500.ux");
}

EDIT: Habs gerade kompilieren wollen, jedoch scheint der Compiler den Standarddateilöschfehl (unlink) nicht zu kennen, weiß hier jemand Rat?
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Beitrag von Houdini »

tja, wir sind halt im kernelspace da gibbet keine libc Funktionen :wink:
TommiSat
Interessierter
Interessierter
Beiträge: 33
Registriert: Mittwoch 22. Juni 2005, 18:55

Beitrag von TommiSat »

Houdini hat geschrieben:tja, wir sind halt im kernelspace da gibbet keine libc Funktionen :wink:
Nun ich bin neu, was das CVS angeht, es wundert mich nur das nicht mal der primitiv-Befehl unlink im Kernelspace nicht verfügbar ist. Würde denn dort ein system("rm Datei"); funktionieren, oder ein fclose(fopen("touchfile", "a")); um ein Touchfile zu erzeugen?
Papst
Developer
Beiträge: 279
Registriert: Mittwoch 26. Juni 2002, 22:19

Beitrag von Papst »

Damit kannste mit /proc/bus/avia_version die Version abfragen:

Code: Alles auswählen

Index: driver/dvb/drivers/media/dvb/avia/avia_av_proc.c
===================================================================
RCS file: /cvs/tuxbox/driver/dvb/drivers/media/dvb/avia/avia_av_proc.c,v
retrieving revision 1.14
diff -u -r1.14 avia_av_proc.c
--- a/driver/dvb/drivers/media/dvb/avia/avia_av_proc.c	21 Jan 2004 20:02:29 -0000	1.14
+++ b/driver/dvb/drivers/media/dvb/avia/avia_av_proc.c	27 Jul 2007 16:48:01 -0000
@@ -101,10 +101,22 @@
 	return n;
 }
 
+static int avia_av_proc_read_avia_version( char *page, char **start, off_t off, int count, int *eof, void *data )
+{
+	int len;
+	if (avia_av_is500()) {
+		len = sprintf(page, "avia500\n");
+	} else {
+		len = sprintf(page, "avia600\n");
+	}
+	return len;
+}
+
 int avia_av_proc_init(void)
 {
 	struct proc_dir_entry *proc_bus_avia;
 	struct proc_dir_entry *proc_bus_avia_dram;
+	struct proc_dir_entry *proc_bus_avia_version;
 
 	printk("avia_av_proc: $Id: avia_av_proc.c,v 1.14 2004/01/21 20:02:29 carjay Exp $\n");
 
@@ -130,6 +142,15 @@
 	}
 
 	proc_bus_avia_dram->owner = THIS_MODULE;
+	
+	proc_bus_avia_version = create_proc_read_entry( "avia_version", 0444, proc_bus, avia_av_proc_read_avia_version, NULL);
+	
+	if (!proc_bus_avia_version) {
+		printk("avia_av_proc: could not create /proc/bus/avia_version");
+		return -ENOENT;
+	}
+
+	proc_bus_avia_version->owner = THIS_MODULE;
 
 	return 0;
 }
@@ -138,6 +159,7 @@
 {
 	remove_proc_entry("avia_dram", proc_bus);
 	remove_proc_entry("bitstream", proc_bus);
+	remove_proc_entry("avia_version", proc_bus);
 }
 
 #if defined(STANDALONE)
Gruß

Der Papst
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Beitrag von seife »

@Papst: Danke. Die Schmerzen ob der anderen Vorschläge waren kaum noch auszuhalten ;-))
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Beitrag von mb405 »

na dann rein ins cvs damit :)
gweny
Interessierter
Interessierter
Beiträge: 64
Registriert: Montag 13. Juni 2005, 17:51

Beitrag von gweny »

tut mir leid das ich erst jetz anworten kann, war auf urlaub ;)

aber mal besten dank an papst ;)

@mb405 u. tommisat
das hatte ich versucht, aber hat ja leider nicht geklappt, da ich keinen ordentlichen befehl gefunden hab um was zu löschen.

ich hatte es bis jetz anders gelöst gehabt ...

Code: Alles auswählen

#include <linux/proc_fs.h>
if (!aviarev)
		{
		int model;
		strcat(firmwarePath, "/avia600.ux");
		create_proc_entry("have_avia_600", model, proc_bus);
		}
	else
		{
		int model;
		strcat(firmwarePath, "/avia500.ux");
		create_proc_entry("have_avia_500", model, proc_bus);
		}
damit wurde wenigstens ne datei erstellt die den namen have_avia_500 od. have_avia_600 trägt u. somit konnte ich ermitteln welcher chip vorhanden is ;)

dann noch in ein script schreiben

Code: Alles auswählen

if [ -e /proc/bus/have_avia_x00 ] && [ -e /var/tuxbox/ucodes/aviax00.ux ]; then
rm /var/tuxbox/ucodes/aviax00.ux
fi
::::....Power-Board....::::
2xNokiaDB2
1xDream7000
Papst
Developer
Beiträge: 279
Registriert: Mittwoch 26. Juni 2002, 22:19

Beitrag von Papst »

Meinen diff habe ich ins cvs eingecheckt
Gruß

Der Papst
gweny
Interessierter
Interessierter
Beiträge: 64
Registriert: Montag 13. Juni 2005, 17:51

Beitrag von gweny »

jepp hab ich gesehen u. gleich mal eingebaut ;)
echt super von dir .. danke ;)

u. hier noch die abfrage in der rcS falls es jemand braucht ..

Code: Alles auswählen

	avia_version=`cat /proc/bus/avia_version`
	if [ $avia_version = "avia500" ] && [ -e /var/tuxbox/ucodes/avia600.ux ]; then
	rm /var/tuxbox/ucodes/avia600.ux
	else if [ $avia_version = "avia600" ] && [ -e /var/tuxbox/ucodes/avia500.ux ]; then
	rm /var/tuxbox/ucodes/avia500.ux
	fi
	fi
::::....Power-Board....::::
2xNokiaDB2
1xDream7000