ÔÚʵÏÖÇý¶¯³ÌÐòµÄmmapº¯Êýʱ£¬Òª×¢ÒâÓ³ÉäµØÖ·µÄת»»ÎÊÌ⣬¼û´úÂë¡£
¶¨ÒåÒ»¸öÉ豸½á¹¹Ì壺
struct leedriver
{
struct cdev cdev;
unsigned char mem[MEMSIZE];
};
ÕâÀïÃæÕâ¸öMEMSIZE£¬×îС¶¼ÒªÊÇ4096£¬ÒòΪÄÚ´æÓ³ÉäÊÇÒÔҳΪµ¥Î»µÄ¡£
ÔÚʵÏÖsimple_remap_mmapº¯Êýʱ£¬´úÂëÈçÏÂ
static int simple_remap_mmap(struct file *filp, struct vm_area_struct *vma)
{
vma->vm_pgoff = ((u32)virt_to_phys(leedriverp->mem)) >> PAGE_SHIFT;
printk("vma->vm_pgoff = %lx\n",vma->vm_pgoff);
if (remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,
vma->vm_end - vma->vm_start,
vma->vm_page_prot))
return -EAGAIN;
vma->vm_ops = &simple_remap_vm_ops;
simple_vma_open(vma);
return 0;
}
×¢Ò⺯Êý¿ªÍ·µÄvma->vm_pgoff = ((u32)virt_to_phys(leedriverp->mem)) >> PAGE_SHIFT;
leedriverp->memÊǸöÄÚºËÐéÄâµØÖ·£¬Ó¦¸Ãͨ¹ývirt_to_physת»»³ÉÎïÀíµØÖ·£¬ÔÙ½øÐÐ×óÒƲÙ×÷£¬¾ÍOKÁË¡£
Ö®ºó¶¨ÒåÒ»ÏÂvm_ops
static struct vm_operations_struct simple_remap_vm ......
linuxϵĵ÷ÊÔ¹¤¾ß
Ëæ×ÅXPµÄÁ÷ÐУ¬ÈËÃÇÔ½À´Ô½×¢ÖØÈí¼þµÄÇ°ÆÚÉè¼Æ¡¢ºóÆÚµÄʵÏÖ£¬ÒÔ¼°¹á´©ÓÚÆäÖеIJâÊÔ¹¤×÷£¬¾¹ýÕâ¸ö¹ý³Ì³öÀ´µÄ×ÔÈ»ÊǸßÖÊÁ¿µÄÈí¼þ¡£ÉõÖÁÓÐÈËÉù³ÆXP »áÌÔ̵÷ÊÔÆ÷£¡Õ⵱ȻÊÇÓÐÒ»¶¨µÀÀíµÄ£¬È»¶ø¾ÍÄ¿Ç°µÄÏÖʵÀ´¿´£¬Õ⻹ÊÇÒ»ÖÖÀíÏë¡£ÔÚÈÕ³£¹¤×÷ÖУ¬µ÷ÊÔ¹¤¾ß»¹ÊDZز»¿ÉÉٵġ£ÔÚLinuxÏ£¬µ÷ÊÔ¹¤¾ß²¢·ÇÖ»ÓÐ gdb£¬»¹ÓкܶàÆäËüµ÷ÊÔ¹¤¾ß£¬ËüÃǶ¼¸÷ÓÐËù³¤£¬²àÖØ·½ÃæÒ²ÓÐËù²»Í¬¡£±¾ÎĽéÉܼ¸ÖÖ±ÊÕß³£Óõĵ÷ÊÔ¹¤¾ß£º
1. mtrace
ÔÚlinuxÏ¿ª·¢Ó¦ÓóÌÐò£¬ÓÃC/C++ÓïÑԵľӶࡣÄÚ´æй¶ºÍÄÚ´æÔ½½çµÈÄÚ´æ´íÎó£¬ÎÞÒÉÊÇÆäÖÐ×îÍ·ÌÛµÄÎÊÌâÖ®Ò»¡£glibcΪ½â¾öÄÚ´æ´íÎóÌṩÁËÁ½ÖÖ·½°¸£º
Ò»ÖÖÊÇhookÄÚ´æ¹ÜÀíº¯Êý¡£hookÄÚ´æ¹ÜÀíº¯Êýºó£¬Äã¿ÉÒÔͨ¹ý¼ÇÏÂÄÚ´æ·ÖÅäµÄÀúÊ·¼Ç¼£¬ÔÚ³ÌÐòÖÕֹʱ²é¿´ÊÇ·ñÓÐÄÚ´æй¶£¬ÕâÑù¾Í¿ÉÒÔÕÒ³öÄÚ´æй¶µÄµØ·½ÁË¡£ÄãÒ²¿ÉÒÔͨ¹ýÔÚËù·ÖÅäÄÚ´æµÄÊ×βдÈëÌØÊâµÄ±êÖ¾£¬ÔÚÊÍ·ÅÄÚ´æʱ¼ì²é¸Ã±êÖ¾ÊÇ·ñ±»ÆÆ»µÁË£¬ÕâÑù¾Í¿ÉÒÔ´ïµ½¼ì²éÄÚ´æÔ½½çÎÊÌâµÄÄ¿µÄ¡£
ÁíÍâÒ»ÖÖ·½·¨¸ü¼òµ¥£¬glibcÒѾΪµÚÒ»ÖÖ·½°¸ÌṩÁËĬÈϵÄʵÏÖ£¬ÄãÒª×öµÄÖ»ÊÇÔÚÌض¨µÄλÖõ÷ÓÃmtrace/muntraceÁ½¸öº¯Êý£¬ËüÃǵĺ¯ÊýÔÐÍÈçÏ£º
#include
void mtrace(void);
void mun ......
µÚÒ»²½:ÏÂÔØFLASHµÄ²å¼þ
http://www.adobe.com/ÔÚÕâ¸öÒ³ÃæÉÏÓкܶà²å¼þ,ÔÚÕâÀïÄãÖ»ÓÃÏÂÔØ
ÎļþÃû×Ö:install_flash_player_9_linux.tar.gz
µÚ¶þ²½:½âѹÎļþ°ü
µ±Ç°µÄ¹¤×÷Ŀ¼ÊÇ:USR
[root@isitqnx usr]#tar zvxf install_flash_player_7_linux.tar.gz µÃµ½Ò»¸öͬÃûÎļþĿ¼
[root@isitqnx usr]#cd? install_flash_player_7_linux.tar.gz
´Ëʱµ±Ç°Ä¿Â¼ÊÇinstall_flash_player_7_linux.tar.gz Ìáʾ·ûºÅÊÇ:[root@isitqnx install_flash_player_7_linux]#
µÚÈý²½:°²×°
·ÖÁ½ÖÖ°²×°·½·¨
1: ×î·½±ãµÄ ·½·¨:
Ö´ÐиÃĿ¼ÏµĿÉÖ´ÐÐÎļþflashplayer-installer
ÊÂÀý:[root@isitqnx install_flash_player_7_linux]# ./flashplayer-installer
½Ó×ÅËü»áÏòÄãÌἸ¸öÎÊÌâ,¶¼ÊÇЩ¹ØÓÚÄãµÄMOZILLA¾ßÌ尲װλÖÃ,ͨ³£µÄ°²×°Î»ÖÃÊÇ:/usr/lib/mozilla-version
ÔÚÎҵĻúÆ÷ÖÐÊÇ/usr/lib/mozilla-1.4(Îҵİ汾ºÅÊÇ1.4)
ÔڻشðÎÊÌâʱºò,ÕýÈ·ÊäÈëÄãµÄMOZILLAλÖþÍÐÐÁË.È»ºó»Ø´ð"Y",°²×°¾ÍËãÍê³ÉÁË.
2:ÊÖ¹¤°²×°,Ò²²»ËãÌ«Âé·³
......
pid_t pid=fork()
it has 3 situation for the return result pid
0 child
>0 parent process
<0 fork fail
fork create a new process and it parent live alse when the child process had been created ......
pid_t pid=fork()
it has 3 situation for the return result pid
0 child
>0 parent process
<0 fork fail
fork create a new process and it parent live alse when the child process had been created ......
pid_t pid=fork()
it has 3 situation for the return result pid
0 child
>0 parent process
<0 fork fail
fork create a new process and it parent live alse when the child process had been created ......
pid_t pid=fork()
it has 3 situation for the return result pid
0 child
>0 parent process
<0 fork fail
fork create a new process and it parent live alse when the child process had been created ......
×î½ü×öµÄһЩ¹¤×÷ÐèÒªÓõ½Ï̳߳ؼ¼Êõ£¬Òò´Ë²Î¿¼ÁËһЩ×ÊÁϺÍÊé¼®£¬È硶0bug c/c++ÉÌÓù¤³ÌÖ®µÀ¡·¡£
Ϊ´ËÔÚlinuxƽ̨ÉÏÓô¿cдÁËÒ»¸öÏ̳߳صÄʵÏÖ¡£
ÔÚ´ËÁгöÁËÔ´úÂë¡£
Ö÷ÒªÓõ½µÄÊý¾Ý½á¹¹ÓÐ
1.struct thread_pool_t // thread pool µÄʵÏÖ´úÂë
2.struct thread_pool_token_t //ÔÚthread pool ÖÐÓõ½µÄ½á¹¹£¬Ò»¸ö¸ÃÀàÐͱäÁ¿´ú±íÒ»ÌõÏß³Ì
3.struct thread_pool_job_t //µ±ÏßÇ°³Ì´¦Àí¸ÃÈÎÎñ½«»Øµ÷½á¹¹
Éè¼Æ˼·£º
Ö÷Ï̴߳´½¨Ï̳߳صĿØÖÆỊ̈߳¬
¹ÜÀíÏ߳̽«½øÈëÑ»·À´×öÒÔÏÂÊÂÇ飺
1.Èç¹ûµ±Ç°¿ÕÏнø³Ì²»×ã²¢ÇÒ×ÜÏß³ÌÊýûÓдﵽÉÏÏÞ£¬½«´´½¨Ò»Ìõ¿ÕÏÐỊ̈߳¬ÖÁµÀ¿ÕÏÐÏ̴߳ﵽ3Ìõ£¨¼ûTHREAD_POOL_MIN_IDLE_SIZE£©
2.²»¶Ï¼ì²é¹¤×÷ÈÎÎñ¶ÓÁУ¬ÓÐÔò°²ÅÅÒ»Ìõ¿ÕÏÐÏ̶߳ԸÃÈÎÎñ½øÐд¦Àí
ÆÕͨÏ̱߳»¹ÜÀíÏ̴߳´½¨ºóÒ²½«½øÈëÑ»·À´×öÒÔÏÂÊÂÇ飺
1.¼ì²éµ±Ç°assignµÄthread_pool_token_t½á¹¹µÄ״̬£¬Èç¹ûÊÇTREAD_POOL_STATE_BUSYÔòµ÷ÓÃthread_pool_token_tËù×¢²áµÄ»Øµ÷º¯ÊýÀ´´¦ÀíÈÎÎñ¡£
2.Íê³É¸ÃÈÎÎñºó¼ì²âµ±Ç°¿ÕÏнø³Ì¹»²»¹»£¬Èç¹ûÌ«¶àÔòÍ˳ö±¾Ị̈߳¬·ñÔò»á¸ÄдÔËÐÐ״̬ΪTREAD_POOL_STATE_IDLEºó¼ÌÐøÑ»·
× ......
×î½ü×öµÄһЩ¹¤×÷ÐèÒªÓõ½Ï̳߳ؼ¼Êõ£¬Òò´Ë²Î¿¼ÁËһЩ×ÊÁϺÍÊé¼®£¬È硶0bug c/c++ÉÌÓù¤³ÌÖ®µÀ¡·¡£
Ϊ´ËÔÚlinuxƽ̨ÉÏÓô¿cдÁËÒ»¸öÏ̳߳صÄʵÏÖ¡£
ÔÚ´ËÁгöÁËÔ´úÂë¡£
Ö÷ÒªÓõ½µÄÊý¾Ý½á¹¹ÓÐ
1.struct thread_pool_t // thread pool µÄʵÏÖ´úÂë
2.struct thread_pool_token_t //ÔÚthread pool ÖÐÓõ½µÄ½á¹¹£¬Ò»¸ö¸ÃÀàÐͱäÁ¿´ú±íÒ»ÌõÏß³Ì
3.struct thread_pool_job_t //µ±ÏßÇ°³Ì´¦Àí¸ÃÈÎÎñ½«»Øµ÷½á¹¹
Éè¼Æ˼·£º
Ö÷Ï̴߳´½¨Ï̳߳صĿØÖÆỊ̈߳¬
¹ÜÀíÏ߳̽«½øÈëÑ»·À´×öÒÔÏÂÊÂÇ飺
1.Èç¹ûµ±Ç°¿ÕÏнø³Ì²»×ã²¢ÇÒ×ÜÏß³ÌÊýûÓдﵽÉÏÏÞ£¬½«´´½¨Ò»Ìõ¿ÕÏÐỊ̈߳¬ÖÁµÀ¿ÕÏÐÏ̴߳ﵽ3Ìõ£¨¼ûTHREAD_POOL_MIN_IDLE_SIZE£©
2.²»¶Ï¼ì²é¹¤×÷ÈÎÎñ¶ÓÁУ¬ÓÐÔò°²ÅÅÒ»Ìõ¿ÕÏÐÏ̶߳ԸÃÈÎÎñ½øÐд¦Àí
ÆÕͨÏ̱߳»¹ÜÀíÏ̴߳´½¨ºóÒ²½«½øÈëÑ»·À´×öÒÔÏÂÊÂÇ飺
1.¼ì²éµ±Ç°assignµÄthread_pool_token_t½á¹¹µÄ״̬£¬Èç¹ûÊÇTREAD_POOL_STATE_BUSYÔòµ÷ÓÃthread_pool_token_tËù×¢²áµÄ»Øµ÷º¯ÊýÀ´´¦ÀíÈÎÎñ¡£
2.Íê³É¸ÃÈÎÎñºó¼ì²âµ±Ç°¿ÕÏнø³Ì¹»²»¹»£¬Èç¹ûÌ«¶àÔòÍ˳ö±¾Ị̈߳¬·ñÔò»á¸ÄдÔËÐÐ״̬ΪTREAD_POOL_STATE_IDLEºó¼ÌÐøÑ»·
× ......