LinuxÉ豸Çý¶¯¿ª·¢Ïê½â ±Ê¼Ç5 LinuxÎļþÓëÉ豸ϵͳ
Ó¦ÓóÌÐòºÍVFSÖ®¼äµÄ½Ó¿ÚÊÇϵͳµ÷Ó㬶øVFSÓë´ÅÅÌÎļþϵͳÒÔ¼°ÆÕͨÉ豸֮¼äµÄ½Ó¿ÚÊÇfile_operations½á¹¹Ìå³ÉÔ±º¯Êý¡£ÓÉÓÚ×Ö·ûÉ豸µÄÉϲãûÓдÅÅÌÎļþϵͳ£¬ËùÒÔ×Ö·ûÉ豸µÄfile_operations³ÉÔ±º¯ÊýÖ±½ÓÓÉÉ豸Çý¶¯ÌṩÁË£¬file_operationsÕýÊÇ×Ö·ûÉ豸Çý¶¯µÄºËÐÄ£¬Èçͼ£º
¶ø¶Ô¿éÉ豸À´Ëµ£¬ext2¡¢fat¡¢jffs2µÈÎļþϵͳÖлáʵÏÖÕë¶ÔVFSµÄfile_operations³ÉÔ±º¯Êý£¬É豸Çý¶¯²ã½«¿´²»µ½file_operationsµÄ´æÔÚ¡£´ÅÅÌÎļþϵͳºÍÉ豸Çý¶¯»á½«¶Ô´ÅÅÌÉÏÎļþµÄ·ÃÎÊ×îÖÕת»»³É¶Ô´ÅÅÌÉÏÖùÃæºÍÉÈÇøµÄ·ÃÎÊ
ÔÚÉ豸Çý¶¯³ÌÐòµÄÉè¼ÆÖУ¬Ò»°ã¶øÑÔ£¬»á¹ØÐĽṹÌåfileºÍinodeÕâ¸öÁ½¸ö½á¹¹Ìå
Ò»¸öfile½á¹¹ÌåʵÀý¶ÔÓ¦Ò»¸ö´ò¿ªµÄÎļþ£¬file½á¹¹ÌåÖеÄf_mode£¨Îļþ¶Áдģʽ£©¡¢f_flags£¨±êÖ¾£©¶¼ÊÇÉ豸Çý¶¯¹ØÐĵ쬶øË½ÓÐÊý¾ÝÖ¸Õëprivate_dataÔÚÉ豸Çý¶¯Öб»¹ã·ºÓ¦Ó㬴ó¶àÖ¸ÏòÉ豸Çý¶¯×Ô¶¨ÒåÓÃÓÚÃèÊöÉ豸µÄ½á¹¹Ìå
inode°üº¬Îļþ·ÃÎÊȨÏÞ¡¢ÊôÖ÷¡¢×é¡¢´óС¡¢Éú³Éʱ¼ä¡¢·ÃÎÊʱ¼ä¡¢×îºóÐÞ¸Äʱ¼äµÈÐÅÏ¢¡£ÊÇLinux¹ÜÀíÎļþϵͳµÄ×î»ù±¾µ¥Î»£¬Ò²ÊÇÎļþϵͳÁ¬½ÓÈκÎ×ÓĿ¼¡¢ÎļþµÄÇÅÁº¡£
ÆäÖеÄi_rdev×ֶεĸß12λΪÊÇÖ÷É豸ºÅ£¬ºó20λΪ´ÎÉ豸ºÅ
Devfs£¨É豸Îļþϵͳ£©Óŵ㣺
1¡¢¿ÉÒÔͨ¹ý³ÌÐòÔÚÉ豸³õʼ»¯Ê±ÔÚ/devĿ¼Ï´´½¨É豸Îļþ£¬Ð¶ÔØÊ±½«Ëüɾ³ý
2¡¢É豸Çý¶¯³ÌÐò¿ÉÒÔÖ¸¶¨É豸Ãû¡¢ËùÓÐÕß¡¢È¨ÏÞ룬Óû§¿Õ¼ä³ÌÐòÈÔ¿ÉÒÔÐÞ¸ÄËùÓÐÕߺÍȨÏÞλ
3¡¢ÔÚ³ÌÐòÖпÉÒÔÖ±½Ó¸øregister_chrdev()´«µÝ0Ö÷É豸ºÅÒÔ¶¯Ì¬»ñµÃ¿ÉÓõÄÖ÷É豸ºÅ£¬²¢ÔÚdevfs_register()ÖÐÖ¸¶¨´ÎÉ豸ºÅ
ÔÚLinux2.4µÄÉ豸Çý¶¯±à³ÌÖУ¬·Ö±ðÔÚÄ£¿é¼ÓÔØºÍÐ¶ÔØº¯ÊýÖд´½¨ºÍ³·ÏúÉ豸ÎļþÊDZ»ÆÕ±é²ÉÓò¢ÖµµÃ´óÁ¦ÍƼöµÄºÃ·½·¨£ºregister_chrdev£¨……£©-->devfs_register£¨……£©--> devfs_unregister£¨……£©--> unregister_chrdev(……)
Linux2.6ÖÐudevÈ¡´úÁËdevfs
UdevÍêÈ«¹¤×÷ÔÚÓû§Ì¬£¬ÀûÓÃÉ豸¼ÓÈë»òÒÆ³ýʱÄÚºËËø·¢Ë͵ÄÈȲå°ÎʼþÀ´¹¤×÷£¬ÔÚÈȲå°Îʽ£¬É豸µÄÏêϸÐÅÏ¢»áÓÉÄÚºËÊä³öµ½/sysµÄsysfsÎļþϵͳ
Linux2.6ÄÚºËÒýÈëÁËsysfsÎļþϵͳ£¬sysfs±»¿´³ÉÊÇÓëproc¡¢devfs¡¢devptyͬÀàµÄÎļþϵͳ£¬¸ÃÎļþϵͳʽһ¸öÐéÄâµÄÎļþϵͳ£¬Ëü¿ÉÒÔ²úÉúÒ»¸ö°üÀ¨ËùÓÐϵͳӲ¼þµÄ²ã¼¶ÊÓͼ£¬ÓëÌṩ½ø³ÌºÍ״̬ÐÅÏ¢µÄprocÎļþϵͳʮ·ÖÏàËÆ
SysfsµÄÒ»¸öÄ¿µÄ¾ÍÊÇչʾÉ豸Çý¶¯Ä£ÐÍÖи÷×é¼þµÄ²ã´Î¹ØÏµ
ÔÚ/sys/busµÄpciµÈ×ÓĿ¼Ï£¬Óлá·Ö³ödriversºÍdevicesĿ¼£¬¶ødevic
Ïà¹ØÎĵµ£º
LinuxÄÚ´æ¹ÜÀí(ÉÏ)
ÕªÒª£º±¾ÕÂÊ×ÏÈÒÔÓ¦ÓóÌÐò¿ª·¢ÕߵĽǶÈÉóÊÓLinuxµÄ½ø³ÌÄÚ´æ¹ÜÀí£¬ÔÚ´Ë»ù´¡ÉÏÖð²½ÉîÈëµ½ÄÚºËÖÐÌÖÂÛϵͳÎïÀíÄÚ´æ¹ÜÀíºÍÄÚºËÄÚ´æµØÊ¹Ó÷½·¨¡£Á¦Çó´ÓÍâ×ÔÄÚ¡¢Ë®µ½Çþ³ÉµØÒýµ¼ÍøÓÑ·ÖÎöLinuxµØÄÚ´æ¹ÜÀíÓëʹÓá£ÔÚ±¾ÕÂ×îºóÎÒÃǸø³öÒ»¸öÄÚ´æÓ³ÉäµØÊµÀý£¬°ïÖúÍøÓÑÃÇÀí½âÄÚºËÄÚ´æ¹ÜÀíÓëÓû§ÄÚ´æ¹ÜÀíÖ®¼äµØ¹ØÏµ£¬Ï£Í ......
Author-------Dansen-----xzd2734@163.com
wait_queue_head_t wait_q;
Ê×ÏÈ¿´¿´
wait_queue_head_tÕâ¸öµÈ´ý¶ÓÁеĽṹ
ÔÚwait.hÖж¨ÒåÁËÕâ¸ö½á¹¹
typedef struct
__wait_queue_head wait_queue_head_t;
struct __wait_queue_head {
wq_lock_t
lock;
struct list_head task_list;
};
# define wq_ ......
ʲôÊÇÇý¶¯£¿
×îͨË׵ĽâÊ;ÍÊÇ“ÇýʹӲ¼þÉ豸Ðж¯”
×÷Óã¿
É豸Çý¶¯Óëµ×²ãÓ²¼þÖ±½Ó´ò½»µÀ£¬°´ÕÕÓ²¼þÉ豸µÄ¾ßÌ幤×÷·½Ê½¶ÁдÉ豸¼Ä´æÆ÷£¬Íê³ÉÉ豸µÄÂÖѯ¡¢Öжϴ¦Àí¡¢DMAͨÐÅ£¬½øÐÐÎïÀíÄÚ´æÏòÐéÄâÄÚ´æµÄÓ³É䣬×îÖÕʹͨÐÅÉ豸Äܹ»ÊÕ·¢Êý¾Ý£¬Ê¹ÏÔʾÉ豸Äܹ»ÏÔʾÎÄ×ÖºÍ»Ãæ£¬Ê¹´æ´¢É豸Äܹ»¼Ç¼ÎļþºÅÊý¾Ý
¼ÆË ......
ÔÚÉ豸Çý¶¯·½Ã棬Linux2.6Ïà¶ÔÓÚLinux2.4ÓнϴóµÄ¸Ä¶¯£¬ÕâÖ÷Òª±íÏÖÔÚÄÚºËAPIÖÐÔö¼ÓÁ˲»ÉÙй¦ÄÜ£¨ÈçÄÚ´æ³Ø£©¡¢sysfsÎļþϵͳ¡¢ÄÚºËÄ£¿é´Ó.o±äΪ.ko¡¢Çý¶¯Ä£¿é±àÒ뷽ʽ¡¢Ä£¿éʹÓüÆÊý¡¢Ä£¿é¼ÓÔØºÍÐ¶ÔØº¯ÊýµÄ¶¨ÒåµÈ·½Ãæ
LinuxÄÚºËÖ÷ÒªÓнø³Ìµ÷¶È¡¢ÄÚ´æ¹ÜÀí¡¢ÐéÄâÎļþϵͳ¡¢ÍøÂç½Ó¿ÚºÍ½ø³Ì¼äͨÐŵÈ5¸ö×Óϵͳ×é³É£¬ÈçÏÂͼ£º
......