Systemova console

Roman Divacky rdivacky at freebsd.org
Sun Aug 26 22:49:51 CEST 2007


On Sun, Aug 26, 2007 at 09:23:26PM +0200, Dan Lukes wrote:
> 	Mam tu WRAPa (to je takove male PC bez graficke karty) a k nemu pres 
> LPC sbernici pripojeny vlastni QVGA display. Celkem bez problemu jsem si 
> k nemu napsal syscon-compatible ovladac, takze mam v dev vice-mene 
> standardni tty zarizeni. Potud celkem bez problemu.
> 
> 	Nicmene, chtel bych z nej mit taky low-level systemovou konsoli.
> 
> 	Zarizeni, ktera vubec teoreticky mohou byt takovou konzoli ma kernel 
> ulozeny v globalni promenne cons_set. Ta vznika skrzeva makro 
> CONS_DRIVER(name, ...) , ve kterem je DATA_SET(cons_set, name##_consdev)
> 
> 	Makro DATA_SET(cons_set, name##_consdev) pochazi z linker_set.h a znamena:
> 
> static void const * const __set_cons_set_sym_name_consdev 
> __section("set_", cons_set) __used=&name_consdev
> 
> 	Vyrozumel jsem, ze jadrem triku je, ze pro kazdy takovy list je 
> vytvoren specialni segment a protoze jednotlive polozky jsou v ruznych 
> modluech ukladany do segmentu tohoto jednoho jmena, tak je linker pri 
> sestavovani spoji do jednoho segmentu - cizm vznikne "souhrnny seznam".
> 
> 	Ti, co pak potrebuji k seznamu pristup pouziji
> SET_DECLARE(cons_set, struct consdev) coz vytvori dve promenne
> extern struct consdev __start_set_cons_set
> extern struct consdev __stop_set_cons_set
> 
> 	Znalost zacatku a konce, spolecne se znamou velikosti jedne polozky 
> umoznuji seznam prochazet.
> 
> 	No a ted, po dlouhem uvodu, docela otazka velmi kratka - tenhle 
> mechanismus funguj pouze pro staticky linking, nebo funguje i v pripade 
> modulu dynamicky linkovanych do systemu ?

funguje to i pro dynamicky linkovane moduly... spis je problem v tom ze
to tusim funguje spravne jen pro i386 (amd64 se commitovalo nekdy loni),
jak jsou na tom jine platformy netusim, ale mel jsem s tim problem...



More information about the Users-l mailing list