Ò׽ؽØÍ¼Èí¼þ¡¢µ¥Îļþ¡¢Ãâ°²×°¡¢´¿ÂÌÉ«¡¢½ö160KB

LinuxÏÂtty¡¢consule¡¢´®¿ÚÖ®¼äµÄ¹ØÏµÊÕ¼¯

 1¡¢LINUXÏÂTTY¡¢CONSOLE¡¢´®¿ÚÖ®¼äÊÇÔõÑùµÄ²ã´Î¹ØÏµ£¿¾ßÌåµÄº¯Êý½Ó¿ÚÊÇÔõÑùµÄ£¿´®¿ÚÊÇÈçºÎ±»µ÷Óõģ¿
      ttyºÍconsoleÕâЩ¸ÅÄîÖ÷ÒªÊÇһЩÐéÄâÉ豸µÄ¸ÅÄ¶ø´®¿Ú¸ü¶àµÄÊÇÖ¸Ò»¸öÕæÕýµÄÉ豸Çý¶¯¡£Ttyʵ¼ÊÊÇÒ»ÀàÖÕ¶ËI/OÉ豸µÄ³éÏó£¬Ëüʵ¼ÊÉϸü¶àµÄÊÇÒ»¸ö¹ÜÀíµÄ¸ÅÄĿµÄÊÇÏòÉϲãµÄVFSÌṩһ¸öͳһµÄ½Ó¿Ú¡£Í¨¹ýfile_operations½á¹¹ÖеÄtty_ioctl¿ÉÒÔ¶ÔÆä½øÐÐÅäÖᣲétty_driver£¬Ä㽫µÃµ½n¸ö½á¹û£¬Êµ¼Ê¶¼ÊÇÏà¹ØÐ¾Æ¬µÄÇý¶¯¡£Òò´Ë£¬¿ÉÒԵõ½µÄ½áÂÛÊÇ£ºÃ¿¸öÃèÊöttyÉ豸µÄtty_structÔÚ³õʼ»¯Ê±±ØÈ»¹Ò½ÓÁËij¸ö¾ßÌåоƬµÄ×Ö·ûÉ豸Çý¶¯£¨²»Ò»¶¨ÊÇ×Ö·ûÉ豸£©£¬¿ÉÒÔÊǺܶ࣬°üÀ¨ÏÔ¿¨»ò´®¿Úchip¡£
      ¶øconsoleÊÇÒ»¸ö»º³åµÄ¸ÅÄËüµÄÄ¿µÄÓÐÒ»µãÀàËÆÓÚtty¡£Êµ¼ÊÉÏconsole²»½öºÍttyÁ¬ÔÚÒ»Æð£¬»¹ºÍframebufferÁ¬ÔÚÒ»Æð£¬¾ßÌåµÄÔ­Òò¿´ÏÂÃæµÄ¼üÅ̵ÄÖжϴ¦Àí¹ý³Ì¡£TtyµÄÒ»¸ö×Ó¼¯ÐèҪʹÓÃconsole(µäÐ͵ÄÈçÖ÷É豸ºÅ4£¬´ÎÉ豸ºÅ1¨D64)£¬µ«ÊÇҪעÒâµÄÊÇûÓÐconsoleµÄttyÊÇ´æÔڵġ£¶ø´®¿ÚÔòÖ¸µÄÊÇtty_driver¡£ ¾Ù¸öµäÐ͵ÄÀý×Ó£¬·ÖÎöһϼüÅ̵ÄÖжϴ¦Àí¹ý³Ì£º
