ºìÁªLinuxÃÅ»§
Linux°ïÖú

Éý¼¶LinuxÓ²¼þÇý¶¯½á¹¹

·¢²¼Ê±¼ä:2005-05-09 01:36:22À´Ô´:ºìÁª×÷Õß:ÐÂÐÂ
Ó²¼þÇý¶¯³ÌÐòÊǽçÓÚÓ²¼þºÍLinuxÄÚºËÖ®¼äµÄÈí¼þ½Ó¿Ú£¬ÊÇÒ»Öֵͼ¶µÄ¡¢×¨ÓÃÓÚijһӲ¼þµÄÈí¼þ×é¼þ¡£ÕâÖÖÈí¼þ×é¼þ¿ÉÒÔʹӲ¼þÓë¸üÆÕ±éµÄ¸ß¼¶Ó¦ÓóÌÐò½Ó¿Ú²úÉú»¥¶¯¡£ÎªÄ³Ò»¾ßÌåµÄ×Óϵͳ»òÓ²¼þ¶Ë¿Ú£¨ÀýÈçSCSI¡¢USB»òPCMCIA£©Ìṩ֧³Ö£¬²»Í¬ÓÚΪËùÓÐSCSI¡¢USB»òPCMCIAÓ²¼þÉ豸Ìṩ֧³Ö¡£ÓÉÓÚеÄÓ²¼þÿÌ춼ÔÚ²úÉú£¬Òò´Ë²âÊÔÿһ¸ö¿ÉÄÜÓÃÓÚijһ¾ßÌå×ÓϵͳµÄÓ²¼þÊDz»¿ÉÄܵġ£ÄÚºËֻΪ¾ßÌåµÄһЩ×ÓϵͳÌṩ֧³Ö£¬Ó²¼þÇý¶¯³ÌÐòÒ²Ö»ÊÇΪʹÓÃÕâЩ×Óϵͳ¾ßÌåµÄijЩӲ¼þÌṩ֧³Ö¡£ÐÂÄں˱£³Ö¸ß¼¶Ó¦ÓóÌÐò½Ó¿ÚÓëµÍ¼¶Ó²¼þ¹¦ÄܵķÖÀë¡£Óû§¿ÉÒÔͨ¹ý±àдºÏÊʵÄÓ²¼þÇý¶¯³ÌÐò»òÐÞ¸ÄÄںˣ¬¸üÈÝÒ×µØΪÏÖÓÐϵͳÔö¼Ó¶ÔÐÂÓ²¼þµÄÖ§³Ö¡£

LinuxÓ²¼þÇý¶¯¿ÉÒÔͨ¹ýÁ½ÖÖ·½Ê½¼¯³Éµ½ÄÚºËÖУºÒ»Êǽ«ÆäÖ±½Ó±àÒë½øÐÐÄں˴ӶøÒ»ÀÍÓÀÒÝ£»¶þÊǽ«Æä±àд³ÉÒ»ÖÖÄ¿±ê¸ñʽ£¬ÔÚÐèÒªÌí¼ÓijÖÖÓ²¼þʱ£¬Äں˿ÉÒÔ½«Æäµ÷Èë¡£µ±Óû§¶ÔLinuxÄں˽øÐÐÉèÖÃʱ£¬Ã¿¸öÄÚºËÉèÖñàÒëÆ÷¶¼¿ÉÏÔʾ¸÷¸ö¿ÉÓÃÄÚºËÉèÖñäÁ¿µÄÃèÊöÐÅÏ¢£¬´Ó¶øʹÓû§¾ö¶¨Äĸö±äÁ¿Òª±»Ïû³ý£¬ÄĸöÐèҪдÈëÄںˣ¬»¹ÓÐÄĸö¿ÉÒÔ±àд³ÉÒ»ÖֿɼÓÔØÄÚºËÄ£¿é¡£

