Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
La facilità di installazione e la completa automazione di tutte le fasi di utilizzo, rendono questo prodotto l'ideale per molti clienti. Ecco com'è andata la nostra prova in anteprima
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-06-2006, 23:00   #1
francowr
Junior Member
 
Iscritto dal: Mar 2006
Messaggi: 29
Usare una variabile del kernel di linux

Ciao a tutti,
ho bisogno di modificare una variabile del kernel di linux (che si chiama tokens) tramite un mio programma c in questo modo:
"chiedo" al kernel il valore di tokens attuale;
quindi faccio tokens=min(tokens, costante);
infine "restituisco" al kernel la variabile tokens calcolata con min.
Ma come posso fare a far questo? Non so dove metter le mani per modificar il kernel di linux.
CIAO!
francowr è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2006, 14:39   #2
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Dove sarebbe questa variabile? (in che file è dichiarata?)

Quello che puoi fare è crearti un modulo che modifica la variabile, solo che un modulo non ha a disposizione tutti gli oggetti del kernel, ma solo quelli "esportati".
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2006, 02:10   #3
francowr
Junior Member
 
Iscritto dal: Mar 2006
Messaggi: 29
Ciao, grazie per la risposta;
cmq la variabile è dichairata nel file tbf.c (che fa parte del kernel di linux);

ok posso crearmi un modulo, ho letto su internet utilizzando al funzione ioctl, ma non so come; qualcuno di voi sa dirmi con che "sintassi" usare questa ioctl; devo richiamare proprio il file tbf.c???
GRAZIE
CIAO
francowr è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2006, 09:16   #4
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Non c'è nessun file tbf.c nel kernel linux...almeno, non in quelli che ho sottomano
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2006, 11:15   #5
francowr
Junior Member
 
Iscritto dal: Mar 2006
Messaggi: 29
No tbf.c non è un file del kernel, è il file c che verrà compilato con il kernel, dove si trova la variabile tokens; il tbf è una disciplina di coda usata dal traffic control di linux (comando tc); a me serve quella variabile;
CIAO!
francowr è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2006, 11:29   #6
jappilas
Senior Member
 
L'Avatar di jappilas
 
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4739
forse adesso ho male intepretato la domanda, o ricordo male quello che lessi un po' di tempo fa, o entrambe
ma mi pareva che il sysfs fosse stato aggiunto al kernel proprio per questo genere di cose...
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name
Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish
Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate

Ultima modifica di jappilas : 09-06-2006 alle 11:33.
jappilas è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2006, 12:38   #7
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da francowr
No tbf.c non è un file del kernel, è il file c che verrà compilato con il kernel, dove si trova la variabile tokens; il tbf è una disciplina di coda usata dal traffic control di linux (comando tc); a me serve quella variabile;
CIAO!
Ora che vedo, c'è il file net/sched/sch_tbf.c...ha qualcosa a che vedere con quella tecnica?

Comunque se il file tbf.c è tuo, puoi modificarlo per rendere quella variabile accessibile da userspace. Il sysfs potrebbe essere una soluzione, ma ce ne sono altre (miscdevice, procfs, debugfs, connector...)
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2006, 13:42   #8
francowr
Junior Member
 
Iscritto dal: Mar 2006
Messaggi: 29
si il file è quello;
devo modificarlo e ricompilare il kernel però vero? dovrei scaricare il kernel di linux modificare quel file e ricompilare... temo che impallo tutto, ma vedremo...

cmq sysfs è semplice come sintassi?
francowr è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2006, 16:52   #9
francowr
Junior Member
 
Iscritto dal: Mar 2006
Messaggi: 29
ok no il kernel sorgente già lo ho in usr/src /linux
mi manca la sintassi della funzione;
non esiste una specie di "printf.." che mi permette di tiarrae fuori la variabile dal kernel lavorarci e poi un altra printf che me la fa riporta dentro al kernel
francowr è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2006, 17:08   #10
francowr
Junior Member
 