keyboard_interrupt¨D>handle_kbd_event¨D>handle_keyboard_event¨D>handle_scancode
void handle_scancode(unsigned char scancode, int down)
{
     ……..
     tty = ttytab? ttytab[fg_console]: NULL;
     if (tty && (!tty->driver_data)) {
         ……………
         tty = NULL; 
     }
     ………….
     schedule_console_callback();

Õâ¶Î´úÂëÖеÄÁ½¸öµØ·½ºÜÖµµÃ×¢Ò⣬Ҳ¾ÍÊdzýÁË»ñµÃttyÍ⣨ͨ¹ýÈ«¾ÖÁ¿tty¼Ç¼£©£¬»¹½øÐÐÁËconsole»ØÏÔschedule_console_callback¡£TtyºÍconsoleµÄ¹ØÏµÔÚ´ËÒѾ­ºÜÃ÷ÁË£¡£¡£¡
2¡¢printkº¯ÊýÊǰÑÐÅÏ¢·¢Ë͵½¿ØÖÆÌ¨Éϰɣ¿ÈçºÎÈÃPRINTK°ÑÐÅϢͨ¹ý´®¿ÚËͳö£¿»òÕß˵ϵͳÔÚʲôµØ·½À´¾ö¶¨Êǽ«ÐÅÏ¢Ë͵½ÏÔʾÆ÷»¹ÊÇ´®¿Ú£¿ ¾ßÌå¿´Ò»ÏÂprintkº¯ÊýµÄʵÏÖ¾ÍÖªµÀÁË£¬printk²»Ò»¶¨Êǽ«ÐÅÏ¢Íù¿ØÖÆÌ¨ÉÏÊä³ö£¬ÉèÖÃkernelµÄÆô¶¯²ÎÊý¿ÉÄÜ¿ÉÒÔ´ïµ½½«ÐÅÏ¢Ë͵½ÏÔʾÆ÷µÄ


Ïà¹ØÎĵµ£º

Linux²é¿´Ó²¼þÐÅÏ¢

ÔÚLINUX»·¾³¿ª·¢Çý¶¯³ÌÐò£¬Ê×ÏÈҪ̽²âµ½ÐÂÓ²¼þ£¬½ÓÏÂÀ´¾ÍÊÇ¿ª·¢Çý¶¯³ÌÐò¡£
³£ÓÃÃüÁîÕûÀíÈçÏ£º
ÓÃÓ²¼þ¼ì²â³ÌÐòkudzu̽²âÐÂÓ²¼þ£ºservice kudzu start ( or restart)
²é¿´CPUÐÅÏ¢£ºcat /proc/cpuinfo
²é¿´°å¿¨ÐÅÏ¢£ºcat /proc/pci
²é¿´PCIÐÅÏ¢£ºlspci (Ïà±Ècat /proc/pci¸üÖ±¹Û£©
²é¿´ÄÚ´æÐÅÏ¢ ......

LinuxÄں˵Äͬ²½»úÖÆ

ÔÚ½øÈëÕýÎÄǰÏÈ¿´Ò»ÏÂÎÒÔÚÍøÉÏ¿´µ½µÄÌû×Ó£º
ÎÊ£ºatomic_set(v,i)µÄ¶¨ÒåÊÇÕâÑùµÄ:
#define atomic_set(v,i) v->counter=i
µ«ÊÇ£¬ÔÚi386Ìåϵ½á¹¹ÖУ¬²»ÄÜÖ±½Ó°ÑÒ»¸öÄÚ´æ²Ù×÷Êýͨ¹ýÒ»ÌõmovÖ¸Áî´æµ½ÁíÒ»¸öÄÚ´æ²Ù×÷ÊýÖУ¬
±ÈÈçÒª°Ñint32ÀàÐ͵ıäÁ¿ i ÉèÖÃ³É j£¬±ØÐë¾­¹ýÁ½ÌõÖ¸Áî:
mov eax,j
mov i,eax
Èç¹ûÕâÑùÀ ......

googleÔõÑùʹÓÃlinux£¨Äںˣ©


googleÔõÑùʹÓÃlinux£¨Äںˣ©
½ñÄêµÄlinuxÄں˿ª·¢´ó»áÉÏ£¬googleµÄ¿ª·¢ÈËÔ±Ò²ÉĮ̈×öÁËÃûΪ“how google use linux"µÄÑݽ²¡£ÎÒ¶·µ¨·­Òë×¢½âÒ»·¬——À¨ºÅÄÚΪע½â£¬»¶Ó­¶ÁÕ߸«Õý¡£
£¨Ç°Ã漸¶Î½²google¶Ôlinux kernel´úÂëµÄ¹ÜÀí¼°¸ú½ø£¬Æ«Ï¸Ë飬²»·­ÒëÁË£©
ÔÚgoogleΪlinux¼ÓÈëµÄ´úÂëÖУ¬3/4ÊǶÔÄں˺ËÐÄ ......

Linux GCC makeÎļþµÄд·¨ ×Ü½á°æ

Ŀ¼½á¹¹Îª£º
inc/hello.h
src/hello.c
main/main.c
Makefile
ÎļþÄÚÈÝΪ£º
hello.h:
void hello(char name[]);

hello.c:
#include <stdio.h>
void hello(char name[])
{
printf("Hello %s!\n", name);
}

main.c:
#include <stdio.h>
#include "hello.h"
// The second hello.h should ......
© 2009 ej38.com All Rights Reserved. ¹ØÓÚE½¡ÍøÁªÏµÎÒÃÇ | Õ¾µãµØÍ¼ | ¸ÓICP±¸09004571ºÅ