Ö±½Ó½«Ó²¼þÇý¶¯³ÌÐòдÈëÄÚºËÓŵãÔÚÓÚ£¬Óû§¿ÉÒÔËæʱ¶ÔËü½øÐе÷ÓöøÎÞÐè°²×°¡£µ«ÊÇÕâÑù´ó´óÔö¼ÓÄÚºËÕ¼ÓõĿռ䡣½«Ó²¼þÇý¶¯³ÌÐò±àд³ÉÒ»ÖֿɼÓÔصÄÄÚºËÄ£¿é£¬ËäÈ»»áÒòΪѰÕÒÇý¶¯Ä£¿é¶øÔö¼Óϵͳ×ÊÔ´µÄÕ¼ÓúÍÔËÐÐʱ¼ä£¬µ«ÊÇÓëÅÓ´óµÄÄÚºËËùÏûºÄµÄ×ÊÔ´Ïà±ÈÏÔµÃ΢²»×ãµÀ¡£½«Ó²¼þÇý¶¯³ÌÐò±àд³ÉÒ»ÖֿɼÓÔصÄÄÚºËÄ£¿é£¬»¹¿ÉΪÈí¼þ¿ª·¢ÌṩÐí¶à±ãÀû¡£µ±Óû§ÐèÒª¶ÔijһӲ¼þÇý¶¯³ÌÐò½øÐпª·¢»ò¾À´íʱ£¬Óû§¿ÉÒÔ¶¯Ì¬µØжÔؾɵİ汾²¢¼ÓÔØеİ汾£¬µ«ÊÇÈç¹ûÓû§µÄÇý¶¯³ÌÐòÒÑдÈëÄںˣ¬ÄÇô±ØÐë¶ÔÄں˽øÐÐÖØбàд£¬²¢ÇÒÿ´Î¶ÔÐ޸ĺóµÄ³ÌÐò½øÐвâÊÔʱ£¬¶¼±ØÐëÖØÐÂÆô¶¯ÏµÍ³¡£ÁíÍ⣬½«Ó²¼þÇý¶¯³ÌÐòÊÓΪ¿É¼ÓÔصÄÄÚºËÄ£¿é½øÐпª·¢ºÍÅäÖã¬ÕâÑùÓû§¾Í¿ÉÒÔ½«Ó²¼þÇý¶¯³ÌÐò×÷ΪһÖÖ¶ÀÁ¢µÄϵͳ½øÐÐÉý¼¶£¬¶ø²»±Ø¶ÔÄں˽øÐиĶ¯ÁË¡£

Óû§Òª×öµÄÖ»ÊDZàÒë²¢°²×°¿É¼ÓÔØÄÚºËÄ£¿é£¬ÆäËüµÄ¹¤×÷ÓÉÄ£¿é×ÔÒÑÀ´Íê³É¡£µ±ÏµÍ³Ê״ηÃÎÊijһӲ¼þÉ豸ʱ£¬Ö»Òª´æÔÚʹÓá°depmod¡±ÃüÁÁ¢µÄÄ£¿é´ÓÊô¹ØϵÊ÷£¬ÓëÖ®¶ÔÓ¦µÄÄ£¿é¾Í¿ÉÒÔ×Ô¶¯¼ÓÔØ¡£¿É¼ÓÔØÄÚºËÄ£¿éͨ³£Çé¿öÏ°²×°ÔÚϵͳ/lib/modulesĿ¼µÄÒ»¸ö×ÓĿ¼Ï¡£¸Ã×ÓĿ¼µÄÃû³ÆÓɽ¨Á¢Äں˵ÄMakefileÖеÄVERSION¡¢PATCHLEVEL¡¢SUBLEVELºÍEXTRAVERSIONµÈ±äÁ¿µÄÖµ¾ö¶¨¡£

