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
Ïà¹ØÎĵµ£º
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 ......
probeÊÇusb×Óϵͳ×Ô¶¯µ÷ÓõÄÒ»¸öº¯Êý£¬ÓÐUSBÉ豸½Óµ½Ó²¼þ¼¯Ï߯÷ʱ£¬usb×Óϵͳ»á¸ù¾Ýproduction IDºÍvendor IDµÄ×éºÏ»òÕßÉ豸µÄclass¡¢subclass¸úprotocolµÄ×éºÏÀ´Ê¶±ðÉ豸µ÷ÓÃÏàÓ¦Çý¶¯³ÌÐòµÄprobe£¨Ì½²â£©º¯Êý£¬¶ÔÓÚskeletonÀ´Ëµ£¬¾ÍÊÇskel_probe¡£ÏµÍ³»á´«µÝ¸øÌ½²âº¯ÊýÒ»¸öusb_interface *¸úÒ»¸östruct usb_device_id *×÷Î ......
±¾Îĵµ²âÊÔ»·¾³£º
1£©Linux²Ù×÷ϵͳ°æ±¾£º
Red Hat Enterprise Linux Server release 5
2.6.18-8.el5
2£©jdk°æ±¾
1.5.0_16
LinuxÏÂÁ¬JavaÁ¬sap²½Öè
1£©ÏÂÔØsapjco.jar
  ......
ÎÒÃǾ³£»áÅöµ½ÕâÑùµÄÎÊÌ⣬Óà telnet/ssh µÇ¼ÁËÔ¶³ÌµÄ Linux ·þÎñÆ÷£¬ÔËÐÐÁËһЩºÄʱ½Ï³¤µÄÈÎÎñ£¬ ½á¹ûÈ´ÓÉÓÚÍøÂçµÄ²»Îȶ¨µ¼ÖÂÈÎÎñÖÐ;ʧ°Ü¡£ÈçºÎÈÃÃüÁîÌá½»ºó²»Êܱ¾µØ¹Ø±ÕÖÕ¶Ë´°¿Ú/ÍøÂç¶Ï¿ªÁ¬½ÓµÄ¸ÉÈÅÄØ£¿ÏÂÃæ¾ÙÁËһЩÀý×Ó£¬ Äú¿ÉÒÔÕë¶Ô²»Í¬µÄ³¡¾°Ñ¡Ôñ²»Í¬µÄ·½Ê½À´´¦ÀíÕâ¸öÎÊÌâ¡£
nohup/setsid/&
³¡¾°£º
Èç¹ûÖ» ......