Iscritto dal: Mar 2006
Messaggi: 29
Leggevo ora su internet che esiste una "printk" che mi permette di porta fuori variabile del kernel; mi resta da capire come...
Se qualcuno lo sa in breve...
francowr è offline   Rispondi citando il messaggio o parte di esso
Old 12-06-2006, 09:00   #11
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
La sintassi di printk è come printf. Il problema è un altro: la tua variabile "tokens" non è globale, ma fa parte della struttura tbf_sched_data, che da quello che vedo può benissimo non essere unica. Come puoi vedere, ai vari metodi del file viene passata una struct Qdisc *, dalla quale viene estratta la tbf_sched_data. Quindi ci sarà un "tokens" per ogni Qdisc che viene aperta.
Una qdisc viene aperta in net/sched/sch_generic.c, in qdisc_alloc, e distrutta in qdisc_destroy. Puoi modificare queste funzioni in modo da registrare e distruggere dei procfile o sysfsfile se ops->id è pari a "tbf". Non bello, ma abbastanza veloce a farsi.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 14-06-2006, 12:15   #12
francowr
Junior Member
 
Iscritto dal: Mar 2006
Messaggi: 29
Ti ringrazio molto per la risposta, l'idea a questo punto è quella di provare con un proc file. Sai dove posso trovare del codice "fac-simile" per quello che devo fare e soprattutto dove e come inserire il modulo (non so se è così che si dice, sono alle prime armi con la programmazione del kernel)
grazie
ciao
francowr è offline   Rispondi citando il messaggio o parte di esso
Old 14-06-2006, 12:55   #13
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Se sei alle prime armi, non dovresti imbatterti in questa storia. Lo devi fare per studio o per lavoro?

Tieni conto che non te la cavi con un modulo, ma devi modificare esplicitamente le parti del kernel che gestiscono le qdisc.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2006, 02:14   #14
francowr
Junior Member
 
Iscritto dal: Mar 2006
Messaggi: 29
Lo faccio per studio... purtroppo... sono a poco dalla tesi e è sorto questo problema...
Anche secondo me è ai limite dell'impossibile che sappia ste cose "di botto"

Io vorrei cercare di inserire nello stesso module_init del tbf anche il codice del module_init che crea un file proc, e passare al modulo "write" del file la struttura Qdisc; dovebdo aprire da programma (mio) una sola Qdisc alla volta magari così me la cavo...
Che ne pensi?
francowr è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2006, 14:33   #15
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Ti do il la:
Codice:
--- linux-2.6.17-rc4/net/sched/sch_tbf.c.org	2006-06-14 13:31:52.000000000 +0000
+++ linux-2.6.17-rc4/net/sched/sch_tbf.c	2006-06-15 14:32:39.000000000 +0000
@@ -135,6 +135,43 @@
 #define L2T(q,L)   ((q)->R_tab->data[(L)>>(q)->R_tab->rate.cell_log])
 #define L2T_P(q,L) ((q)->P_tab->data[(L)>>(q)->P_tab->rate.cell_log])
 