Linux 2.6ÄÚºËΪӲ¼þÇý¶¯³ÌÐò´øÀ´Ò»¸öеġ¢Í³Ò»µÄ¿ò¼Ü¡£Óû§¶ÔÔ­±¾ÔËÐÐÓھɰ汾ÄÚºËϵÄÓ²¼þÇý¶¯³ÌÐò½øÐж¨ÖÆ¡£ÐÂÇý¶¯³ÌÐò¿ò¼Üͨ¹ý¶¨Òå¸÷ÖÖ½Ó¿Ú£¬ÎªÓ²¼þµÄ¼´²å¼´Óú͵çÔ´¹ÜÀíÌṩȫÃæÖ§³Ö¡£×Óϵͳ¿ÉÒÔͨ¹ýÕâЩ½Ó¿ÚÓë¸÷¸öÇý¶¯³ÌÐò½øÐÐͨÐÅ¡£ÐÂÇý¶¯³ÌÐò¿ò¼Ü¸ü¼ÓÃ÷È·ÁË×ÜÏߺÍÇý¶¯³ÌÐòÖ®¼äµÄÔðÈνçÏÞ¡£Linux 2.6Äں˻¹ÒýÈëÁËsysfsÎļþϵͳΪÿ¸öϵͳµÄÓ²¼þÊ÷½øÐзּ¶´¦Àí¡£Linux 2.6Äں˻¹¶Ô¿É¼ÓÔØÄÚºËÄ£¿é¹æ¶¨ÁËеÄÃüÃû·½·¨£¬Ê¹ÓõÄÊÇ.koÀ©Õ¹Ãû£¬¶ø²»ÊǾɰ汾±ê×¼µÄ.o (object)À©Õ¹Ãû¡£

ÕâÀォÖصã²ûÊö2.6ÄÚºËϵÄÓ²¼þÇý¶¯³ÌÐòÓëÒÔÍùÄÚºËϵÄÓ²¼þÇý¶¯³ÌÐòÔÚÖ÷Ìå½á¹¹ÉϵIJ»Í¬Ö®´¦¡£

Éý¼¶Ó²¼þÇý¶¯³ÌÐòµÄ»ù±¾½á¹¹

Linux 2.4ÄÚºËϵÄÓ²¼þÇý¶¯±ê׼ģ°åÈçÏ£º

#define MODULE
#include linux/module.h>
#include linux/config.h>
#include linux/init.h>
static int __init name_of_initialization_routine(void) {
/*
* code here
*/
}
static void __exit name_of_cleanup_routine(void) {
/*
* code here
*/
}
module_init(name_of_initialization_routine);
module_exit(name_of_cleanup_routine);
¾É°æ±¾ÄÚºËϵÄÓ²¼þÇý¶¯³ÌÐòÓÐÒ»¸öÆÕ±éµÄÎÊÌ⣬¾ÍÊǶԳõʼ»¯Ä£¿éºÍÇå³ý¹¦ÄܵÄÃû³Æ½øÐмÙÉè¡£µ±¿ª·¢ÈËÔ±±àд¾É°æ±¾ÄÚºËϵÄÓ²¼þÇý¶¯³ÌÐòʱ£¬Èç¹ûʹÓÃȱʡµÄÃû³Æinit_module()ºÍcleanup_module()£¬ÄÇô¾Í²»ÐèÒª¶Ô³õʼ»¯Ä£¿éºÍÇå³ý¹¦ÄܵÄÃû³Æ½øÐмǼ¡£ÕâÖÖ·½·¨¾­³£»á³öÏÖ´íÎó£¬ÒÑÖð½¥±»ÌÔÌ­¡£ÔÚ2.6ÄÚºËÏ£¬Óû§±ØÐëʹÓÃmodule_init()ºêºÍmodule_exit()ºê¶Ô³õʼ»¯ºÍÍ˳ö¹æ³ÌµÄÃû³Æ½øÐмǼ¡£

ÁíÍ⣬ÔÚ2.6ÄÚºËÏ£¬Óû§ÎÞÂÛÊÇÔÚÔ´´úÂëÖл¹ÊÇÔÚMakefileÎļþÖж¼²»ÔÙÐèÒª¶Ô#define MODULE½øÐÐÃèÊö¡£Äں˴ϵͳ»á×Ô¶¯¶Ô´ËÀà·ûºÅ½øÐж¨Ò岢УÑé¡£µ±Óû§Îª2.6Äں˱àдӲ¼þÇý¶¯³ÌÐòʱ£¬±ØÈ»»áÓõ½´ËÀà´î½¨ÏµÍ³¡£

