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

Linux vmallocµÄʵÏÖ

Äں˰汾:2.6.28
linuxÈçºÎÀûÓûï°éϵͳ,slab·ÖÅäÆ÷·ÖÅäÄÚ´æ,ÓÃÕâЩ·½·¨µÃµ½µÄÄÚ´æÔÚÎïÀíµØÖ·É϶¼ÊÇÁ¬ÐøµÄ, È»¶ø,ÓÐЩʱºò,ÿ´ÎÇëÇóÄÚ´æÊ±,ϵͳ¶¼·ÖÅäÎïÀíµØÖ·Á¬ÐøµÄÄÚ´æ¿éÊDz»ºÏÊʵÄ,¿ÉÒÔÀûÓÃС¿éÄÚ´æ“Á¬½Ó”³É´ó¿é¿ÉʹÓõÄÄÚ´æ.ÕâÔÚ²Ù×÷ϵͳÉè¼ÆÖÐÒ²±»³ÆÎª “ÄÚ´æÆ´½Ó”,ÏÔÈ»,ÄÚ´æÆ´½ÓÔÚÐèÒª½Ï´óÄÚ´æ,¶øÄÚ´æ·ÃÎÊÏà±È֮ϲ»ÊÇºÜÆµ·±µÄÇé¿öÏÂÊDZȽÏÓÐЧµÄ.
¡¡¡¡ÔÚlinuxÄÚºËÖÐÓÃÀ´¹ÜÀíÄÚ´æÆ´½ÓµÄ½Ó¿ÚÊÇvmalloc/vfree.ÓÃvmalloc·ÖÅäµÃµ½µÄÄÚ´æÔÚÏßÐÔµØÖ·ÊÇÆ½»¬µÄ,µ«ÊÇÎïÀíµØÖ·ÉÏÊÇ·ÇÁ¬ÐøµÄ.
º¯ÊývmallocÁгöÈçÏÂ:(mm/vmalloc.c)
size: ·ÖÅäµÄÐéÄâ¿Õ¼äµÄ´óС.
gfp_mask: Ò³¼¶·ÖÅäÆ÷µÄ±êÖ¾.
prot: ÒÑ·ÖÅäµÄ±£»¤ÑÚÂë.
void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot)
{
    return __vmalloc_node(size, gfp_mask, prot, -1,
                __builtin_return_address(0));
}
º¯Êý_vmalloc·ÖÅä×ã¹»µÄÒ³ÊýÓësizeÏàÅä,°ÑËüÃÇÓ³Éä½øÁ¬ÐøµÄÄÚºËÐéÄâ¿Õ¼ä,µ«·ÖÅäµÄÄÚ´æ¿é²»Ò»¶¨Á¬Ðø.ÔÚº¯ÊýÖеÚÒ»²½ÊÇÔÚvmlistÖÐѰÕÒµ½Ò»¸ö´óСºÏÊʵÄÐéÄâÄÚ´æ¿é(_get_vm_area_node(...)).
static void *__vmalloc_node(unsigned long size, gfp_t gfp_mask, pgprot_t prot,
                        int node, void *caller)
{
    struct vm_struct *area;
    //¼ì²éÇëÇó·ÖÅäµÄÄÚ´æ´óСÓÐûÓг¬¹ý×î´óµÄÎïÀíÒ³ÃæÊý¡£Èç¹û³¬¹ý·µ»Ø 0 £¬±íʾ·ÖÅäʧ°Ü¡£
    size = PAGE_ALIGN(size);
    //ÓÐЧÐÔ¼ì²é
    if (!size || (size >> PAGE_SHIFT) > num_physpages)
        return NULL;
    //È¡µÃÒ»¸öÓÐЧµÄvma
    area = __get_vm_area_node(size, VM_ALLOC, VMALLOC_START, VMALLOC_END,
                        node, gfp_mask, caller);
    //Èç¹ûÉêÇëµÄÎÞЧ£¬·µ»ØÒ»¸öNULLÖ¸Õë
&nb


Ïà¹ØÎĵµ£º

linux ÐÂÔöϵͳµ÷ÓÃ


´ËÎÄÓÚ2010-02-26±»ÍƼöµ½CSDNÊ×Ò³
ÈçºÎ±»ÍƼö£¿
×î½üÔÚÑо¿ Linux
Äں˵Äʱ¼ä×Óϵͳ£¬ÎªÏÂһƪ³¤ÎÄ¡¶·þÎñÆ÷³ÌÐòÖеÄÈÕÆÚÓëʱ¼ä¡·×ö×¼±¸£¬ÎÞÒâÖÐ×¢Òâµ½ÁË Linux
ÐÂÔöµÄ¼¸¸öϵͳµ÷ÓõĶԱàд·þÎñÆ÷´úÂëµÄÓ°Ï죬ÏÈ´óּǼÔÚÕâÀï¡£ÕâÆª²©¿ÍÒ²¿ÉËã×÷ǰһƪ¡¶¶àÏß
³Ì·þÎñÆ÷µÄ³£Óñà³ÌÄ£ÐÍ¡·
µÄÒ»¸ö×¢½Å¡£
< type="te ......

Linux 2.6 ×Ö·ûÉ豸Çý¶¯³ÌÐò

¡ð
¡¢ËµÃ÷
±Ê¼ÇÊÊÓÃÓÚ
Linux
µÄ
2.6.10
ÒÔºóµÄÄںˡ£
±Ê¼ÇÒÔ
Linux
Device
Driver3
ÌṩµÄ
scull
³ÌÐò
(scull
Ŀ¼ÖеÄ
main.c
ºÍ
scull.h)
Ϊ¼Ç¼Ö÷Ïߣ¬²¢ÒÔ¸ÃÇý¶¯³ÌÐòÖеĸ÷ÖÖϵͳµ÷Óúͺ¯Êýµ÷ÓÃÁ÷³ÌΪ¼Ç
¼˳Ðò¡£±ÈÈ磬
module_init( )
ºÍ
module_exit(
)
ΪÏà¶ÔÓ¦µÄÒ»¶Ôϵͳµ÷Óã¬Ò»°ãÊé¼®Öж ......

linuxÄÚºËÇý¶¯Ä£¿é¼ÓÔØ·½Ê½

ÔÚÀàunix
²Ù×÷ϵͳ
ÖУ¬Çý¶¯
¼ÓÔØ
·½Ê½Ò»°ã·ÖΪ£º¶¯Ì¬¼ÓÔØºÍ¾²Ì¬¼ÓÔØ£¬ÏÂÃæ·Ö±ð¶ÔÆäÏêϸÂÛÊö¡£
Ò»¡¢¶¯Ì¬¼ÓÔØ
    ¶¯Ì¬¼ÓÔØÊǽ«Çý¶¯Ä£¿é¼ÓÔØµ½ÄÚºË
ÖУ¬¶ø²»ÄÜ·ÅÈë/lib/modules/Ï¡£
     ÔÚ2.4ÄÚºËÖУ¬¼ÓÔØÇý¶¯ÃüÁî
Ϊ£ºinsmod ,ɾ³ýÄ£¿éΪ£ºrmmod£»
     ÔÚ2 ......

LinuxÇý¶¯¿ª·¢Ñ§Ï°²½Öè

1. ѧ»áд¼òµ¥µÄmakefile
    2. ±àÒ»Ó¦ÓóÌÐò£¬¿ÉÒÔÓÃmakefileÅÜÆðÀ´
    3. ѧ»áдÇý¶¯µÄmakefile
    4. дһ¼òµ¥charÇý¶¯£¬makefile±àÒëͨ¹ý£¬¿ÉÒÔinsmod£¬ lsmod£¬ rmmod. ÔÚÇý¶¯µÄinitº¯ÊýÀï´òÓ¡hello world£¬ insmodºóÓ¦¸ÃÄܹ»Í¨¹ýdmesg¿´µ½Êä³ö¡£
  &n ......

linuxÇý¶¯³ÌÐòʵÀý

±¾ÀýÊÇ·ë¹ú½øµÄ ¡¶Ç¶ÈëʽLinux Çý¶¯³ÌÐòÉè¼Æ´ÓÈëÃŵ½¾«Í¨¡·µÄµÚÒ»¸öÀý×Ó
¸Ð¾õÕæÊǺÃÊé   Ç¿ÁÒÍÆ¼ö
×¢ÊÍÊÇdeep_pro¼ÓµÄ ×ªÔØÇë×¢Ã÷£¡ÎÒµÄÌØµãÊÇÎIJ»¼Óµã£¡
Õâ¸öÇý¶¯ÊÇÔÚÄÚ´æÖзÖÅäÒ»¸ö256×ֽڵĿռ䣬¹©Óû§Ì¬Ó¦ÓóÌÐò¶Áд¡£
ÏÈÊÇÍ·Îļþ demo.h
#ifndef _DEMO_H_
#define _DEMO_H_
#include <linux/ioct ......
© 2009 ej38.com All Rights Reserved. ¹ØÓÚE½¡ÍøÁªÏµÎÒÃÇ | Õ¾µãµØÍ¼ | ¸ÓICP±¸09004571ºÅ