Systemova console
    Dan Lukes 
    dan at obluda.cz
       
    Sun Aug 26 21:23:26 CEST 2007
    
    
  
	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 ?
						Dan
-- 
Dan Lukes                                               SISAL MFF UK
AKA: dan at obluda.cz, dan at freebsd.cz, dan at (kolej.)mff.cuni.cz
    
    
More information about the Users-l
mailing list