ÒªÏë¶ÔÒÑÓеÄÄ£¿é½øÐбàÒ룬²¢Ê¹Ö®¼ÓÔص½2.6Äںˣ¬±ØÐëÊ×ÏÈÍê³ÉһЩ»ù±¾µÄ½á¹¹±ä»¯¡£È»¶ø£¬µ±Óû§ÀûÓôËÀà½á¹¹¼ÓÔØÄ£¿éʱ£¬»á×¢Òâµ½ÔÚ±ê×¼Êä³öÉ豸ºÍϵͳÈÕÖ¾ÉÏ»áÏÔʾһ¸ö»µÄ£¿éµÄ³ö´íÐÅÏ¢¡£ÎªÁËÏû³ýÕâÌõÐÅÏ¢£¬Óû§ÐèҪΪMODULE_LICENSE()ºêÔö¼ÓÒ»¸öʾÀý£¬ÀýÈçMODULE_LICENSE("GPL")¡£ÕâÖÖ2.4ÄÚºËÒÔºóµÄ°æ±¾²ÅÒýÈëµÄºê£¬¿ÉÒÔ½«Ä£¿é¶¨ÒåΪ»ñµÃGPL Version 2»ò¸üа汾Ðí¿ÉµÄÄ£¿é¡£ÆäËüÓÐЧµÄÖµ»¹ÓÐ"GPL v2"¡¢"GPL and additional rights"¡¢"Dual BSD/GPL"£¨Ñ¡ÔñBSD»òGPLÐí¿É£©¡¢"Dual MPL/GPL"£¨Ñ¡ÔñMozilla »òGPLÐí¿É£©ºÍ"Proprietary"¡£

2.6ÄÚºËÏÂÓ²¼þÇý¶¯³ÌÐò×î¼òµ¥µÄÀàÊôÄ£°åÈçÏ£º

#include img src="/files/misc/lt.gif">linux/module.h>
#include img src="/files/misc/lt.gif">linux/config.h>
#include img src="/files/misc/lt.gif">linux/init.h>
MODULE_LICENSE("GPL");
static int __init name_of_initialization_routine(void) {
/* code goes here */
return 0;
}
static void __exit name_of_cleanup_routine(void) {
/* code goes here */
}
module_init(name_of_initialization_routine);
module_exit(name_of_cleanup_routine);



³ýÁËÓ²¼þÇý¶¯×ÔÉíËùÐèÒªµÄ±ä»¯Í⣬ÔÚLinux 2.6ÄÚºËÏ£¬ÓëÖ®ÏàÓ¦µÄ×îÖØÒªµÄ±ä»¯ÊÇÔÚÄں˴¹ý³ÌÖÐÍê³ÉµÄ¡£

Ä£¿é´î½¨¹ý³ÌÖеı仯

¶ÔÓÚËùÓпª·¢¿É¼ÓÔØÓ²¼þÇý¶¯³ÌÐòµÄÈËÀ´Ëµ£¬¶ÔËûÃÇÓ°Ïì½Ï´óµÄÒ»¸ö»ù±¾±ä»¯²»ÊÇÔ´ÓÚÄÚºËÔ´´úÂ룬¶øÊǽ«Íⲿģ¿é±àÒë¹ý³ÌÕûºÏΪ±ê×¼µÄÄں˴»úÖÆ¡£Èç¹ûÓû§Ê¹ÓõIJ»ÊǼ¯³É¿ª·¢»·¾³£¨ÀýÈçTimeSys¹«Ë¾µÄTimeStorm£¬Ëü¿ÉÒÔ¼ì²âÄں˰汾²¢×Ô¶¯½¨Á¢Makefile£©£¬ÄÇôÓû§ÐèÒªÊÖ¹¤ÎªÓ²¼þÇý¶¯³ÌÐò½¨Á¢Makefile¡£

