Linux TTY Çý¶¯
Ïà¹ØÁ´½Ó£º
http://blog.csdn.net/dongliqiang2006/archive/2009/09/05/4523563.aspx
×Ö·ûÉ豸
1£¬×Ö·ûÉ豸²ã
ÔÚLinuxÖÐÊÇ×÷Ϊһ¸öÎļþÀ´³öÏֵģ¬ËùÓжÔ×Ö·ûÉ豸µÄ²Ù×÷¶¼ÊÇͨ¹ýfile_operations½Ó¿ÚÀ´½øÐеģº
struct cdev {
struct kobject kobj;
struct module *owner;
const struct file_operations *ops;
struct list_head list;
dev_t dev;
unsigned int count;
};
void cdev_init(struct cdev *, const struct file_operations *);
Õâ¸öº¯Êý³õʼ»¯Ö¸¶¨µÄcdev½á¹¹£ºÆäÖÐ×îÖØÒªµÄ²½Öè¾ÍÊÇÉèÖÃops
static struct kobj_map *cdev_map;
int cdev_add(struct cdev *, dev_t, unsigned);
cdev_mapÓ¦¸ÃÊÇËùÓÐcdevµÄÒ»¸ö¼¯ºÏ£¬cdev_addº¯Êý¸ºÔð°ÑÖ¸¶¨µÄcdev¼ÓÈëµ½Õâ¸ö¼¯ºÏÖУ¬ÒÔ±ãÒÔºóµÄ²éѯ
2£¬line_discipline²ã£¨Ïß·¹æ³Ì£©
ÕâÒ»²ãͨ¹ýtty_structµÄldisc³ÉԱʵÏÖ²»Í¬µÄÏß·¹æ³Ì£¬¸ºÔðÁ¬½ÓÉϲãµÄÎļþ²Ù×÷ºÍϲãµÄtty²Ù×÷£¬²¢ÇÒ¼ÓÈëÏß·¹æ³Ì²ãµÄ´¦ÀíÂß¼£»ÀýÈçtty_writeÊǵ¼³ö¸øÉϲãÎļþµÄд²Ù×÷º¯Êý£¬Õâ¸öº¯ÊýÒ»°ã»áµ÷ÓÃÏß·¹æ³Ì³ÉÔ±ldiscµÄwriteº¯Êý£¬ÔÙÓɺóÕßµ÷ÓÃttyÇý¶¯£¨ÀýÈçn_ttyÖоÍÊǵ÷ÓÃwrite_chanµÄ£©£¬È«²¿µÄµ¼³öº¯ÊýÈçÏ£º
static const struct file_operations tty_fops = {
.llseek = no_llseek,
.read = tty_read,
.write = tty_write,
.poll = tty_poll,
.ioctl = tty_ioctl,
.open = tty_open,//tty_openÊǸö±È½ÏÖØÒªµÄº¯Êý£¬ÒòΪÕâ¸öº¯Êý»áµ÷ÓÃinit_dev£¬ºóÕß»á³õʼ»¯ÖØÒªµÄ½á¹¹tty_struct£¬²¢ÇÒÉèÖÃfileµÄprivate_dataΪtty_structʵÀý
.release = tty_release,
.fasync = tty_fasync,
};
3£¬tty²ã
½éÓÚÏß·¹æ³Ì²ãºÍÓ²¼þÇý¶¯Ö®¼ä£¬ÏòÉÏΪÏß·¹æ³ÌÌṩ½Ó¿Ú£¨tty_driver£©£¬ÏòÏÂÔòÌṩӲ¼þ¹ÜÀí£¨ÀýÈçtty_operations.start£©£»Ð´²Ù×÷£¨ÀýÈçtty_operations.write£©ÏòÏß·¹æ³Ì²ãÌṩ£¨ÒòΪЩ²Ù×÷Ò»°ã¶¼ÊÇÏß·¹æ³Ì²ãÖ÷¶¯·¢Æð£¬¶ø¶Á²Ù×÷ÔòÊÇÓ²¼þ²ãÖ÷¶¯·¢Æð£©£¬ËùÓеÄд²Ù×÷Êý¾Ý¶¼ÊǽøÈëµ½tty²ãµÄÒ»¸öcircle bufferÖУ¬tty²ã»áÔÚÊʵ±µÄʱºòµ÷ÓÃÓ²¼þ²ãµÄд²Ù×÷À´Êä³öÕâЩÊý¾Ý£»¶ø¶Á²Ù×÷£¨ÀýÈçtty_insert_flip_string£©ÔòÏòÓ²¼þ²ãÌṩ£¬ËùÓжÁÈëÊý¾Ý¶¼´æ·ÅÔÚttyµÄread bufferÖУ¬ÔÚÊʵ±µÄʱºòread bufferÖеÄÊý¾Ý»áͨ¹ýflush_to_ldiscº¯ÊýÍÆË͵½Ïß·¹æ³Ì²ã£¨¾ßÌåµÄÓ²¼þÇý¶¯ÔÚÍê³ÉÊý¾Ý½ÓÊÕºó£¬ÐèÒªµ÷ÓÃtty_flip_buffer_pushº¯ÊýÀ´ÍÆËÍÊý¾Ý£©
×¢£ºtty_bufhead½á¹¹ÖÐÓÐÒ»¸öwork_struct½á¹¹£¬Õâ¸ö½á¹¹¸ºÔð
Ïà¹ØÎĵµ£º
linuxÃüÁîÐÐÏÂÓÃFetion·ÉÐÅ·¢ËÍÃâ·Ñ¶ÌÐÅ
Ò»¡¢×îа汾2009
ͨ¹ýlinuxÃüÁîÐÐÀ´·¢ËͶÌÐŵķ½·¨£¬¾õµÃÉõÊǺÃÓã¬ÊÊÓÃÔËά¼à¿Ø¡£ÕâÀïÏò´ó¼ÒÍÆ¼öµÄÊÇ·ÉÐÅ»úÆ÷È˵ÄÈí¼þ£¬Ö§³Ölinux¡¢ÃüÁîÐÐϵķÉÐÅ¡¢ÍêÈ«Ãâ·Ñ£¨Ä¿Ç°ÎªÖ¹£©£» ¹ÙÍøµØÖ·£º http://www.it-adv.net/
»·¾³ debian lenny
ÏÂÔØ×îÐÂlinux°æ±¾¿Í»§¶Ë http://bbs.it-ad ......
ÀëÉÏһƪÈÕÖ¾ºÜ³¤Ê±¼äÁË£¬Öм䵱ȻÊÇÒòΪ¹ýÄ꣬ÊÂÇéºÜ¶à£¬Êéû¿´¶àÉÙ£¬ÏÖÔÚÓÐʱ¼äÁË£¬ÔÙ·¢Ò»Æª±Ê¼Ç´æµµ£¬ÊǹØÓÚϵͳÆô¶¯¹ý³ÌµÄ£º
Ò»ÇдӼӵ翪ʼ¡£¼ÓµçÒÔºó£¬ËùÓеļĴæÆ÷Çå0£¬Ö»ÓÐCS¼Ä´æÆ÷Ϊȫ1£¬ÓÚÊÇÖ¸ÕëÖ¸ÏòÁË0xffff:0, Õâ¸öµØÖ·ÊÇ ROM-BIOSµØÖ·£¬ ÔÚ´Ë·ÅÖúͳÌÐò¿ªÊ¼×öµÄÊÂÇéÊÇÖ´ÐÐһЩϵͳ¼ì²â£¬²¢ÔÚÎïÀíµØÖ·0´¦¿ªÊ¼³ ......
1£¬Çý¶¯³ÌÐòÈë¿ÚºÍ³ö¿Úµã
module_init£ºÇý¶¯³ÌÐò³õʼ»¯Èë¿Úµã£¬º¯ÊýÔÐÍ£ºmodule_init ( x)£¬xΪÆô¶¯Ê±»ò²åÈëÄ£¿éʱҪÔËÐеĺ¯Êý¡£Èç¹ûÔÚÆô¶¯Ê±¾ÍÈ·ÈϰÑÕâ¸öÇý¶¯³ÌÐò ²åÈëÄں˻òÒÔ¾²Ì¬ÐγÉÁ´½Ó£¬Ôòmodule_init ½«Æä³õʼ»¯Àý³Ì¼ÓÈëµ½"__initcall.int"´úÂë¶Î£¬·ñÔò½«ÓÃinit_module·â×°Æä³õʼ»¯Àý³Ì£¬ÒÔ±ã¸ÃÇý¶¯³ÌÐò×÷Ϊģ¿éÀ ......
1. Ôھɵİ汾Ï£¨Èçlinux 2.4£©linuxÄÚºËÄ£¿éµÄ±àÒëÖ»ÐèÒªÓÐÄں˵ÄÍ·Îļþ¾ÍÐÐÁË£¬¾Í¿ÉÒÔͨ¹ýºÍ±àÒëÆäËû³ÌÐòÒ»ÑùµÄ·½·¨±àÒë³Éfilename.oÎļþ£¬Õâ¸ö.oÎļþÊÇÖ±½Ó ¿ÉÒÔ¼ÓÔØµÀÄÚºËÖе쬼ÓÔØÖ®ºó¾Í¿ÉÒÔÓÃÁË¡£È»¶øÔÚ2.6ϾͽØÈ»²»Í¬ÁË£¬ÔÚlinux 2.6ÏÂÄں˵ıàÒëÒªÓÐϵͳÄÚºËÊ÷µÄÖ§³Ö£¬ÏÂÃæ½éÉÜÒ»ÏÂÕâ¸ö“ÄÚºËÊ÷”ÊÇÈç ......
ǰÑÔ£ºÎÒ¾õµÃÎÒµÄÎÄÕÂÏà¶ÔÀ´Ëµ¶¼ÊDZȽÏdzÏԵġ£Ò»Ð©³õѧÕß¿ÉÒÔ¿´¿´£¬¶ÔÓÚ¸ßÊÖÀ´Ëµ£¬Èç¹ûÄãÃDz»ÁߨÄʱ¼äµÄ»°£¬Ï£ÍûÒ²ÄܰïÎÒ¿´¿´£¬Ö¸µãÒ»ÏÂÆäÖеĴíÎó¡£ÕâÒ²ÊÇÎÒµ½ÕâÀïÀ´ºÍ´ó¼Ò½»Á÷µÄÄ¿µÄ¡£
ÔĶÁLinuxÄÚºËÆô¶¯´úÂëµÄÖ±½Ó¶¯Á¦ÊÇÎÒÏë±àдRTL8019ASµÄÍø¿¨Çý¶¯³ÌÐò£¨2.4.18ÄÚºËÖ»Ö§³ÖÁËCS8900A£©¡£¼ÈȻҪдÇý¶¯£¬ÎÒ¾ÍÏëÖªµÀËüÊÇÔ ......