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

The Linux Kernel Module Programming Guide

 http://www.faqs.org/docs/kernel/
µÄ11ºÍ12ÔÙÊÔÊÔ¡£
Linux Äں˵ÄWorkQueues API×öÁËÐÞ¸Ä
 
 
WorkQueue»úÖÆÔÊÐíÄں˴úÂëÔÚÍíÒ»µãµÄʱ¼äÖ´ÐС£Workqueueͨ¹ý´æÔÚµÄÒ»¸ö»òÕ߶à¸öרÃŵĽø³ÌʵÏÖ£¬È¥Ö´ÐжÓÁй¤×÷¡£ÒòΪÔÚ½ø³ÌµÄÉÏÏÂÎÄ»ã×ÜÖ´ÐУ¬Òò´ËÈç¹ûÐèÒª£¬Æä¿ÉÒÔsleep¡£WorkQueueÒ²¿ÉÒÔÑÓ³ÙÌض¨Ê±¼äÖ´Ðй¤×÷¡£ËùÒÔËüÃÇÔÚÄÚºËÖÐÐí¶àµØ·½Ê¹Óá£
David Howells×î½ü¼ì²éworkqueueʱ·¢ÏÖwork_struct£¨ÓÃÀ´ÃèÊöÒ»¸ö³ÌÐòÖ´ÐУ©ÊÇÏ൱´óµÄ£¬ÔÚ64-bit»úÆ÷ÉÏÓÐ96bytes£¬ÕâÊÇÏ൱´óµÄÊý¾Ý½á¹¹£¬ÒòΪºÜ¶àµØ·½¶¼Ê¹ÓÃÕâ¸ö½á¹¹¡£Òò´ËËûÏë³ö°ì·¨°ÑËüÃDZäС£¬Ëû³É¹¦Á˵«ÊÇÐèÒª¸Ä¶¯workqueueµÄAPI.
µ¼ÖÂstruct work_structÓ·Ö×µÄÔ­ÒòÊÇ£º
1.ÆäÖÐËù°üº¬timer structure¡£Ðí¶àworkqueueµÄÓû§´ÓÀ´²»Ê¹ÓÃÕâ¸ödelayÌØÐÔ£¬µ«ÊÇÔڽṹÌåÄÚ¶¼°üº¬timer_list½á¹¹¡£
2.˽ÓÐÊý¾ÝÖ¸Õ룬ÕâÊÇ´«µÝ¸øworkº¯ÊýµÄ²ÎÊý¡£Ðí¶àº¯ÊýʹÓÃÕâ¸öÖ¸Õ룬µ«ÊÇËüͨ³£¿ÉÒÔ´Ówork_structÖ¸ÕëÖÐÓÃcontain_of()¼ÆËã³öÀ´¡£
3.Ò»¸öwordÖ»ÓÃÒ»¸öbitÀ´±íʾpending£¬ÓÃÀ´ËµÃ÷Õâ¸öwork_structÄ¿Ç°ÔÚ¶ÓÁÐÉϵȴýÖ´ÐС£
David´¦ÀíÁËÒÔÉϵÄÇé¿ö£¬Ê¹ÓÃÁËÒ»ÖÖеĽṹÌåstruct delayed_work£¬×¨ÃÅÓÃÓÚÑÓʱµ÷ÓÃʹÓ᣶ø°Ñstruct work_structureÖеÄtimer½á¹¹Ìåɾ³ýÁË¡£Ë½ÓÐÊý¾ÝÖ¸ÕëÏûʧÁË£¬workº¯ÊýʹÓÃÒ»¸öÖ¸Ïòwork_structureµÄÖ¸Õ룬typedef void (*work_func_t)(struct work_struct *work)¡£Ê¹ÓÃһЩ¼¼ÇÉɾ³ýÁËpending word¡£ÕâЩ±ä¶¯µÄ½á¹ûʹµÃworkqueueµÄAPI·¢ÉúÁ˱仯¡£ÓÐÁ½ÖÖ·½·¨ÉùÃ÷Ò»¸öworkqueueµÄentry¡£
    DECLARE_WORK(name, func);
    DECLARE_DELAYED_WORK(name, func);
  ¶ÔÓÚÔÚÔËÐÐʱÉú³ÉµÄwork structure£¬³õʼ»¯ºêÏÖÔÚÈçÏ£º
  INIT_WORK(struct work_struct work, work_func_t func);
  PREPARE_WORK(struct work_struct work, work_func_t func);
  INIT_DELAYED_WORK(struct delayed_work work, work_func_t func);
  PREPARE_DELAYED_WORK(struct delayed_work work, work_func_t func);
  INIT_*°æ±¾µÄºê³õʼ»¯Õû¸ö½á¹¹£¬ËüÃDZØÐëÔÚÕâ¸ö½á¹¹µÚÒ»´Î³õʼ»¯µÄʱºòʹÓã¬PREPARE_*°æ±¾µÄºêÔËÐÐËÙ¶ÈÉÔ΢¿ìЩ¡£