ÔÚ2.4ºÍ¸ü¾É°æ±¾µÄÄÚºËÏ£¬Ä£¿éµÄ¿ª·¢ºÍ±àÒëλÖò»ÊÜÏÞÖÆ£¬Ö»Òª½«Êʵ±µÄ±àÒë±ê¼ÇÒƵ½ÃüÁîÐлòÄ£¿éµÄMakefileÖоͿÉÒÔÁË¡£ÕâЩ±ê¼Ç°üÀ¨Á½¸ö±àÒëÄ£¿éʱ±ØÐëµÄ·ûºÅ¶¨ÒåºÍÒ»¸öÖ¸Õë¡£¸ÃÖ¸ÕëÖ¸Ïò°üº¬ÓÐÄÚºËËùº¬ÎļþµÄĿ¼¡£ÒÔÏÂÃæµÄÓï¾äΪÀý£¬Óû§¿ÉÒÔ½¨Á¢Ò»¸öÃûΪtestmod.oµÄ¿É¼ÓÔØÄÚºËÄ£¿é£º
#gcc -D__KERNEL__ -DMODULE -I/usr/src/linux-2.4.21/include -O2 -c testmod.c

Ϊ2.6Äں˴ģ¿éµÄ¹ý³Ì±È½Ï¼òµ¥£¬µ«ÊÇÒªÏëÂú×ãËùÓгɹ¦±àÒëËùÐèÒªµÄÌõ¼þ¾Í²»ÄÇôÈÝÒס£Óû§¼È²»ÐèÒªÊÖ¹¤Ö¸¶¨ÒÔÄ£¿éΪµ¼ÏòµÄ˵Ã÷£¨ÀýÈçMODULE, __KERNEL__µÈ£©£¬Ò²²»±ØÖ¸¶¨ÐµķûºÅ£¨ÈçKBUILD_BASENAMEºÍKBUILD_MODNAMEµÈ£©£¬Ö»Òª¶ÔÍⲿģ¿éÖ²Èë±ê×¼Äں˴ϵͳµÄ¹ý³Ì½øÐÐÕûºÏ¾Í¿ÉÒÔÁË¡£Óû§Ò²²»±ØÖ¸¶¨ÖîÈç-O2Ö®ÀàµÄÑ¡ÏÒòΪÓû§±àÒëµÄÄ£¿éÓëÆäËü¿É¼ÓÔØÄÚºËÄ£¿éÒ»Ñù£¬½ø³Ì»á×Ô¶¯µ÷ÓÃËùÓеÄÇ¿ÖÆÐÔ±êÖ¾¡£ÖÁÓÚMakefileµÄ±àд¾Í¼òµ¥µÃ¶àÁË£¬ÀýÈçΪtestmod.koÄ£¿é±àдµÄ¿ÉÓë2.6Äں˼æÈݵÄMakefileÈçÏÂËùʾ£º
obj-m := testmod.o¡£

È»¶ø£¬ÎªÁ˽¨Á¢Íⲿģ¿é£¬Óû§±ØÐëÏÈÍê³ÉÄÚºËÔ´´úÂëÊ÷½Ó¿ÚµÄ±àд¡£ÕâÑù¿ÉÒÔ½¨Á¢Ò»Ð©ÁÙʱĿ¼ÒÔ¹©±àÒëʱʹÓá£ÏÂÃæÊÇÒ»¸öΪ2.6Äں˹¹½¨Ä£¿éµÄÃüÁîÐС£Ëü¿ÉÒÔ´Ó°üº¬Ä£¿éÔ´´úÂëĿ¼ÏÂÖ´ÐУº
# make -C /usr/src/linux-2.6.1 SUBDIRS=$PWD modules

´ËʾÀýÃüÁî¼ÙÉèÓû§µÄÄ£¿éÔ´´úÂëºÍMakefileËùÔÚµÄĿ¼ÓëÓû§ÕýÔÚÔËÐеÄÃüÁîÖеÄÏàͬ¡£Èç¹ûÓû§²»Ê¹ÓÃPOSIXÃüÁÀýÈçBASH£©£¬ÄÇô¿ÉÒÔͨ¹ý¡°SUBDIRS=`pwd`¡±ÃüÁÓÃ$PWD±äÁ¿´úÌæSUBDIRS²ÎÊý¡£ÕâÑùÓû§¾Í¿ÉÒÔʹÓá°pwd¡±ÃüÁîʶ±ð¹¤×÷Ŀ¼¡£½¨Á¢³ö¿ÚµÄÃüÁîÈçÏÂËùʾ£º

