ǶÈëʽ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]