LinuxÒÁµéÔ°ÂÛ̳'s Archiver

chenhengbo ·¢±íÓÚ 2006-10-10 17:56

ǶÈëʽLinuxÏÂIC¿¨½Ó¿ÚÉè¼ÆÓëÇý¶¯¿ª·¢

[size=1][color=#ff0000][b]ǶÈëʽLinuxÏÂIC¿¨½Ó¿ÚÉè¼ÆÓëÇý¶¯¿ª·¢[/b][/color][/size]


Ó²¼þר¼Ò£º[url="http://www.itinns.com/new/Article_Show.asp?ArticleID=1258"]http://www.itinns.com/new/Article_S...?ArticleID=1258[/url] IT¿ÍÕ» [url="http://www.itinns.com/"]www.itinns.com[/url]


£Û ×÷ÕߣºIT¿ÍÕ» [url="http://www.itinns.com/"]www.itinns.com[/url] תÌù×Ô£º±¾Õ¾Ô­´´ µã»÷Êý£º61 ¸üÐÂʱ¼ä£º2006-9-8 ÎÄÕ¼È룺[url="http://www.itinns.com/new/UserInfo.asp?UserID=22"][color=#000000]admin[/color][/url] £Ý [right]


[/right]


ÕªÒª L i n u xϵͳÖУ¬É豸Çý¶¯³ÌÐòÌṩÁËÉ豸ºÍÉϲãÓ¦ÓÿռäµÄ±ê×¼³éÏó½Ó¿Ú£¬Ê¹µÃÓ²¼þÏìÓ¦Õâ¸ö±ê×¼µÄÄÚ²¿±à³Ì½Ó¿Ú£»¶øÓû§Ôò¿ÉÒÔͨ¹ýÒ»×é±ê×¼»¯µÄϵͳµ÷ÓöÔÓ²¼þÉ豸½øÐдò¿ª¡¢¹Ø±Õ¡¢¶Áд¡¢²ÎÊý¿ØÖÆÉèÖõÈÌØ¶¨µÄ²Ù×÷¡£±¾ÎÄÊ×ÏȽéÉÜL i n u xÏÂÉ豸ģ¿éµÄ¸ÅÄîºÍ»ù±¾·ÖÀ࣬Ȼºó½éÉÜI c¿¨É豸µÄÓ²¼þ½Ó¿ÚÉè¼ÆÒÔ¼°ÔÚL i n u xϵͳÏÂÈçºÎÓ¦ÓÃ×Ö·ûÉ豸¿ª·¢I c¿¨É豸Çý¶¯Ä£¿é¡£

¹Ø¼ü´Ê ǶÈëʽLinux É豸Çý¶¯ IC¿¨É豸



Òý ÑÔ

Ëæ×ÅÏÖ´ú¹¤ÒµÉç»áÖð²½ÏòÐÅÏ¢Éç»áµÄ¹ý¶É£¬ÐÅÏ¢½«°çÑÝÓúÀ´ÓúÖØÒªµÄ½ÇÉ«£¬³ÉΪÏÖ´ú¾­¼ÃÉú»îÖеijɹ¦ÒªËØ¡£IC¿¨×÷Ϊ¿¨»ùÓ¦ÓÃϵͳÖеÄÒ»ÖÖ¿¨ÐÍ£¬ÊÇÀûÓð²×°ÔÚ¿¨Öеɵç·(IC)À´¼Ç¼ºÍ´«µÝÐÅÏ¢µÄ£»¾ßÓд洢Á¿´ó¡¢Êý¾Ý±£ÃÜÐԺᢿ¹¸ÉÈÅÄÜÁ¦Ç¿¡¢´æ´¢¿É¿¿¡¢¶ÁдÉ豸¼òµ¥¡¢²Ù×÷Ëٶȿ졢ÍÑ»ú¹¤×÷ÄÜÁ¦Ç¿µÈÓŵ㣬ÆäÓ¦Ó÷¶Î§¼«Îª¹ã·º¡£

ÎÒÃÇ»ùÓÚ¹«Óõ绰IC¿¨µÄÓ¦Ó㬿ª·¢Á˶àýÌåÐÅÏ¢Öն˲úÆ·£¬ÔÚ´«Í³¹«ÓÃIC¿¨µç»°¹¦ÄܵĻù´¡ÉÏÔö¼ÓÁËÉÏÍø¡¢Óʼþ¡¢µç×ÓÖ§¸¶¡¢ÐÅÏ¢ä¯ÀÀµÈ¸÷ÖÖ¶àýÌ幦ÄÜ£¬Í³Ò»²ÉÓù«Óõ绰IC¿¨½øÐÐÊÕ·Ñ¡£Ä¿Ç°Éè¼ÆµÄIC¿¨¶ÁдÆ÷ºÍÇý¶¯Èí¼þÒѾ­Ó¦ÓÃÓÚÎÒÃǵĶàýÌåÖն˲úÆ·ÖС£



1 ǶÈëʽLinuxÏÂÉ豸Çý¶¯Ä£¿é¼ò½é

Linuxϵͳ½«É豸·Ö³ÉÈýÖÖÀàÐÍ£º×Ö·ûÉ豸¡¢¿éÉ豸ºÍÍøÂç½Ó¿Ú¡£ÈýÖÖÀàÐÍÉ豸¶¨ÒåÈçÏ£º

×Ö·ûÉ豸£º×Ö·ûÉ豸ÊÇÖ¸Äܹ»Ïñ×Ö½ÚÁ÷(±ÈÈçÎļþ)Ò»Ñù±»·ÃÎʵÄÉ豸£¬Èç×Ö·ûÖÕ¶Ë(£¯dev£¯con s01e)ºÍ´®¿Ú(£¯dev£¯ttys0)ÒÔ¼°ÀàËÆÉ豸¡£×Ö·ûÉ豸¶ÔÓ¦ÎļþϵͳÖеĽڵ㣬Óû§Ôòͨ¹ý´ËÎļþ½Úµã·ÃÎʺͿØÖÆÉ豸¡£

¿éÉ豸£º¿éÉ豸ºÍ×Ö·ûÉ豸һÑù¿ÉÒÔͨ¹ýÎļþϵͳ½ÚµãÀ´½øÐзÃÎÊ£¬LinuxÔÊÐíÓ¦ÓóÌÐòÏñ×Ö·ûÉ豸ÄÇÑù¶Áд¿éÉ豸¡£

ÍøÂç½Ó¿Ú£ºÈκÎÍøÂçÉ豸¶¼Òª¾­¹ýÒ»¸öÍøÂç½Ó¿Ú£¬¼´Ò»¸öÄܹ»ºÍÆäËüÖ÷»ú½»»»Êý¾ÝµÄÉ豸¡£Í¨³£½Ó¿ÚÊǸöÓ²¼þÉ豸£¬µ«Ò²¿ÉÄÜÊǸö´¿Èí¼þÉ豸£¬±ÈÈç»Ø»·(100pback)½Ó¿Ú¡£Linux·ÃÎÊÍøÂç½Ó¿ÚµÄ·½·¨ÊÇ·ÖÅäÒ»¸öΨһµÄÃû×Ö¡£

ModuleÊÇLinuxÄں˵ÄÒ»´ó´´Ð£¬ÆäÕý¹æµÄ½Ð·¨Ó¦¸ÃÊÇLoadable Kernel Module£¬ ¼´¿É°²×°Ä£¿é¡£¿É°²×°Ä£¿éʵÏÖÁËLinux²Ù×÷ϵͳµÄ¿ÉÀ©Õ¹ÐÔ¡£Ä£¿éÔËÐÐÔÚÄں˿ռ价¾³ÖУ¬ËüµÄ³ÌÐòÔËÐк¯Êý¿â¶¼ÊÇÔÚÄں˿ռ䶨Ò壬¶ø²»ÊÇÔÚÓû§º¯Êý¿â¿Õ¼ä¡£LinuxÄ£¿éµÄ×î·½±ãÖ®´¦Îª¿É¼ÓÔØºÍÐ¶ÔØ¡£Linux²Ù×÷ϵͳÌṩÁËϵͳµ÷ÓÃin smodºÍrmmod¿ÉËæÊ±½«×Ô¼º¿ª·¢µÄÄ£¿é½øÐмÓÔØºÍÐ¶ÔØ¡£

¸ù¾ÝLinuxÉ豸·ÖÀ࣬É豸Çý¶¯Ä£¿éÒ²¿É´óÖ·ÖΪ×Ö·ûÄ£¿é(char module)¡¢¿éÄ£¿é(block module)ºÍÍøÂçÄ£¿é(network module)ÈýÖÖ¡£



2 IC¿¨É豸´¥µãÓ²¼þµç·½éÉÜ

IC¿¨Ó²¼þ´¥µã½Ó¿Ú¼°ÐźÅÈçͼ1Ëùʾ¡£


C1£ºVCCµçÔ´µçѹ¡£

C2£ºRST¸´Î»Ðźš£

C3£ºcLKʱÖÓÐźš£

C4£ºÎ´Óá£

C5£ºGND¡£

C6£ºVPP±à³Ìµçѹ¡£

C7£ºI£¯OÊý¾ÝÊäÈ룯Êä³ö¿ÚÏß¡£

C8£ºÎ´Óá£

ÒÔÉÏ´¥µãÖУ¬VPP±à³Ìµçѹ´¥µãÊdz§¼ÒÉú²ú¿¨Ê±±à³ÌËùÓã¬Óû§¿¨¶ÁдʱûÓÐÓ¦Óá£ËùÒÔ׼ȷµØËµ£¬Ö»ÓÐÎå¸ö´¥µã·Ö±ðÁ¬½ÓÀ´×ÔÍⲿÖ÷¿ØÖÆÆ÷µÄÎå¸ö¿ØÖÆÐźš£ É豸¸´Î»ºóµÄºóÐø²Ù×÷¿É°üÀ¨¿¨µÄµØÖ·É趨²Ù×÷¡¢¶Áд²Ù×÷¡¢²Á³ý²Ù×÷¡£Õë¶ÔÒÔÉÏ¿¨µÄ¸÷ÖÖ²Ù×÷½ÔÓÐÑϸñµÄÐźſØÖÆÊ±Ðò£¬ÏêÇé¿É²ÎÕÕ¸÷ÖÖÓ¦Óÿ¨µÄDATASHEET¡£ IC¿¨×÷Ϊ¿¨»ùÓ¦ÓÃϵͳÖеÄÒ»ÖÖ¿¨ÐÍ£¬ÊÇÀûÓð²×°ÔÚ¿¨Öеɵç·(IC)À´¼Ç¼ºÍ´«µÝÐÅÏ¢µÄ£¬ËùÒÔIC¿¨½ÔÓÐÌØ¶¨µÄ´æ´¢Î»Í¼¡£¾ßÌå´æ´¢Î»Í¼Õë¶ÔÓ¦ÓÃÁìÓòµÄ²»Í¬ºÍ±ê×¼µÄ²»Í¬¾ßÓв»Í¬µÄλͼ¶¨Ò壬ÏêϸÇé¿öÇë²Î¼û×Ô¼º¿ª·¢Ó¦Óÿ¨µÄDATASHEET×ÊÁÏ¡£ÔÚÇý¶¯µÄ¿ª·¢¹ý³ÌÖУ¬Ò²Ö»ÓÐÍêÈ«Çå³þÕâЩλͼ¶¨Òåºó²ÅÄܽ«Ëù¶ÁÈ¡µÄÊý¾Ý°´ÕÕλͼ¶¨ÒåЭÒé½øÐÐÒëÂë¶øµÃµ½×Ô¼º×îÖÕÐèÒªµÄ¸÷ÖÖÊý¾Ý¡£



3 IC¿¨¶Á¿¨µç·¼ò½é

IC¿¨¶Á¿¨½Ó¿Úµç·¿òͼÈçͼ2Ëùʾ¡£


ÎÒÃDzÉÓÃMPC823E×÷ΪÖ÷´¦ÀíÆ÷¡£ÒòΪIC´¥µã¹¤×÷µçѹΪ5V£¬¶øÖ÷¿ØÖÆÆ÷µÄ¹¤×÷µçѹΪ3.3V£¬ËùÒÔÔÚ¶Á¿¨Æ÷ÖÐÉè¼ÆÁËÖмäµçƽת»¯Çý¶¯µç·£¬Í¬Ê±Ôö¼ÓÁË¿ØÖÆÐźŵÄÇý¶¯ÄÜÁ¦¡£ÎªÁËʵʱ¼ì²â²å¿¨²Ù×÷£¬Ôڲ忨Æ÷µç·ÖÐÉèÖÃÒ»¿ª¹Øµç·£¬½ÓÖ÷¿ØÖÆÆ÷µÄ¿ØÖÆ¿ÚÏߣ¬ÓÃÓÚ¼ì²âÊÇ·ñ²å¿¨¡£



4 IC¿¨É豸Çý¶¯Ä£¿éµÄʵÏÖÏê½â

ÏÂÃæÒÔÎÒÃDzÉÓõĹ«Óõ绰»úͨÓõÄIC¿¨ÎªÀý£¬Í¨¹ýÒÑʵÏÖ´úÂëÀ´ËµÃ÷Õû¸öIC¿¨É豸Çý¶¯Ä£¿é¡£

(1)Êý¾Ý½á¹¹µÄÈ·¶¨

±à¼­Í·ÎļþICDATA.H£¬È·¶¨ÔÚÇý¶¯Ä£¿é³ÌÐòÖÐÓ¦ÓõĹ«ÓÃÊý¾Ý½á¹¹¡£Çý¶¯Ä£¿éµÄ×îÖÕÄ¿µÄÊǶÁÈ¡ºÍдÈ뿨Êý¾Ý´¦Àí£¬ËùÒԹ淶ÕûÆëµÄÊý¾Ý½á¹¹ÊDZØÐëµÄ¡£¿ÉÒÔ¶¨ÒåÒ»¸öÊý¾Ý½á¹¹ÌåÀ´ÊµÏÖ¿¨Êý¾ÝµÄ´æ´¢ÇøÓò¡¢Êý¾ÝµØÖ·Ë÷Òý¡¢¿ØÖƱê־λµÈ£¬È磺

slruct ICDATA {

char*readbuffstrt£» //¶ÁÈëÊý¾Ý»º³åÇøÊ×Ö¸Õë

char*readbuffend£» //¶ÁÈëÊý¾Ý»º³åÇøÄ©Ö¸Õë

char*writebuffstart£» //дÈëÊý¾Ý»º³åÇøÊ×Ö¸Õë

char*writebuffend£» //дÈëÊý¾Ý»º³åÇøÄ©Ö¸Õë

int readcount£» //¶ÁÈëÊý¾ÝÁ¿

int writecount£» //дÈëÊý¾ÝÁ¿

char *readp£» //¶ÁÈËÊý¾Ýµ±Ç°Ö¸Õë

int readnum£» //ÒѾ­¶ÁÈëÁ¿

char *writep£» //µ±Ç°Ð´ÈëÊý¾ÝÖ¸Õë

int writenum£» //µ±Ç°Ð´ÈëÁ¿

int newstate£» //¿¨µ±Ç°×´Ì¬£¬OΪÎÞ¿¨£¬1ΪÓп¨

int oldstate£» //¿¨µÄ¾É״̬

int statechange£» //¿¨×´Ì¬±ä»¯±êÖ¾

}£»struct file_operations ic_fops={

open£º icopen£¬

read£º icread£¬

write£º icwrite£¬

poll£º icpoll£¬ }£»

ÕâÑùÔÚÇý¶¯Ä£¿éÖУ¬Ö»ÐèÒªstruct ICDATA iccdata£»Ò»ÌõÓï¾ä±ã¿É¶¨ÒåÈ«²¿µÄ¿¨´¦ÀíÊý¾Ý½á¹¹¶¨Ò壻¶øic_fopsÔò¶¨ÒåÁËÉ豸²Ù×÷Ó³É亯Êý½á¹¹¡£´ÓÕâ¸öÊý¾Ý½á¹¹¿´£¬ÎÒÃÇʵÏÖÁËIC¿¨É豸µÄ´ò¿ª¡¢¶Á¡¢Ð´ºÍ¼à¿Øº¯Êý¡£

(2)Ó²¼þ½Ó¿Ú¿ØÖÆÏß¿ØÖÆ×Óº¯Êý

ÕâЩº¯ÊýÓÃ×÷½øÐп¨¸´Î»¡¢Ê±ÖÓµÈÐźŵĿØÖÆ¡£static void setclkout(void){

#define PB_DR26 ((ushort)0x0020)

volatile immap_t*immap=(immap_t*)IMAP_ADDR£»

(void)immap£»

immap=>im_cpm.cp_pbpat &=¡«(PB_DR26)£»

immap->im_cpm.cp_pbdirl=PB_DR26£» }

ÒÔÉÏÊÇÒÔÎÒÃÇ¿ª·¢µÄÓ²¼þϵͳƽ̨ΪÀýµÄÓ²¼þ¿ØÖƽӿڲÙ×÷º¯ÊýÖ®Ò»£¬ÓÃÓÚ¿ØÖÆIC¿¨µÄ¸´Î»ÐźÅÖÃ1¡£Õë¶Ô²»Í¬Ó²¼þƽ̨£¬º¯ÊýÄÚ²¿²Ù×÷·½·¨²»¾¡Ïàͬ¡£ÀàËÆµÄÆäËü²Ù×÷º¯Êý»¹ÓУº

static void setrstout(void)

static void clearrst(void)

static void setclk(void)

static void setrst(void)

static void clearclk(void)

static void setsda(void)

static void clearsda(void)

static void setsdain(void)

static void setsdaout(void)

(3)Ä£¿é³õʼ»¯º¯ÊýµÄʵÏÖ

static int_init

init_ic(void){

initicdata(&icdata)£»

init waitqueue head(&icdev readq)£»

init_waitqueue_head(&icdev£®writeq)£»

timer task£®routine=(void(*)(void*))timer_do_tasklet£º

timer task£®data=(void *)&icdata£»

mSxx_timersetup£¨£©£»

m8xx_timer_start£¨£©£»

result=register_chrdev(majorl£¬¡°IC¡±£¬&ic_fops)£»

return 0£º

}

Ä£¿é³õʼ»¯º¯ÊýÊÇÄ£¿é¿ª·¢¹ý³ÌÖбز»¿ÉÉٵĴ¦Àíº¯Êý£¬ÓÃÓÚʵÏÖÉ豸µÄ³õʼ»¯¡¢Öжϳõʼ»¯¼°´¦Àí¡¢É豸ע²áµÈ¡£ÔÚÉÏÃæº¯ÊýÖУ¬Ê×ÏÈÓ¦ÓÃiniticdata(£¦icdata)ʵÏÖÁË¿¨Êý¾ÝµÄ³õʼ»¯£¬È»ºó¶¨ÒåÁ˶ÓÁÐÊý¾Ý¡£ÔÙ½øÐÐÁËÖжϴ¦Àíº¯ÊýµÄ°ó¶¨¡¢ÖжÏÉêÇëÒÔ¼°Öжϳõʼ»¯¡£×îºóʵÏÖÁËIC¿¨×Ö·ûÉ豸µÄÉêÇë¡£É豸ÃûΪIC¡£

(4)Öжϴ¦Àí

Ä£¿é²ÉÓÃÁËMPC823EµÄ¶¨Ê±Æ÷Öжϣ¬ÔÚÿ¸ö¶¨Ê±Æ÷ÖжϷ¢Éúʱ¶Ô²å¿¨×´¿ö½øÐмì²â¡£Èç¹û¼ì²âµ½²å¿¨£¬Ôò½øÐжÁ¿¨²Ù×÷£»Èç¹û¼ì²âµ½°Î¿¨²Ù×÷£¬Ôò½øÐп¨Êý¾ÝµÄÇåÁãºÍ¿¨×´Ì¬Êý¾ÝµÄ¸üС£

³ÌÐòÖеÄÖжϴ¦Àí²ÉÓÃÁËtimer_taskÈÎÎñ¶ÓÁÐÀ´ÊµÏÖÖжϵĺóÐø´¦Àí¡£Æä´¦Àíº¯ÊýΪtime r_do_tasklet¡£M8xx timer_setup()º¯ÊýÊ×ÏȽøÐÐMPC823E¶¨Ê±Æ÷µÄ³õʼ»¯ºÍ²ÎÊýÉ趨¡£È»ºóÓ¦ÓÃÓï¾äCPm_in stall_handler rCPMVEC TIMER4£¬m8xx_timerinterrupt£¬(void*)0)£»ÊµÏÖÁËÖжϴ¦ÀíµÄ×ÊÔ´ÉêÇëºÍÖжϴ¦Àíº¯Êým 8 x x_timer_interrupt()µÄ°ó¶¨¡£

Öжϴ¦Àíº¯ÊýÖвÉÓÃÓï¾ä

queue_task(&timer_task£¬&tq_immediate)£»

mark_bh(IMMEDIATE_BH)£»

ʵÏÖÁËÈÎÎñ¶ÓÁÐtimer_task¼ÓÈëÄÚºËtq_immediateµÄÈÎÎñ¶ÓÁд¦Àí¡£ÄÚºËÔÚºÏÊʵÄʱ¼ä»á×Ô¶¯µ÷ÓÃtimer_taskµÄÀýÐд¦Àíº¯Êýtimer_do_taskletO½øÐÐÖжϵĺóÐø´¦Àí¡£

ÔÚtime r dO_ta sklet()´¦Àíº¯ÊýÖУ¬ÓÐÒ»ÌõÓï¾äwake up interruptible(&icde v£®writeq)Óëic_pollº¯ÊýÖеÄD011_wait(flip£¬&icdev£®writeq£¬wait)Ïà¶ÔÓ¦¡£µ±ÖжϷ¢Éúʱ£¬½«µÈ´ýʱ¼ä¶ÓÁÐicdev£®writeq¼¤»î£»¶øpoll_waitº¯ÊýÔòÕë¶Ô´Ë¶ÓÁнøÐÐ¼à¿Ø¡£Ò»µ©±»¼¤»î£¬Ôò¿ÉÒÔ´«µÝ¸øÓû§²å¿¨²Ù×÷ÐÅÏ¢£¬ÔÚÓû§Ó¦ÓÃÈí¼þÖпÉÁ¢¼´µ÷ÓöÁº¯Êý½øÐжÁ¿¨²Ù×÷¡£ÕâÑù¾ÍʵÏÖÁ˶Կ¨µÄʵʱ²Ù×÷¼à¿Ø¡£

(5)Ä£¿é×¢Ïúº¯ÊýµÄʵÏÖ

static void_exit

remove_ic(void){

m8xx_timer_stop()£»

cpm_free_handler(CPMVEC_TIMERl)£»

unregister_chrdev(majorl£¬¡°IC¡±)£»

}

Õâ¸öº¯ÊýÒ²ÊÇÄ£¿éÇý¶¯¿ª·¢Öбز»¿ÉÉٵĺ¯ÊýÖ®Ò»£¬ÓÃÓÚÄ£¿éÐ¶ÔØÊ±½øÐÐ×ÊÔ´µÄÊÍ·Å£¬²¢×¢Ïú´ËÄ£¿é¡£ÈçÉϺ¯ÊýËùʾ£¬Ê×ÏȽøÐÐÁËÖжϵÄÍ£Ö¹¡¢ÊÍ·ÅÖжÏ×ÊÔ´£¬Í¬Ê±½øÐÐÁË×Ö·ûÉ豸µÄ×¢Ïú¡£

(6)É豸¶Á¡¢Ð´¡¢¼à¿ØµÈ×Óº¯Êý

ÓÃÀ´ÊµÏÖ¶Ô¿¨µÄ²Ù×÷£¬Ö÷ÒªÊÇͨ¹ýʵÏÖ¿¨µÄ¸÷ÖÖ²Ù×÷ʱÐò¡£Ò²¼´ÔÚic_fop s½á¹¹ÌåÖж¨ÒåµÄ4¸ö²Ù×÷º¯Êý£ºicopenÓÃÓÚ´ò¿ª¿¨É豸£¬½øÐÐһЩÊý¾ÝµÄ³õʼ»¯²Ù×÷£»icread()ÓÃÓڲ忨²Ù×÷ʱ¶ÁÈ¡¿¨Êý¾Ý£»icwrite()ÓÃÓÚд¿¨£»icpoll£¨£©ÓÃÓÚʵÏÖ¿¨µÄʵʱ¼à¿Ø¡£

×ÛÉÏËùÊö£¬¿¨Çý¶¯Ä£¿éµÄ»ù±¾ÊµÏÖÔ­ÀíÊÇ£ºÉêÇëÖжÏ×ÊÔ´£¬µ±Óв忨²Ù×÷·¢Éúʱ£¬Òý·¢Öжϣ¬½øÐжÁ¿¨²Ù×÷¡£Ôڰ免Ù×÷ʱҲÄÜÒý·¢Öжϣ¬Í¬Ê±½øÐÐÏàÓ¦Êý¾Ý´¦Àí¡£Í¬Ê±Ìṩpoll()º¯Êý½Ó¿Ú£¬Óû§¿É²ÉÓô˺¯Êý¶ÔÉ豸½øÐÐ¼à¿Ø£¬´Ó¶øÊµÏÖÓп¨²Ù×÷·¢ÉúʱÂíÉϽøÐп¨Êý¾ÝµÄ¸üС£

×¢£ºÇý¶¯³ÌÐòÔ´Âë¼û±¾¿¯ÍøÕ¾WWW£®dpj£®tom£®cn¡£5 Çý¶¯Ä£¿é¿ª·¢µÄ±àÒëµ÷ÊÔ ÒÔ¿ª·¢Æ½Ì¨ºÍ±àÒëÆ÷ΪÀý±àд¼òµ¥µÄmakefileÎļþΪ£º

CC=ppc 8xx_gcc

DD=£®nostdinc£®DMODULE-D_KERNEL_I£¯mykeme Finclude.Wall-Wstrict-prototypes-Wno-trigraphs-02-fomit-frame-pointer-fno-strict-aliasing-fno-common-I£¯mykernel£¯arch£¯ppc-fsigned-char-resort-float-pipe-ffixed-r2-Wno-uninitialized-mmultiple-mstring-fno-builtin-I£¯Opt£¯hardhat/devkit£¯ppc£¯8xx£¯target£¯usr£¯lib£¯gcc-lib£¯powerpc-hardhat-linux£¯3£®2£®1£¯include ie£®o£ºic£®C

$(CC)$(DD)-C ic£®c

install£º

make ic£®o

clean£º

rn*o

Ö´ÐÐÃüÁîmake install£¬±ã¿ÉÒÔʵÏÖÇý¶¯Ä£¿éµÄ¶¯Ì¬±àÒë¡£

ÄÚºËÌṩÁËÁ½¸öÓ¦ÓóÌÐòinsmodºÍrmmodÀ´ÊµÏÖÄÚºËÄ£¿éµÄ¶¯Ì¬¼ÓÔØºÍÈ¥³ý¡£ÔÚÄ£¿é±àÒ뵱ǰĿ¼ÏÂÖ´ÐÐÃüÁî

mknod/dev/charmodule c2540

½¨Á¢Óë´ËÉ豸ģ¿é¶ÔÓ¦µÄÉ豸Îļþ½Úµã¡£c±íʾΪ×Ö·ûÉ豸£¬254±íʾÖ÷É豸ºÅ£¬0±íʾ×ÓÉ豸ºÅ¡£

Ö´ÐÐÃüÁîinsmod ic.o£¬¿ÉʵÏÖÄ£¿é¶¯Ì¬¼ÓÔØ£»¶øÃüÁîrmmod ic¿ÉʵÏÖÄ£¿éµÄ¶¯Ì¬È¥³ý¡£



6 Çý¶¯Ä£¿éµÄ¾²Ì¬±àÒë½øÄÚºË

¢Ù½«Ä£¿éÇý¶¯Ô´Îļþ¿½±´½ø/drivers/char/Ŀ¼Ï£»

¢ÚÐÞ¸Ä/drivers/char/MakefileÎļþ£¬Ìí¼Óobj-$(CONFIG_MYMODULE)+=ic.o

¢ÛÔÚ/drivers/char/config.inÎļþÖÐÌí¼Óconfig CONFIG_MYMODULE

bool ¡°IC¡±CONFIG_MYMODULE

¢Ü½øÈë±àÒëÄÚºËĿ¼£¬Ö´ÐÐmake menuconfig¡£

ÔÚcharacter devices Ŀ¼Ï¼´¿É¼ûµ½ICÑ¡ÏѡÔñ£¬È»ºóÖ´ÐбàÒëÃüÁ¼´¿É±àÈëÄں˻ò½ö±àÒëÄ£¿é£º

make mrproper

make menuconfig

make CROSS_COMPILE=ppc_8xx-gcc

make modules CROSS_COMPILE=ppc_8xx-gcc

¼´¿ÉÖ»±àÒëÄںˡ£ÔÚÔ´ÎļþĿ¼Ï¿ɼûµ½ic.o¡£



7 ×ܽá

Óûù±¾µÄ×Ö·ûÉ豸ʵÏÖIC¿¨É豸µÄÇý¶¯Ä£¿é¿ª·¢¡£ÄÚºËÇý¶¯Ä£¿éµÄ¿ª·¢ÊÇÓëÓ²¼þÖ±½Ó½Ó´¥µÄ¡£Õë¶ÔÓ²¼þµÄ²»Í¬£¬ÆäÄÚ²¿´¦Àí·½·¨Ò²Ç§±äÍò»¯¡£¶ÔÓÚÄÚºËÄ£¿é¿ª·¢£¬×îÓÐЧµÄѧϰ;¾¶ºÍ×îºÃµÄѧϰÎĵµ¾ÍÊÇLinuxµÄÄÚºËÔ´´úÂ롣ͬʱ£¬¼ÓÈëһЩLinuxµÄÓʼþ¿ª·¢×éÒ²½«»ñÒæ·Ëdz¡£

Ò³: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.