#make: Entering directory `/usr/src/linux-2.6.1´
*** Warning: Overriding SUBDIRS on the command line can cause
*** inconsistencies
make[1]: `arch/i386/kernel/asm-offsets.s´ is up to date.
Building modules, stage 2.
MODPOST
CC /home/wvh/timesys/2.6/testmod/testmod.mod.o
LD [M] /home/wvh/timesys/2.6/testmod/testmod.ko
#make: Leaving directory `/usr/src/linux-2.6.1´



"make"ÃüÁîµÄ³É¹¦Íê³É½«²úÉútestmod.koÄ£¿é¡£¶Ô¸ÃÄ£¿éµÄÃüÃûʹÓõÄÊÇеÄÄÚºËÄ£¿éÃüÃû¹æÔò¡£Èç¹ûÓû§ÒѾ­¶ÔϵͳµÄÆô¶¯³ÌÐò½øÐÐÁËÐ޸ģ¬ÒÔ±ãͨ¹ýÃû³ÆÇå³þµØ¼ÓÔØÄ£¿é£¬ÄÇôÓû§ÐèҪȷ¶¨ÔÚÉý¼¶µ½2.6Äں˺ó£¬ÕâЩģ¿éµÄÃüÃûÊÇ·ñ×ñÑ­ÁËеÄÃüÃû¹æÔò¡£

ÊÊÓ¦2.6Äں˵ÄÄÚ²¿±ä»¯

Linux 2.6Äں˻¹´øÀ´ÁËÐí¶àÄÚ²¿±ä»¯£¬Óû§ÐèÒª¸Ä±äÒÑÓеÄÇý¶¯³ÌÐòÒÔÊÊÓ¦ÕâÖֱ仯¡£ÕâЩ±ä»¯°üÀ¨Äں˵ÄÒì²½I/O»úÀí¡¢DMAÖ§³Ö²ã¡¢´æ´¢Æ÷ÓëÒ³·ÖÅä»úÀí¡¢Êý¾Ý¿éÓ²¼þÇý¶¯³ÌÐòºÍеÄÀàÊôÓ²Å̽ӿڵȡ£ÀýÈ磬ÓÃÀ´·ÖÅä²¢¹ÜÀí´æ´¢Æ÷ÓëÒ³µÄ¹¦Äܾͷ¢ÉúÁËеı仯¡£ÔÚ2.6ÄÚºËÏ£¬ÏµÍ³Ê¹ÓÃÁËÒ»ÖÖÃû½ÐmempoolµÄ±ê×¼½Ó¿Ú¡£¶ÔÄ£¿é²Î¿¼¼ÆÊýµÄʹÓú͹ÜÀíÒ²·¢ÉúÁ˱仯¡£Ä£¿é²Î¿¼¼ÆÊýÖ÷ÒªÓÃÓÚ¾ö¶¨Ò»¸öÄ£¿éÊÇ·ñÕýÔÚʹÓ㬲¢¶ÔûÓб»Ê¹ÓõÄÄ£¿é½øÐа²È«Ð¶ÔØ¡£ÔÚ2.6ÄÚºËÏ£¬ÃüÁîÐòÁÐÒѱ»¹¤×÷ÐòÁÐËù´úÌ棬ÆäÖУ¬¶Ô´óÁ¿²»Í¬Çý¶¯³ÌÐò²úÉúÓ°ÏìµÄÒ»¸öÖØÒª±ä»¯ÊDzÎÊýÄ£¿éµÄнӿڡ£MODULE_PARM()ºêÒÑÓÉÏêϸµÄ²ÎÊý˵Ã÷Ëù´úÌæ¡£ÕâÖÖ˵Ã÷À´Ô´ÓÚеÄmodule_param()ºê¡£

