LinuxÄÚºËÔ´´úÂë´æ·ÅλÖÃÏê½â
LinuxÄÚºËÔ´´úÂë´æ·ÅλÖÃÏê½â
LinuxÄÚºËÔ´´úÂëÊÇLinux²Ù×÷ϵͳµÄ½¹µã²¿·Ö£¬Ëü°üÀ¨Á˲Ù×÷ϵͳµÄÖÖÖÖ¹¦Ð§µÄʵÏÖ´úÂë¡£ÒªÏàʶLinuxÄÚºËÔ´´úÂëµÄ´æ·ÅλÖã¬ÎÒÃÇÊ×ÏÈÐèÒªÏàʶLinuxÄں˵Ä×éÖ¯½á¹¹¡£
LinuxÄÚºËÔ´´úÂëͨ³£´æ·ÅÔÚ /usr/src/linux »ò /usr/src/linux- Ŀ¼Ï¡£ÔÚÕâ¸öĿ¼ÖУ¬°üÀ¨Á˸»ºñµÄ×ÓĿ¼ºÍÖÖÖÖÔ´´úÂëÎļþ¡£
arch Ŀ¼£ºÕâ¸öĿ¼Ï´æ·ÅÁËÓëÓ²¼þ¼Ü¹¹Ïà¹ØµÄ´úÂ롣ÿ¸öÖ§³ÖµÄÓ²¼þ¼Ü¹¹¶¼»áÓÐÒ»¸ö¶ÔÓ¦µÄ×ÓĿ¼£¬ºÃ±Èarch/x86ÓÃÓÚ´æ·Åx86¼Ü¹¹µÄ´úÂë¡£
block Ŀ¼£ºÕâ¸öĿ¼´æ·ÅÁË¿é×°±¸Çý¶¯Ïà¹ØµÄ´úÂ룬ÈÏÕæÖÎÀí¿é×°±¸µÄ¶Áд²Ù×÷¡£
fs Ŀ¼£ºÕâ¸öĿ¼°üÀ¨ÁËÎļþϵͳÏà¹ØµÄ´úÂ룬°üÀ¨ÖÖÖÖÎļþϵͳµÄʵÏÖ£¬ºÃ±ÈExt4¡¢XFS¡¢BtrfsµÈ¡£
include Ŀ¼£ºÕâ¸öĿ¼°üÀ¨ÁËÖÖÖÖÍ·Îļþ£¬½ç˵ÁËÄÚºËÖÐʹÓõÄÊý¾Ý½á¹¹¡¢ºê½ç˵µÈ¡£
kernel Ŀ¼£ºÕâ¸öĿ¼°üÀ¨ÁËÄں˵Ľ¹µã´úÂ룬ÀýÈçÀú³ÌÖÎÀí¡¢ÄÚ´æÖÎÀí¡¢µ÷ÀíÆ÷µÈ¡£
³ýÁËÉÏÊöĿ¼Í⣬ÉÐÓÐÐí¶àÆäËûĿ¼ºÍÎļþ£¬ÈçdriversÓÃÓÚ´æ·Å×°±¸Çý¶¯´úÂ룬initÓÃÓÚ´æ·ÅÄں˳õʼ»¯Ïà¹ØµÄ´úÂ룬mmÓÃÓÚ´æ·ÅÄÚ´æÖÎÀíÏà¹ØµÄ´úÂëµÈµÈ¡£
ÏÂÃ棬ÎÒÃÇÒÔÉó²éÀú³ÌÖÎÀíÏà¹ØµÄ´úÂëΪÀý£¬¸ø³öÏêϸµÄ´úÂëʾÀý£º
Àú³ÌÖÎÀíÏà¹ØµÄ´úÂëÒ»Ñùƽ³£´æ·ÅÔÚ kernel Ŀ¼Ï嵀 pid.c ºÍ sched.c µÈÎļþÖС£ÒÔÏÂÊÇÒ»¸ö¼òÆÓµÄʾÀý£º
pid.c:
#include <linux/pid.h> #include <linux/sched.h> struct pid *find_get_pid(pid_t nr) { struct pid *pid; rcu_read_lock(); pid = __find_get_pid(nr); if (pid) get_pid(pid); rcu_read_unlock(); return pid; }
µÇ¼ºó¸´ÖÆ
sched.c:
#include <linux/sched.h> #include <linux/sched/signal.h> void wake_up_process(struct task_struct *p) { if (p->state == TASK_UNINTERRUPTIBLE) { set_task_state(p, TASK_RUNNING); } }
µÇ¼ºó¸´ÖÆ
ÕâÊÇÒ»¸ö¼òÆÓµÄʾÀý£¬Õ¹Ê¾ÁËÔÚÄÚºËÔ´´úÂëÖÐÔõÑùʵÏÖÑ°ÕҺͽÐÐÑÀú³ÌµÄ¹¦Ð§¡£ËäÈ»£¬ÏÖʵµÄ´úÂëÒªÖØ´óµÃ¶à£¬Éæ¼°µ½Ðí¶àϸ½ÚºÍ½çÏßÇéÐΡ£
×ÜÖ®£¬LinuxÄÚºËÔ´´úÂë´æ·ÅλÖÃÏê½â£¬Ï£ÍûÉÏÊöÚ¹ÊͺÍʾÀýÄܹ»×ÊÖú¶ÁÕ߸üºÃµØÃ÷È·LinuxÄں˵Ä×éÖ¯½á¹¹ºÍ´úÂë´æ·ÅλÖá£ÒªÉîÈëÏàʶÄÚºËÔ´´úÂ룬ÐèÒª×ÐϸÑо¿ÏêϸµÄĿ¼ºÍÎļþ£¬ÒÔ¼°ËüÃÇÖ®¼äµÄ¹ØϵºÍ½»»¥¡£
ÒÔÉϾÍÊÇLinuxÄÚºËÔ´´úÂë´æ·ÅλÖÃÏê½âµÄÏêϸÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