+static ssize_t class_device_tokens_show(struct class_device *cdev, char *page)
+{
+	struct net_device *dev = container_of(cdev, struct net_device, class_dev);
+	struct tbf_sched_data *q;
+	long tokens;
+
+	spin_lock_bh(&dev->queue_lock);
+	q = qdisc_priv(dev->qdisc);
+	tokens = q->tokens;
+	spin_unlock_bh(&dev->queue_lock);
+	return sprintf(page, "%ld", tokens);
+}
+
+static ssize_t class_device_tokens_store(struct class_device *cdev, const char *page, size_t count)
+{
+#if 0
+	long tokens;
+	struct net_device *dev = container_of(cdev, struct net_device, class_dev);
+	struct Qdisc *sch;
+	struct tbf_sched_data *q;
+
+	if (count==0)
+                return -EINVAL;
+        if (page[count-1]!='\0' && page[count-1]!='\n')
+                return -EINVAL;
+
+	tokens = simple_strtol(page, NULL, 0);
+	spin_lock_bh(&dev->queue_lock);
+	q = qdisc_priv(dev->qdisc);
+	q->tokens = tokens;
+	spin_unlock_bh(&dev->queue_lock);
+#endif
+	return count;
+}
+
+static CLASS_DEVICE_ATTR(tokens, 0644, class_device_tokens_show, class_device_tokens_store);
+
 static int tbf_enqueue(struct sk_buff *skb, struct Qdisc* sch)
 {
 	struct tbf_sched_data *q = qdisc_priv(sch);
@@ -265,6 +302,8 @@
 {
 	struct tbf_sched_data *q = qdisc_priv(sch);
 
+	class_device_remove_file(&sch->dev->class_dev, &class_device_attr_tokens);
+
 	qdisc_reset(q->qdisc);
 	sch->q.qlen = 0;
 	PSCHED_GET_TIME(q->t_c);
@@ -370,6 +409,7 @@
 static int tbf_init(struct Qdisc* sch, struct rtattr *opt)
 {
 	struct tbf_sched_data *q = qdisc_priv(sch);
+	int fail;
 
 	if (opt == NULL)
 		return -EINVAL;
@@ -381,7 +421,11 @@
 
 	q->qdisc = &noop_qdisc;
 
-	return tbf_change(sch, opt);
+	fail = tbf_change(sch, opt);
+	if (!fail)
+		class_device_create_file(&sch->dev->class_dev, &class_device_attr_tokens);
+
+	return fail;
 }
 
 static void tbf_destroy(struct Qdisc *sch)
nb la patch è scorretta per diversi motivi, ma ti da il via su dove mettere mano.
Non ho neanche potuto testarla in quanto non ho idea di come gestire e avviare queste qdisc...sono cose sconosciute per me
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2006, 01:23   #16
francowr
Junior Member
 
Iscritto dal: Mar 2006
Messaggi: 29
Ti ringrazio davvero molto, adesso compincio a studiarmela bene, anche perchè a dirti il vero a prima vista non ci ho capito nulla.
Come faccioa ricompilare un modulo del kernel? sai il comando che devo usare?
grazie ancora molto, mi hai dato davvero un grande aiuto!
CIAO!
francowr è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2006, 01:26   #17
francowr
Junior Member
 
Iscritto dal: Mar 2006
Messaggi: 29
Cmq complimenti davvero per la tua preparazione!
Sono curioso di conoscere dove hai imparato queste cose!
francowr è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2006, 09:38   #18
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Se i sorgenti del tuo kernel corrente sono installati correttamente, basta un semplice
make modules
per ricompilare tutti i moduli, compreso quello che ti interessa che troverai in net/sched/sch_tbf.ko. Puoi inserirlo selettivamente con insmod, senza dover sovrascrivere il modulo originale.

Ti elenco i problemi che vanno risolti o tenuti presente. Visto che non conosco affatto qeuesta parte del kernel, sono solo ipotesi, ma credo siano fondate:
- class_device_create_file e class_device_remove_file vengono probabilmente eseguite sotto spinlock e BH disabilitate. Vietato. Se hai culo, non succede nulla. Visto che ti serve solo per dei test, se funziona lasciamole così come sono.
- Si hanno effetti impredicibili se vengono create due qdisc tbf sulla stessa interfaccia di rete. E' ammessa una tbf per interfaccia.
- Nelle class_device_tokens_show e class_device_tokens_store assumono che dev->qdisc (che presumo sia la qdisc "attiva") sia la tbf. In realtà ci sono altri campi che possono contenere qdisc, tra cui una lista di qdisc -- a quanto pare possono esserci più qdisc associate contemporaneamente a una interfaccia di rete. L'assunzione che dev->qdisc sia la tbf andrebbe verificata.
- I classfile sono creati in /sys/class/net/<nome interfaccia>/tokens. E' una violazione di layer, in quanto tocchiamo una regione che compete a un altro driver (di un altro sottosistema per giunta); non dovrebbe avere effetti collaterali di per se, a meno di non fare cose strane.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12

Ultima modifica di ilsensine : 16-06-2006 alle 09:42.
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2006, 12:38   #19
francowr
Junior Member
 
Iscritto dal: Mar 2006
Messaggi: 29
Non so davvero come rinraziarti! Ora vedo!
CIAO!!!!!
francowr è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2006, 12:40   #20
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Fatti aiutare da qualche assistente all'università...altrimenti invece che una tesi sul networking rischi di fare una tesi sul kernel linux
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
Sembra ormai certo: la prossima Xbox sar...
“Solutions Beyond Displays”: la strategi...
La società europea The Exploratio...
Dalle auto ai robot umanoidi: Faraday Fu...
Vodafone annuncia la dismissione di un s...
Stiga lancia i nuovi robot tagliaerba co...
Bullismo e cyberbullismo, Keenetic lanci...
Con AI Skills Checker Bitdefender mette ...
E-bike giapponese con 1.000 km di autono...
Un eVTOL con cui basta saper andare in b...
Dal mercato cinese al mondo: HONOR firma...
Sovranità digitale: l'UE sperimen...
Accesso alla memoria su Windows 11 solo ...
iPhone 18 Pro Max con batteria da oltre ...
Windows 11, cali di prestazioni sulle GP...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 01:16.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v