Êý×éblkdevsµÄ·ÃÎÊ
ÏëÔÚÄ£¿éÖзÃÎÊÉ豸Êý×éblkdevs[]£¬µ«Êǰüº¬ÁËfs.hºÍblk.hºó»¹ÊdzöÏÖÊý×é䶨ÒåµÄÇé¿ö£¬Ôõô°ì£¿ Òª¿´Õû¸öµÄ´úÂ룬µ«´ÓÒ»¾ä»°¿´²»³öÎÊÌâ¡£»Ø¸´ #2 zltjiangshi µÄÌû×Ó
ÔÚsrcµÄ/fs/Block_dev.cÖÐÓÐÕâôһ¶Î¶¨Òåstatic struct {
const char *name;
struct block_device_operations *bdops;
} blkdevs[MAX_BLKDEV];
ÓÃÀ´ÃèÊö¿éÉ豸µÄÊý×é
ÔÚ
int register_blkdev(unsigned int major, const char * name, struct block_device_operations *bdops)
{
if (major == 0) {
for (major = MAX_BLKDEV-1; major > 0; major--) {
if (blkdevs[major].bdops == NULL) {
blkdevs[major].name = name;
blkdevs[major].bdops = bdops;
return major;
}
}
return -EBUSY;
}
if (major >= MAX_BLKDEV)
return -EINVAL;
if (blkdevs[major].bdops && blkdevs[major].bdops != bdops)
return -EBUSY;
blkdevs[major].name = name;
blkdevs[major].bdops = bdops;
return 0;
}
ÖлáÓжÔËûµÄ·ÃÎÊ£¬ÏÖÔÚÎÒÏë×Ô¼º¶Ô¸ÃÊý×é·ÃÎÊÀ´Åж϶ÔÓ¦µÄÉ豸ÊÇ·ñ´æÔÚ¡£ staticµÄº¬Òå¾ÍÊǽ«Õâ¸ö±äÁ¿¾ÖÏÞÓÚÎļþÒÔÄÚ£¬ËùÒÔÄã²»ÄÜ·ÃÎÊÁË¡£
»Ø¸´ #4 zltjiangshi µÄÌû×Ó
ÔÎÄÇ£¬ÕæµÄ¼ÙµÄ£¿²»ÊǾ²Ì¬È«¾Ö½á¹¹£¿Äܲ»ÄÜEXPORT_SYMBOL·ûºÅµ¼³ö ¡£¡£¡£¡£¡£staticµÄº¬Òå¾ÍÊÇÕâÑù£¬»¹ÖµµÃ»³ÒÉô£¿ÏÈ»ØÈ¥¿´¿´cÓïÑÔ»ù´¡½Ì³Ì°É¡£»Ø¸´ #6 zltjiangshi µÄÌû×Ó
:L Ū´íÁË¡£Ð»¹ýÁË¡£Ò³:
[1]