LinuxÄÚ´æ¿Õ¼ä·ÃÎÊÔý¼Ç(ת)
http://blog.chinaunix.net/u/25764/showart_1882931.html
Òý£º±¾À´´òË㽫Õⲿ·ÖÄÚÈݲ¢Èëµ½¡¶The Linux Kernel Module Programming Guide±Ê¼Ç¡·ÖÐÈ¥£¬µ«ÊÇÏëÏÂÄÚ´æ¿Õ¼ä¹ÜÀí·ÃÎÊÏ൱»ù´¡ÖØÒª¶øÇÒÄÚÈÝÁ¿½Ï´ó£¬ËùÒԾ͵¥¶À¼Ç¼¡£ÔÚ¹ýÈ¥Ò»ÄêÀÓÉÓڳɹ¦¿ª·¢¹ý¼¸¸öÆÄΪ¸´ÔÓµÄÉ豸Çý¶¯£¬¾Í×ÔÒÔÎªÕÆÎÕÁËÇý¶¯¿ª·¢µÄ·½·¨ºÍ¼¼ÇÉ£¬ÊÂʵÉÏÔÚ»ù´¡ÉÏ£¬ÎÒÈ´ÓÐ×ÅÖÂÃüµÄäµã¡£Õâ¸öäµã¾ÍÊÇLinuxµÄÄÚ´æ¹ÜÀí£¬ÆäʵºÜ¾Ã֮ǰ£¬¾ÍÒ»Ö±¾Í¸ã²»¶®MMU¡¢Page¡¢Section¡¢Ò³±íµÈ¸ÅÄÄÇʱÒÔΪÕâЩ²¢²»ÖØÒª¡£ÏÖÔÚ¿´À´ÖÕÓÚ³¢µ½¿à¹ûÁË£¬ÔÚ¿ª·¢Virtual FramebufferµÄʱºò£¬¾ÍÔÚmmapÕâ¸ö½Ó¿ÚʵÏÖÉÏ¿¨×¡ÁË¡£Ë×»°Ëù˵µÄÊéµ½ÓÃʱ·½ºÜÉÙ£¬ÊÇÖÁÀíÃûÑÔ°¡¡£
×¢£ºÔÚx86¼Ü¹¹ÉÏ£¬»á·ÖΪÄÚ´æ¿Õ¼äºÍI/O¿Õ¼ä£¬µ«ÊÇÔÚ´ó¶àÊýǶÈëʽ¿ØÖÆÆ÷ÈçARM¡¢PowerPC²¢²»ÌṩI/O¿Õ¼ä¡£ÎÒÃæÏòµÄÖ÷ÒªÊÇǶÈëʽ·½ÃæµÄÇý¶¯¿ª·¢£¬ËùÒÔÕâÀï²¢²»ÌÖÂÛI/O¿Õ¼äµÄÄÚÈÝ¡£±¾ÎĵÄÄÚÈÝ´ó¶àÊýÊÇժ¼¡¶LinuxÉ豸Çý¶¯¿ª·¢Ïê½â¡·µÄµÚʮһÕ£¬²¢½áºÏÎÒÔÚ¿ª·¢¹ý³ÌµÄһЩÐĵÃÌå»á¡£
Ò»¡¢ÄÚ´æ¹ÜÀíµ¥ÔªMMU
MMU¸¨Öú²Ù×÷ϵͳ½øÐÐÄÚ´æ¹ÜÀí¡¢ÌṩÐéÄâµØÖ·ºÍÎïÀíµØÖ·µÄÓ³Éä¡¢ÄÚ´æ·ÃÎÊȨÏÞ±£»¤ºÍCache»º´æ¿ØÖƵÈÓ²¼þÖ§³Ö£¬¿É¼û£¬Õ⽫ʹµÃLinux²Ù×÷ϵͳÄܵ¥¶ÀΪϵͳµÄÿ¸öÓû§·ÖÅä¶ÀÁ¢µÄÄÚ´æ¿Õ¼ä²¢±£Ö¤Óû§¿Õ¼ä²»ÄÜ·ÃÎÊÄں˿ռäµÄµØÖ·£¬Îª²Ù×÷ϵͳµÄÐéÄâÄÚ´æ¹ÜÀíÄ£¿éÌṩÁËÓ²¼þ»ù´¡¡£
ÔÚs3c2410µÄviviÕâ¸öbootloaderÖУ¬½¨Á¢ÁËÒ»¸ö4GBÎïÀíµØÖ·ÓëÐéÄâµØÖ·Ò»Ò»Ó³ÉäµÄÒ»¼¶Ò³±í£¬ÎÒÃÇ¿ÉÒÔͨ¹ýº¯Êýmem_mapping_linear()À´Ì½Ñ°Ò»ÏÂÆä´´½¨¹ý³Ì
static inline void mem_mapping_linear(void)
{
unsigned long pageoffset, sectionNumber;
/*4GBÐéÄâµØÖ·Ó³Éäµ½ÏàÓ¦µÄÎïÀíµØÖ·ÉÏ£¬¾ù²»ÄÜ»º´æ*/
for (sectionNumber = 0; sectionNumber < 4096; sectionNumber++)
{
pageoffset = (sectionNumber << 20);
*(mmu_tlb_base + (pageoffset >> 20)) = pageoffset | MMU_SECDESC;
//mmu_tlb_baseΪ´æ·ÅÒ³±íµÄÊ×µØÖ·,tlbÊÇת»»ÅÔ·»º´æ£¬ÊÇת»»±íµÄCache
}
/*ʹÄÜDRAMµÄÇøÓò¿É»º´æ*/
 
Ïà¹ØÎĵµ£º
(AIXÃüÁî)iostatÃüÁîÖ÷Ҫͨ¹ý¹Û²ìÎïÀí´ÅÅ̵ĻîԾʱ¼äÒÔ¼°ËûÃÇµÄÆ½¾ù´«ÊäËÙ¶È£¬¼à¿ØÏµÍ³ÊäÈë/Êä³öÉ豸¸ºÔØ.
iostat [¼ä¸ôʱ¼ä] [´òÓ¡´ÎÊý]
exp: iostat 5 2
psÃüÁîÊÇUNIXϵͳÖÐ×î³£¼ûµÄÃüÁËüÖ÷ÒªÏÔʾϵͳÖйØÓÚ½ø³ÌµÄͳ¼ÆºÍ״̬ÐÅÏ¢£¬Èç½ø³ÌID£¬I/OÐÐΪÒÔ¼°CPUÀûÓÃÂʵÈ.
ÏÔʾ10¸öÏûºÄCPU×î¶àµÄ½ø³Ì£º
ps aux |sort ......
1. Äں˳õʼ»¯£º
* Äں˽¨Á¢ºÃÄÚºËҳĿ¼ҳ±íÊý¾Ý¿â£¬¼ÙÉèÎïÀíÄÚ´æ´óСΪlen£¬Ôò½¨Á¢ÁË[3G--3G+len]::[0--len]ÕâÑùµÄÐ鵨ַvaddrºÍÎïÀíµØÖ·paddrµÄÏßÐÔ¶ÔÓ¦¹ØÏµ£»
* Äں˽¨Á¢Ò»¸öpageÊý×飬pageÊý×éºÍÎïÀíÒ³ÃæÏµÁÐÍêÈ«ÊÇÏßÐÔ¶ÔÓ¦£¬pageÓÃÀ´¹ÜÀí¸ ......
½ñÌì¶ÁÁ˱¾ÊéµÄµÚÒ»ÕÂ.ÕâÒ»Õ³õ²½½éÉÜÁËLinuxÄں˵Ä×ÜÌå²¼¾Ö,Ò²¾ÍÊÇ×ÜÌåÉÏÀ´¿´ÓÐÄÄЩģ¿é×é³É.´ÓÉϵ½ÏÂÖ÷ÒªÊÇ:glidc->ϵͳµ÷ÓÃ->(VFS,Schedular,Soft ISR,ISR,FILE Sytem,Task Manager,Memory Manager,IP Stack)À¨ºÅÀïÃæµÄ¸÷¸öÄ£¿é¶¼ÊDz¢ÁдæÔÚµÄ.Ŀǰ¶ÔÓÚÕâÆäÖеÄÐí¶àÃû´ÊÎÒ»¹²»ÊìϤ,²»½û¸Ðµ½²ÑÀ¢,Ҫѧ ......
LinuxʹÓôÓ1970Äê1ÔÂ1ÈÕ0ʱ0·Ö0ÃëÆðµ½¿ª»úʱ¾¹ýµÄÃëÊý×÷Ϊ¿ª»úʱ¼ä, ÊÇÔÚmain.cºÍmktime.cÖнøÐгõʼ»¯µÄ.
1. linux/init/main.c
/*
* read current time from CMOS.
* ·ÃÎÊCMOSÐèҪͨ¹ý¶Ë¿Ú0x70, 0x71½øÐÐ.
* ¶ÁÊý¾Ýʱ,ÏÈÓÃOUTÖ¸ÁîÏò0x70·¢ËÍÒª¶ÁÈ¡×Ö½ÚµÄÆ«ÒÆÎ»ÖÃÖµ, È»ºóÓÃINÖ¸Áî´Ó0x71¶ÁÊý¾Ý. ......
¼Ù¶¨Äã»áCÓïÑÔ£¬¶øÇÒÃ÷°×CÓïÑÔÃæÏò¶ÔÏó±à³ÌµÄschme£¬¶Ô²Ù×÷ϵͳ£¨°üÀ¨µ÷¶È£¬ÄÚ´æ·ÖÅ䣬·ÖÒ³£¬Í¬²½£¬etc£©±È½ÏÁ˽⡣ÄÇôÄã¿ÉÒÔ°´ÕÕÈçÏÂ˳ÐòѧϰLinux Äںˡ£
1.¿´Linux Device DriverÕâ±¾Êé¡£ÕâÊÇΪÁËÈÃÄã¶®µÃ±àÒëÄÚºËÄ£¿éµÄ·½·¨¡£»¹ÓÐΪLinux¸÷ÖÖÉ豸ÁôÏÂһЩӡÏó¡£Í¬Ê±Ò»±é¿´ÊéÒ»±ß¿´Ä³Ð©É豸µÄÔ´´ú ......