LinuxÉ豸Çý¶¯¿ª·¢Ïê½â ±Ê¼Ç11 ÄÚ´æÓëI/O·ÃÎÊ
typedef void (*lpFunction) ();//¶¨ÒåÒ»¸öÎÞ²ÎÊý£¬ÎÞ·µ»ØÀàÐ͵ĺ¯ÊýÖ¸ÕëÀàÐÍ
//¶¨ÒåÒ»¸öº¯ÊýÖ¸Õ룬ָÏòcpuÆô¶¯ºóËùÖ´ÐеĵÚÒ»ÌõÖ¸ÁîµÄλÖÃ
lpFunction lpReset = (lpFunction)0xF000FFF0;
lpReset();//µ÷Óú¯Êý
MMUÍ£¹©ÐéÄâµØÖ·ºÍÎïÀíµØÖ·µÄÓ³Éä¡¢ÄÚ´æ·ÃÎÊȨÏÞ±£»¤ºÍCache»º´æ¿ØÖƵÈÓ²¼þÖ§³Ö¡£²Ù×÷ϵͳÄں˽èÖúMMU£¬¿ÉÒÔÈÃÓû§¸Ð¾õµ½ºÃÏñ³ÌÐò¿ÉÒÔʹÓ÷dz£´óµÄÄÚ´æ¿Õ¼ä£¬´Ó¶øʹµÃ±à³ÌÈËÔ±ÔÚд³ÌÐòʱ²»Óÿ¼ÂǼÆËã»úµÄÎïÀíÄÚ´æµÄʵ¼ÊÈÝÁ¿
Èçͼ£¬µ±ARMÒª·ÃÎÊ´æ´¢Æ÷ʱ£¬MMUÏȲéÕÒTLBÖеÄÐéÄâµØÖ·±í¡£Èç¹ûARMµÄ½á¹¹Ö§³Ö·Ö¿ªµÄÊý¾ÝTLB£¨DTLB£©ºÍÖ¸ÁîTLB£¨ITLB£©£¬Ôò³ýÈ¥Ö¸ÁîʹÓõÄITLBÍ⣬ÆäËûµÄ¶¼ÊÇÓÃDTLB
ÈôTLBÖÐûÓÐÐéÄâµØÖ·µÄÈë¿Ú£¬Ôòת»»±í±éÀúÓ²¼þ´Ó´æ·ÅÓÚÖ÷´æ´¢Æ÷ÖеÄת»»±íÖлñÈ¡µØַת»»ÐÅÏ¢ºÍ·ÃÎÊȨÏÞ£¨¼´Ö´ÐÐTTW£©£¬Í¬Ê±½«ÕâЩÐÅÏ¢·ÅÈëTLB£¬Ëü»òÕß±»·ÅÔÚÒ»¸öûÓÐʹÓõÄÈë¿Ú»òÕßÌæ»»Ò»¸öÒѾ´æÔÚµÄÈë¿Ú¡£Ö®ºó£¬ÔÚTLBÌõÄ¿ÖпØÖÆÐÅÏ¢µÄ¿ØÖÆÏ£¬µ±·ÃÎÊȨÏÞÔÊÐíʱ£¬¶ÔÕæʵÎïÀíµØÖ·µÄ·ÃÎʽ«ÔÚCache»òÕßÔÚÄÚ´æÖз¢Éú
Óû§¿Õ¼ä0-3GB£¬Äں˿ռä3-4GB£¬Óû§½ø³Ìͨ³£Çé¿öÏÂÖ»ÄÜ·ÃÎÊÓû§¿Õ¼äµÄÐéÄâµØÖ·£¬²»ÄÜ·ÃÎÊÄں˿ռäÐéÄâµØÖ·¡£Óû§½ø³ÌÖ»ÄÜͨ¹ýϵͳµ÷Óõȷ½Ê½²ÅÄÜ·ÃÎʵ½Äں˿ռä
ÿ¸ö½ø³ÌµÄÓû§¿Õ¼ä¶¼ÊÇÍêÈ«¶ÀÁ¢¡¢»¥²»Ïà¸ÉµÄ£¬Óû§½ø³Ì¸÷×ÔÓв»Í¬µÄÒ³±í¡£¶øÄں˿ռäÊÇÓÉÄں˸ºÔðÓ³É䣬Ëü²¢²»»á¸ú׎ø³Ì¸Ä±ä£¬Êǹ̶¨µÄ¡£Äں˿ռäµØÖ·ÓÐ×Ô¼º¶ÔÓ¦µÄÒ¶±í£¬Äں˵ÄÐéÄâ¿Õ¼ä¶ÀÁ¢ÓÚÆäËû³ÌÐò
LinuxÖеÄ1GBÄں˵ØÖ·¿Õ¼äÓÖ±»»®·ÖΪÄÚ´æÓ³ÉäÇø£¬ÐéÄâÄÚ´æ·ÖÅäÇø¡¢¸ß¶ËÒ³ÃæÓ³ÉäÇø¡¢×¨ÓÃÒ³ÃæÓ³ÉäÇøºÍϵͳ±£ÁôÓ³ÉäÇø
void kmalloc(size_t size, int flags);
µÚ¶þ¸ö²ÎÊýΪ·ÖÅä±êÖ¾£¬ÓÃÓÚ¿ØÖÆkmallocµÄÐÐΪ£¬×îͨ³£ÓõķÖÅä±êÖ¾ÊÇGFP_KERNEL£¬Æ京ÒåÊÇÔÙÄں˿ռäµÄ½ø³ÌÖÐÉêÇëÄÚ´æ¡£KmallocµÄµ×²ãÒÀÀµ__get_free_pages()ʵÏÖ£¬GFPÕýºÃÊÇÕâ¸öº¯ÊýµÄËõд£¬Ê¹ÓÃGFP_KERNEL±êÖ¾ÉêÇëÄÚ´æʱ£¬ÈôÔÝʱ²»ÄÜÂú×㣬Ôò½ø³Ì»á˯ÃߵȴýÒ³£¬¼´ÒýÆð×èÈû£¬Òò´Ë²»ÄÜÔÚÖжÏÉÏÏÂÎÄ»ò³ÖÓÐ×ÔÐýËøµÄʱºòʹÓô˱êÖ¾ÉêÇëÄÚ´æ
ÔÚÖжϴ¦Àíº¯Êý¡¢taskletºÍÄں˶¨Ê±Æ÷µÈ·Ç½ø³ÌÉÏÏÂÎÄÖв»ÄÜ×èÈû£¬´ËʱÇý¶¯Ó¦¸ÃʹÓÃGFP_ATOMIC±êÖ¾À´ÉêÇ룬Èô²»´æÔÚ¿ÕÏÐÒ³£¬Ö±½Ó·µ»Ø
__get_free_pages()£º
´ËϵÁк¯Êý°üÀ¨£º
get_zeroed_page(unsigned int flags)£»
·µ»ØÒ»¸öÖ¸ÏòÐÂÒ³µÄÖ¸Õë²¢ÇÒ½«¸ÃÒ³ÇåÁã
__get_free_page(unsigned int flags)
¸Ãºê·µ»ØÒ»
Ïà¹ØÎĵµ£º
ʱ¼ä¼ä¸ô¶¨Ê±Æ÷
interval timer(ʱ¼ä¼ä¸ô¶¨Ê±Æ÷)ϵͳµ÷ÓÃ×Ô´Ó±»POSIX±ê×¼»¯ºó£¬Ê״γöÏÖÓÚ4.2BSD£¬Äܹ»Ìṩ±Èalarm()»¹¶àµÄ¿ØÖÆ£º
#include <sys/time.h>
int getitimer(int which, struct itimerval *value);
int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);
interval ti ......
´ÓÕâ¸ö×ܽáÕýʽ¿ªÊ¼ÁËÎÒµÄÇý¶¯Ö®Âã¬ÐÄÇé²»ÃâÓе㼤¶¯£¬¾¡¹ÜÏÖÔÚ¶ÔÇý¶¯µÄ±àд»¹ºÜÄ£ºý£¬µ«»¹ÊÇÓмÍÄîÒâÒåµÄ……
¿ª·¢Æ½Ì¨£º
ÐéÄâ»úÏÂRedHat9£¬ÄÚºË2.4.20.8
½»²æ±àÒë±àÒëÆ÷£ºÌìǶ¹«Ë¾ÌṩµÄarm-linux-gcc 4.3.3
ÄÚºËÊ÷£º/h ......
´¦ÀíÆ÷µÄ·ÖÀ࣬ÈçÏÂͼËùʾ£º
´æ´¢Æ÷¿É·ÖΪֻ¶Á´æ´¢Æ÷£¨ROM£©¡¢ÉÁ´æ£¨Flash£©¡¢Ëæ»ú´æÈ¡´æ´¢Æ÷£¨RAM£©¡¢¹â½éÖÊ´æ´¢Æ÷ºÍ´Å½éÖÊ´æ´¢Æ÷
Nor FlashºÍcpuµÄ½Ó¿ÚÊôÓÚµäÐ͵ÄÀàSRAM½Ó¿Ú£¬²»ÐèÒªÔö¼Ó¶îÍâµÄ¿ØÖƵç·¡£Nor FlashµÄÌصãÊÇ¿ÉоƬÄÚÖ´ÐУ¬³ÌÐò¿ÉÒÔÖ±½ÓÔÚNorÄÚÔËÐС£¶øNand FashºÍcpuµÄ½Ó¿Ú±ØÐëÓÉÏàÓ¦µÄ¿ØÖƵç·½øÐÐת»»£ ......
Ò첽֪ͨ£ºÒ»µ©É豸¾ÍÐ÷£¬ÔòÖ÷¶¯Í¨ÖªÓ¦ÓóÌÐò£¬ÕâÑùÓ¦ÓóÌÐò¸ù±¾²»ÐèÒª²éѯÉ豸״̬£¬ÕâÒ»µã·Ç³£ÀàËÆÓÚÓ²¼þÉϵēÖжϔµÄ¸ÅÄ±È½Ï׼ȷµÄ³ÆνÊÇ“ÐźÅÇý¶¯µÄÒì²½I/O
//Æô¶¯ÐźÅÇý¶¯»úÖÆ
signal(SIGIO, input_handler);//ÈÃinput_handler()´¦ÀíSIGIOÐźÅ
fcntl(fd, F_SETOWN, getpid());//Éè ......