Linux 2.6Äں˵ÄÓÅÏÈÄÜÁ¦ºÍ¶ÔSMPµÄʶ±ðÄÜÁ¦£¬ÎªÇý¶¯³ÌÐò±àдÈËÔ±´øÀ´Ò»Ð©ÐÂÎÊÌâ¡£ÔÚµ¥´¦Àí»úϵͳÖУ¬ÔÚÎÞÓÅÏÈÄÜÁ¦µÄLinuxÄÚºËÏ£¬Ò»Ð©Çý¶¯³ÌÐò¿ÉÒÔ¼ÙÉèÔÚÁ½¸ö´¦ÀíÆ÷¼ä²»±ØÔÙÌṩÖØÈë½Ó¿Ú£¬ÒòΪËüÃÇÎÞ·¨Í¬Ê±ÔËÐÐÇý¶¯³ÌÐò¡£Çý¶¯³ÌÐò¿ÉÒÔʹÓá°spinlock¡±»ò¡°mutex¡±ÃüÁîÀ´±£»¤ÄÇЩ¿É´Ó¶à½ø³Ì·ÃÎʵÄÊý¾Ý¡£ÕâЩÎÊÌâµÄ¿¼ÂǶÔÓÚΪǶÈëʽ»·¾³£¨ÈçTimeSys Linux£©±àд¸ßÐÔÄܺÍʵʱӲ¼þÇý¶¯³ÌÐòµÄÈËÀ´ËµÓÈΪÖØÒª¡£

ÆäËü¿¼ÂÇÒòËØ

Èç¹ûÓû§½ÏΪÒÀÀµLinux 2.6Äں˵Ť×÷£¬ÄÇô»¹ÐèÒª¶ÔÇý¶¯³ÌÐò×öһЩÆäËüµÄ¸Ä¶¯¡£ÀýÈ磬¾¡¹Ü×Ô´Ó2.3Äں˵®Éúºó£¬devfsÎļþϵͳÒѾ­±»Ð´ÈëÄںˣ¬²¢ÇÒÔÚ2.6ÄÚºËÉèÖÃÖб»±êעΪÉáÆúÖ¸Áµ«ÊÇËüÈ´¾­³£ÔÚһЩÌØÊâÁìÓòÖÐʹÓá£ÀýÈçÔÚǶÈëʽ¼ÆËãÖУ¬ devfs¿ÉÌṩ½ÏÇ¿µÄÁé»îÐÔºÍÒ»¸ö½ôËõµÄ/devÎļþÃû¡£devfsÎļþϵͳÊǽéÓÚhardcodedÓ²¼þ½Úµã¼äµÄÖм䲽Öè¡£´ËÀà½ÚµãÖ÷ÒªÓÃÓÚÔçÆÚµÄLinuxºÍUnixϵͳÖС£Í¬Ê±£¬Ëü»¹ÊÇudev¡¢hotplugºÍsysfsÎļþϵͳµÄ×ۺϡ£¶ÔudevµÄÖ§³Ö¼¼ÊõÄ¿Ç°ÕýÔÚ±»Ð´ÈëLinux 2.6Äںˡ£TimeSys¹«Ë¾ÒѾ­¿ª·¢³öÁËÓµÓдËÀ༼ÊõµÄÉÌÒµLinuxϵͳ¡£Èç¹ûÓû§ÕýÔÚʹÓÃÆäËüµÄLinux·¢Ðа棬ÄÇôÓû§Ò²Ðí»á·¢ÏÖdevfsÖ§³ÖºÍ¼¯³É¼¼Êõ¶ÔÓÚÇý¶¯³ÌÐòÀ´ËµÊ®·ÖÖØÒª¡£

Èç¹ûÓû§ÏëʹÓÃdevfsÎļþϵͳ£¬ÄÇô±ØÐëÊ×ÏÈÔڴÄÚºËʱ¼¤»î¶ÔËüµÄÖ§³Ö¡£ÕâÒ»²½¿ÉÒÔÔÚÄÚºËÉèÖñ༭³ÌÐòµÄFile systems¡úPseudo filesystemsÖÐÍê³É¡£Ê¹ÓÃdevfs»¹ÐèÒª¸Ä±äÓ²¼þÇý¶¯³ÌÐò¶ÔÓ²¼þ½ÚµãµÄʶ±ð·½·¨¡£µ±Óû§Ê¹Óô«Í³µÄ/devĿ¼×÷ΪLinuxÓ²¼þÃèÊö·ûÎļþµÄ·ÅÖÃλÖÃʱ£¬Ó²¼þÇý¶¯³ÌÐòͨ¹ýÆô¶¯register_blkdev() »òregister_chrdev()º¯ÊýÀ´×¢²áÐÂÓ²¼þ¡£¾ßÌåʹÓÃÄÄÒ»¸ö£¬Òª¿´Çý¶¯³ÌÐò×¢²áµÄÊÇÒ»¸öÊý¾Ý¿éÓ²¼þ»¹ÊÇ×Ö·ûÓ²¼þ£¬¶øÇÒ±ØÐëÊÂÏÈÖªµÀÓ²¼þµÄÖ÷ºÅÂëºÍ´ÎºÅÂë¡£ÁíÍ⣬ÒòΪudevÊÇÒ»¸ö¿ÉÈȲå°Î³ÌÐò£¬Ëü¿ÉÒÔ×Ô¶¯½¨Á¢²¢É¾³ý/devĿ¼ÏµĵǼÏËùÒÔÕâÒ»·½·¨Í¬ÑùÒ²ÊÊÓÃÓÚеÄudevÓ²¼þ»úÀí¡£