The functions for adding entries to workqueues (and canceling them) now look like this:
    int queue_work(struct workqueue_struct *queue,
  


Ïà¹ØÎĵµ£º

ʵսLinux Bluetooth±à³Ì(Áù) L2CAP±à³ÌʵÀý

ÀýÒ»£º·¢ËÍSignaling Packet£º
Signaling CommandÊÇ2¸öBluetoothʵÌåÖ®¼äµÄL2CAP²ãÃüÁî´«Êä¡£ËùÒÔµÃSignaling CommandʹÓÃCID 0x0001.
¶à¸öCommand¿ÉÒÔÔÚÒ»¸öC-frame£¨control frame£©Öз¢ËÍ¡£
 Èç¹ûÒªÖ±½Ó·¢ËÍSignaling Command.ÐèÒª½¨Á¢SOCK_RAWÀàÐ͵ÄL2CAPÁ¬½ÓSocket¡£ÕâÑù²ÅÓлú»á×Ô¼ºÌî³äCommand Code£¬Identi ......

Linux±ØѧµÄ60¸öÃüÁî (ת)

inux±ØѧµÄ60¸öÃüÁî
LinuxÌṩÁË´óÁ¿µÄÃüÁÀûÓÃËü¿ÉÒÔÓÐЧµØÍê³É´óÁ¿µÄ¹¤×÷£¬Èç´ÅÅ̲Ù×÷¡¢Îļþ´æÈ¡¡¢Ä¿Â¼²Ù×÷¡¢½ø³Ì¹ÜÀí¡¢ÎļþȨÏÞÉ趨µÈ¡£ËùÒÔ£¬ÔÚLinuxϵͳÉϹ¤×÷Àë²»¿ªÊ¹ÓÃϵͳÌṩµÄÃüÁî¡£ÒªÏëÕæÕýÀí½âLinuxϵͳ£¬¾Í±ØÐë´ÓLinuxÃüÁîѧÆð£¬Í¨¹ý»ù´¡µÄÃüÁîѧϰ¿ÉÒÔ½øÒ»²½Àí½âLinuxϵͳ¡£
²»Í¬Linux·¢ÐаæµÄÃüÁîÊýÁ¿² ......

LinuxÄÚ´æ¹ÜÀíÖ®slab·ÖÅäÆ÷·ÖÎö(ÐøÈý)

Áù£ºkmem_cache_allocµÄʵÏÖ·ÖÎö:
ÎÒÃÇÔÚÉÏÃæ¿ÉÒÔ¿´µ½£¬´´½¨Ò»¸öcacheÃèÊö·ûµÄʱºò£¬²¢Ã»ÓÐÕâÖ®·ÖÅäslabÊý¾Ý¡£ÏÖÔÚÎÒÃÇÀ´¿´Ò»ÏÂÔõô´ÓcacheÖÐÉêÇë¶ÔÏó
void * kmem_cache_alloc (kmem_cache_t *cachep, int flags)
{
     return __cache_alloc(cachep, flags);
}
ʵ¼ÊÉÏ»áµ÷ÓÃ__cache_allo ......

LinuxÄÚ´æ¹ÜÀíÖ®slab·ÖÅäÆ÷·ÖÎö(ÐøËÄ)


Æߣºkmem_cache_free£¨£©µÄʵÏÖ
kmem_cache_freeÓÃÓÚ°Ñ´ÓslabÖзÖÅäµÄ¶ÔÏóÊͷŵô£¬Í¬·ÖÅäÒ»Ñù£¬ËüÊ×ÏÈ»á°ÑËü·Åµ½ACÖУ¬Èç¹ûACÂúÁË£¬Ôò°Ñ¶ÔÏóÊͷŵ½shareÁ´ÖУ¬Èç¹ûshareÒ²ÂúÁË£¬Ò²¾Í°ÑËüÊÍ·ÅÖÁslab¡£À´¿´¾ßÌåµÄ´úÂ룺
void kmem_cache_free (kmem_cache_t *cachep, void *objp)
{
     unsi ......

LinuxÏÂRPCµÄhello world

Linux ÏÂÃæʹÓÃRPCÐèҪʹÓõ½ÃüÁîrpcgen.
ÔÚLinuxÏ¿ª·¢RPC³ÌÐòÁ÷³ÌÈçÏ£º
1.дһ¸örpc³ÌÐò£¬
       Èçtest.x
2.ʹÓÃrpcgenÉú³É±ØÐëµÄÎļþ£¬Í¨³£ÊÇ¿Í»§¶ËºÍ·þÎñÆ÷¶ËÒÔ¼°Í·Îļþ
       $rpcgen test.x
3.ʹÓÃrpcgenÉú³É·þÎñÆ÷¶ËºÍ¿Í»§¶ËµÄCÓïÑÔ´úÂë
&n ......
© 2009 ej38.com All Rights Reserved. ¹ØÓÚE½¡ÍøÁªÏµÎÒÃÇ | Õ¾µãµØͼ | ¸ÓICP±¸09004571ºÅ