LinuxÄÚºËÖÐÓÃÓÚͬ²½µÄ¼¸ÖÖ»úÖÆ¼¯ÖÐÆðÀ´·ÖÎö
LinuxÄÚºËÖÐÓÃÓÚͬ²½µÄ¼¸ÖÖ»úÖÆ¼¯ÖÐÆðÀ´·ÖÎö£¬Ç¿µ÷ÁËËüÃÇÖ®¼äÔÚʵÏÖºÍʹÓÃÉϵIJ»Í¬¡£
¡¡¡¡Í¬²½Í¨³£ÊÇΪÁË´ïµ½¶àÏß³ÌÐͬµÄÄ¿µÄ¶øÉè¼ÆµÄÒ»ÖÖ»úÖÆ£¬Í¨³£°üº¬Òì²½ÐźŻúÖÆºÍ»¥³â»úÖÆ×÷ΪÆäʵÏֵĵײ㡣ÔÚLinux 2.4ÄÚºËÖÐÒ²ÓÐÏàÓ¦µÄ¼¼ÊõʵÏÖ£¬°üÀ¨ÐźÅÁ¿¡¢×ÔÐýËø¡¢Ô×Ó²Ù×÷ºÍµÈ´ý¶ÓÁУ¬ÆäÖÐÔ×Ó²Ù×÷ºÍµÈ´ý¶ÓÁÐÓÖÊÇʵÏÖÐźÅÁ¿µÄµ×²ã¡£
¡¡¡¡
¡¡¡¡Ò». µÈ´ý¶ÓÁкÍÒì²½ÐźÅ
¡¡¡¡
¡¡¡¡wait queueºÜÔç¾Í×÷Ϊһ¸ö»ù±¾µÄ¹¦Äܵ¥Î»³öÏÖÔÚLinuxÄÚºËÀïÁË£¬ËüÒÔ¶ÓÁÐΪ»ù´¡Êý¾Ý½á¹¹£¬Óë½ø³Ìµ÷¶È»úÖÆ½ôÃܽáºÏ£¬Äܹ»ÓÃÓÚʵÏÖºËÐĵÄÒ첽ʼþ֪ͨ»úÖÆ¡£ÎÒÃÇ´ÓËüµÄʹÓ÷¶Àý×ÅÊÖ£¬¿´¿´µÈ´ý¶ÓÁÐÊÇÈçºÎʵÏÖÒì²½ÐźŹ¦Äܵġ£
¡¡¡¡
¡¡¡¡ÔÚºËÐÄÔËÐйý³ÌÖУ¬¾³£»áÒòΪijЩÌõ¼þ²»Âú×ã¶øÐèÒª¹ÒÆðµ±Ç°Ị̈߳¬Ö±ÖÁÌõ¼þÂú×ãÁ˲żÌÐøÖ´ÐС£ÔÚ2.4ÄÚºËÖÐÌṩÁËÒ»×éнӿÚÀ´ÊµÏÖÕâÑùµÄ¹¦ÄÜ£¬ÏÂÃæµÄ´úÂë½ÚÑ¡×Ôkernel/printk.c£º
¡¡¡¡
¡¡¡¡ unsigned long log_size;
¡¡¡¡1: DECLARE_WAIT_QUEUE_HEAD(log_wait);...
¡¡¡¡4: spinlock_t console_lock = SPIN_LOCK_UNLOCKED;...
¡¡¡¡ int do_syslog(int type,char *buf,int len){
¡¡¡¡ ...
¡¡¡¡2: error=wait_event_interruptible(log_wait,log_size);
¡¡¡¡ if(error)
¡¡¡¡ goto out;
¡¡¡¡ ...
¡¡¡¡5: spin_lock_irq(
¡¡¡¡ ...
¡¡¡¡ log_size--;
¡¡¡¡ ...
¡¡¡¡6: spin_unlock_irq(
¡¡¡¡ ...
¡¡¡¡ }
¡¡¡¡ asmlinkage int printk(const char *fmt,...){
¡¡¡¡ ...
¡¡¡¡7: spin_lock_irqsave(console_lock,flags);
¡¡¡¡ ...
¡¡¡¡ log_size++;...
¡¡¡¡8: spin_unlock_irqrestore(
¡¡¡¡3: wake_up_interruptible(log_wait);
¡¡¡¡ ...
¡¡¡¡ }
¡¡¡¡
¡¡¡¡Õâ¶Î´úÂëʵÏÖÁËprintkµ÷ÓúÍsyslogÖ®¼äµÄͬ²½£¬syslogÐèÒªµÈ´ýprintkËÍÊý¾Ýµ½»º³åÇø£¬Òò´Ë£¬ÔÚ2:´¦µÈ´ýlog_size·Ç0£»¶øprintkÒ»±ß´«ËÍÊý¾Ý£¬Ò»±ßÔö¼Ólog_sizeµÄÖµ£¬Íê³Éºó»½ÐÑÔÚlog_waitÉϵȴýµÄËùÓÐỊ̈߳¨Õâ¸öÏ̲߳»ÊÇÓû§¿Õ¼äµÄÏ̸߳ÅÄ¶øÊǺËÄÚµÄÒ»¸öÖ´ÐÐÐòÁУ©¡£Ö´ÐÐÁË3:µÄwake_up_interruptible()ºó£¬2:´¦µÄwait_event_interruptible()·µ»Ø0£¬´Ó¶ø½øÈësyslogµÄʵ¼Ê¶¯×÷¡£
¡¡¡¡
¡¡¡¡1:ÊǶ¨Òålog_waitÈ«¾Ö±äÁ¿µÄºêµ÷Óá£
¡¡¡¡
¡¡¡¡ÔÚʵ¼Ê²Ù×÷log_sizeÈ«¾Ö±äÁ¿µÄʱºò£¬»¹Ê¹ÓÃÁËspin_lock×ÔÐýËøÀ´ÊµÏÖ»¥³â£¬¹ØÓÚ×ÔÐýËø£¬ÕâÀïÔݲ»×÷½âÊÍ£¬µ«´ÓÕâ¶Î´úÂëÖÐÒѾ¿ÉÒÔÇå³þµÄÖªµÀËüµÄʹÓ÷½·¨ÁË¡£
¡¡¡¡
¡¡¡¡ËùÓÐwait queueʹÓÃÉϵļ¼ÇÉÌåÏÖÔÚwait_event_interrupt
Ïà¹ØÎĵµ£º
Èç¹ûÄãÄÜÕýÈ·»Ø´ðÒÔÏÂÎÊÌâ²¢Éî¿ÌÀí½âÏà¹ØÖªÊ¶µãÔÀí£¬ÄÇôÄã¿ÉÒÔËãµÃÉÏ»ù±¾ºÏ¸ñµÄLinuxÄں˿ª·¢¹¤³Ìʦ£¬ÊÔÊÔ¿´£¡
1)LinuxÖÐÖ÷ÒªÓÐÄļ¸ÖÖÄÚºËËø£¿
2)LinuxÖеÄÓû§Ä£Ê½ºÍÄÚºËģʽÊÇʲôº¬Ò⣿
3)ÔõÑùÉêÇë´ó¿éÄÚºËÄڴ棿
4)Óû§½ø³Ì¼äͨÐÅÖ÷ÒªÄļ¸ÖÖ·½Ê½£¿
5)ͨ¹ý»ï°éϵͳÉêÇëÄÚºËÄÚ´æµÄº¯ÊýÓÐÄÄЩ£¿
6)Í ......
from: http://cc.byexamples.com/20070520/tap-the-interrupt-signal/
When you hit control+c, you are actually send a SIGINT ( Interrupt signal ) to your program. By default, your program will be terminated after receiving SIGINT. But you can change the way of handling Interrupt signal.
Some of the a ......
³õ´Î½Ó´¥ÓëOSÏà¹ØµÄÉ豸Çý¶¯±àд£¬¸Ð¾õ»¹Í¦ÓÐÒâ˼µÄ£¬ÎªÁ˲»ÖÁÓÚÍüµô¿´¹ýµÄ¶«Î÷£¬±Ê¼Ç¸ú×ܽᵱȻ²»¿Éȱ£¬¸üºÎ¿öÎÒ¾ö¶¨ÎªÇ¶ÈëʽÂôÃüÁË¡£ºÃ£¬ÑÔ¹éÕý´«£¬ÎÒ˵һ˵Õâ¶Îʱ¼äµÄÊÕ»ñ£¬¸ú´ó¼Ò·ÖÏíÒ»ÏÂLinuxµÄÇý¶¯¿ª·¢¡£µ«Õâ´ÎÖ»ÏÈÕë¶ÔLinuxµÄUSB×Óϵͳ×÷·ÖÎö£¬ÒòΪÖÜÎåÑÐÌÖÀϰå´ß»õ¡£µ±È»£¬»¹»á˳´øÌáÒ»ÏÂÆäËûµÄÇý¶¯³ÌÐòд·¨¡£
&n ......
Linux patchµÄÓ÷¨
http://hi.baidu.com/issaria/blog/item/b04527ec816967d72f2e2184.html
2008-08-14 14:50
Ò²ÐíÖ»ÊÇÎÒÒ»¸öÈ˱Ƚϱ¿£¬Ã¿´ÎÅöµ½bug£¬ËäÈ»ÓÐÈ˸ø³ö²¹¶¡£¨patch£©£¬µ«ÊÇÈ´²»ÖªµÀÔõôʹÓá£Manual Page ( man patch )Ò²Ö»¸ø³ö patch -p(num) <patchfileÕâÑùµÄÓ÷¨£¬¾ßÌåÒ²²»ÖªµÀÔõÑùÈ·¶¨num£¬Èç¹ûÄãÒ²ÓÐ ......
£¨1£©Ê×ÏÈÊǶÔLinuxÆô¶¯¹ý³ÌµÄ¸ú×ٺͷÖÎö£¬Éú³ÉÏêϸµÄÆô¶¯Ê±¼ä±¨¸æ¡£
¡¡¡¡½ÏΪ¼òµ¥¿ÉÐеķ½Ê½ÊÇͨ¹ýPrintkTime¹¦ÄÜΪÆô¶¯¹ý³ÌµÄËùÓÐÄÚºËÐÅÏ¢Ôö¼Óʱ¼ä´Á£¬±ãÓÚ»ã×Ü·ÖÎö¡£PrintkTime×îÔçΪCELFËùÌṩµÄÒ»¸öÄں˲¹¶¡£¬ÔÚºóÀ´µÄKernel 2.6.11°æ±¾ÖÐÕýʽÄÉÈë±ê×¼Äںˡ£ËùÒÔ´ó¼Ò¿ÉÄÜÔÚа汾µÄÄÚºËÖÐÖ±½ÓÆôÓøù¦ÄÜ¡£Èç¹ûÄãµÄLin ......