ʹÓÃdevfsÓ²¼þÎļþϵͳʱ£¬Ó²¼þÇý¶¯³ÌÐò±ØÐëʹÓÃdevfs_register()ϵͳºô½ÐÀ´×¢²áËüÃǵÄÓ²¼þ¡£Çý¶¯³ÌÐò¿ÉÒÔ¼ÌÐøʹÓôËÇ°Ö¸¶¨µÄÖ÷´Î±àÂ룬Ҳ¿Éͨ¹ýΪdevfs_register()ºô½ÐÖ¸¶¨DEVFS_FL_AUTO_DEVNUM ±êÖ¾£¬ÓÉdevfs×Ô¶¯Ö¸¶¨±àÂë¡£

С½á

Óû§³£³£ÓÉÓÚÌá¸ßϵͳÐÔÄÜ¡¢Ôö¼Óϵͳ¹¦ÄÜ¡¢ÊµÏÖϵͳµ¥Ò»»¯ºÍ±ê×¼»¯µÈÔ­Òò¶ÔÄں˽øÐÐÐ޸ġ£Ã¿Ò»¸öа汾LinuxÄں˶¼»á´øÀ´Ðí¶àеı仯£¬ÕâЩ±ä»¯ÔÚ²»Í¬²ã´ÎÉ϶Կª·¢ÈËÔ±ÓкܴóµÄÓ°Ïì¡£±¾ÎĸÅÀ¨ÁËÔÚ2.6ÄÚºËÏÂÓ²¼þÇý¶¯³ÌÐòµÄ±ä»¯¼°Ä£¿é´î½¨¹ý³ÌµÄ±ä»¯¡£ÖîÈçTimeStormÖ®ÀàµÄ¹¤¾ß¿ÉÒÔΪÓû§ÌṩÉý¼¶Çý¶¯³ÌÐòµÄÄ£°å£¬²¢¿É×Ô¶¯Îª¿É¼ÓÔØÄÚºËÄ£¿é½¨Á¢²¢¹ÜÀíMakefile¡£È»¶ø£¬Èç¹ûÓû§ÕýÔÚÊÖ¹¤Î¬»¤ÏÖÓеÄÓ²¼þÇý¶¯³ÌÐò»ò¿ª·¢ÐµÄÓ²¼þÇý¶¯³ÌÐò£¬ÄÇôÓû§½«ÐèÒªÈÏÕæµÄ¿¼ÂÇ2.6Äں˵ı仯£¬×ö³öÕýÈ·µÄÑ¡Ôñ¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 5 ÌõÆÀÂÛ

  1. lcdstrongman ÓÚ 2011-11-21 00:16:27·¢±í:

    ¶¥

  2. jianxin_pan_00 ÓÚ 2011-11-19 23:17:41·¢±í:

    ¸Õ¿ªÊ¼Ñ§¶«Î÷ ллÁË

  3. jianxin_pan_00 ÓÚ 2011-11-19 23:17:13·¢±í:

    ¸Õ¿ªÊ¼Ñ§¶«Î÷ ллÁË

  4. ai0909 ÓÚ 2011-10-21 16:12:55·¢±í:

    ·¹ý¡£¡£¡£

  5. chentong ÓÚ 2005-05-31 00:23:32·¢±í:

    ¶¥ÏÂ