LinuxÄÚºËÄ£¿é±à³Ì¼ò½é
Ö÷Ì⣺ linuxÄÚºËÄ£¿éµÄ³ÌÐò½á¹¹--Ä£¿é¼ÓÔØº¯Êý(±ØÐë)£¬Ä£¿éÐ¶ÔØº¯Êý(±ØÐë)£¬Ä£¿éÐí¿ÉÖ¤ÉùÃ÷(±ØÐë)£¬Ä£¿é²ÎÊý(¿ÉÑ¡)£¬Ä£¿éµ¼³ö·ûºÅ(¿ÉÑ¡)£¬Ä£¿é×÷ÕߵĵÈÐÅÏ¢ÉùÃ÷(¿ÉÑ¡)
Ò»¸ölinuxÄÚºËÄ£¿éÖ÷ÒªÓÉÒÔϼ¸¸ö²¿·Ö×é³É¡£
1¡¢Ä£¿é¼ÓÔØº¯Êý"ÓÃmodule_init()À´Ö¸¶¨"(±ØÐë)
µ±Í¨¹ýinsmodºÍmodprobeÃüÁî¼ÓÔØÄÚºËÄ£¿éʱ£¬Ä£¿éµÄ¼ÓÔØº¯Êý»á×Ô¶¯±»ÄÚºËÖ´ÐУ¬Íê³É±¾Ä£¿éµÄÏà¹Ø³õʼ»¯¹¤×÷¡£
linuxÄ£¿é¼ÓÔØº¯ÊýÒ»°ãÒÔ __init±íʾÉùÃ÷¡£µäÐÍÉùÃ÷ÈçÏÂ::
static int __init initialization_function(void)
{
/*³õʼ»¯´úÂë*/
}
module_init(initialization_function);
Ä£¿é¼ÓÔØº¯Êý±ØÐëʹÓÃmodule_init(º¯ÊýÃû)µÄÐÎʽ±»Ö¸¶¨¡£Ëü·µ»ØÕûÐÍÖµ£¬Èô³õʼ»¯³É¹¦£¬Ó¦·µ»Ø0£¬¶ø³õʼ»¯Ê§°Üʱ£¬Ó¦·µ»Ø´íÎó±àÂë¡£ÔÚlinuxÄÚºËÖУ¬´íÎó±àÂëÊÇÒ»¸ö¸ºÖµ£¬ÔÚ<linux/errno.h>Öж¨Ò壬°üÀ¨-ENODEV¡¢-ENOMEMÖ®ÀàµÄ·ûºÅÖµ¡£·µ»ØÏàÓ¦µÄ´íÎó±àÂëÊÇÖַdz£ºÃµÄϰ¹ß£¬Ö»ÓÐÕâÑù£¬Ó¦ÓóÌÐò²ÅÄÜÀûÓÃperrorµÈ·½·¨°ÑËûÃÇת»»³ÉÓÐÒâÒåµÄ´íÎóÐÅÏ¢×Ö·û´®¡£
ÔÚ2.6ÄÚºËÖУ¬¿ÉÒÔʹÓÓrequest_module(const char *fmt,...)º¯Êý”¼ÓÔØÄÚºËÄ£¿é£¨×¢Òâ£ºÇ°Ãæ¼ÓÔØÄ£¿é¶¼ÊÇͨ¹ýinsmodºÍmodprobeÀ´ÊµÏֵģ©£¬Çý¶¯¿ª·¢ÈËÔ±¿ÉÒÔͨ¹ýµ÷ÓÃ::
request_module(module_name);
»ò
request_module("char-major-%d-%d",MAJOR(dev),MINOR(dev));
À´¼ÓÔØÆäËûÄÚºËÄ£¿é¡£
ÔÚlinuxÄÚºËÖУ¬ËùÓбíʾΪ__initµÄº¯ÊýÔÚÁ¬½ÓµÄʱºò·ÅÔÚ.init.textÕâ¸öÇø¶ÎÄÚ£¬´ËÍ⣬ËùÓеÄ__initº¯ÊýÔÚ¶Î.initcall.initÖл¹±£´æÁËÒ»·Ýº¯ÊýÖ¸Õ룬ÔÚ³õʼ»¯Ê±£¬Äں˻áͨ¹ýÕâЩָÕëµ÷ÓÃÕâЩ__initº¯Êý£¬²¢ÔÚ³õʼ»¯Íê³ÉºóÊÍ·ÅinitÇø¶Î(.init.text,.initcall.initµÈ)¡£
////////////////////////////////////////////////////////////////////
2¡¢Ä£¿éÐ¶ÔØº¯Êý"ÓÃmodule_exit()À´Ö¸¶¨"(±ØÐë)
µ±Í¨¹ýrmmodºÍmodprobe -rÃüÁîÐ¶ÔØÄÚºËÄ£¿éʱ£¬Ä£¿éµÄÐ¶ÔØº¯Êý»á×Ô¶¯±»ÄÚºËÖ´ÐУ¬Íê³ÉÓëÄ£¿é¼ÓÔØº¯ÊýÏà·´µÄ¹¦ÄÜ¡£
linuxÄÚºËÄ£¿éÓÚÔÚº¯ÊýÒ»°ãÒÔ__exit±íʾ˵Ã÷£¬µäÐ͵ÄÄ£¿éÐ¶ÔØº¯ÊýµÄÐÎʽÈçÏÂ::
static void __exit cleanup_function(void)
{
/*ÊÍ·Å´úÂë*/
}
module_exit(cleanup_function);
Ä£¿éÐ¶ÔØº¯ÊýÔÚÄ£¿éÐ
Ïà¹ØÎĵµ£º
Ò»¡¢Linux device driver µÄ¸ÅÄî
ϵͳµ÷ÓÃÊDzÙ×÷ϵͳÄں˺ÍÓ¦ÓóÌÐòÖ®¼äµÄ½Ó¿Ú£¬É豸Çý¶¯³ÌÐòÊDzÙ×÷ϵͳÄں˺ͻúÆ÷Ó²¼þÖ®¼äµÄ½Ó¿Ú¡£É豸Çý¶¯³ÌÐòΪӦÓóÌÐòÆÁ±ÎÁËÓ²¼þµÄϸ½Ú£¬ÕâÑùÔÚÓ¦ÓóÌ
Ðò¿´À´£¬Ó²¼þÉ豸ֻÊÇÒ»¸öÉ豸Îļþ£¬Ó¦ÓóÌÐò¿ÉÒÔÏó²Ù×÷ÆÕͨÎļþÒ»Ñù¶ÔÓ²¼þÉ豸½øÐвÙ×÷¡£Éè±¸Ç ......
¹ØÓÚ×ÔÐýËøÓ÷¨½éÉܵÄÎÄÕ£¬ÒѾÓкܶ࣬µ«ÓÐЩϸ½ÚµÄµØ·½µãµÄ»¹²»¹»Í¸¡£ÎÒÕâÀï¾Í°ÑÎÒ¸öÈËÈÏΪ´ó¼ÒÈÝÒ×ÓÐÒÉÎʵĵط½ÄóöÀ´ÌÖÂÛһϡ£
Ò»¡¢×ÔÐýËø£¨spinlock£©¼ò½é
×ÔÐýËøÔÚͬһʱ¿ÌÖ»Äܱ»×î¶àÒ»¸öÄÚºËÈÎÎñ³ÖÓУ¬ËùÒÔÒ»¸öʱ¿ÌÖ»ÓÐÒ»¸öÏß³ÌÔÊÐí´æÔÚÓÚÁÙ½çÇøÖС£Õâµã¿ÉÒÔÓ¦ÓÃÔÚ¶à´¦Àí»úÆ÷¡¢»òÔËÐÐÔÚµ¥´¦ÀíÆ÷ÉϵÄÇ ......
¸ãÁËÈýÌìµÄOpenCVÖÕÓÚ°ÑÕâ¸öÀà¿â¼ÓÉÏÈ¥ÁË¡£Ô±¾ÊÇʹÓÃRed Hat Linux 9£¬µ«ÊÇÇ¿ÁÒ²»ÍƼö£¬ÒòΪ»ù±¾ÉϺܶàºÜ¶àµÄÈí¼þ¶¼ÒªÖØÐÂÉý¼¶¸üС£gcc±ØÐëÉý¼¶µ½4.x£¬ÔògmpºÍmpfrÒ²Òª¸üУ¬makeÒ²Òªµ½3.8°æ±¾£¬²¢ÇÒglibcÒ²±ØÐëÔÚ2.6°æ±¾¡£±àÒëgccʵÔÚÊÇ̫ʹ¿àÁË£¬ÎÞ±ÈÎޱȵÄÍ´¿à£¬ºÄʱ3¸ö¶àhours£¬»¹ÊÇÀ´Á˸öerror£¨glibc±ØÐëÉý¼¶£©¡£±à ......
PCIÊÇÍâΧÉ豸»¥ÁªµÄ¼ò³Æ(Peripheral Component
Interconnect)µÄ¼ò³Æ£¬×÷ΪһÖÖͨÓõÄ×ÜÏß½Ó¿Ú±ê×¼£¬ËûÔÚ¼ÆËã»úϵͳÖеõ½Á˹㷺µÄʹÓá£PCIµÄËÙ¶ÈÄܹ»´ïµ½132M/s¡£ÔÚÕâÀï¼òµ¥µÄ½é
ÉÜһϠlinux ÏÂPCIÇý¶¯µÄʵÏÖ¡£
ÔÚ±àдһ¸öPCIÇý¶¯µÄʱºòÎÒÃÇÏȵÃÈ·¶¨ÏµÍ³ÖÐÊÇ·ñÓÐÎÒÃǵÄÉ豸¡£ÎÒÃÇ¿ÉÒÔͨ¹ýlspci
²é¿´PCIÉ豸¡£
[roo ......
FLASHÇý¶¯ÔÚǶÈëʽϵͳÖÐÓÐמÙ×ãÇáÖØµÄλÖ㬶øÄ¿Ç°Êг¡ÉÏNAND FLASHµÄ¼Û¸ñÓÖÒª±ãÒËÓëNOR
FLASH,Ëæ×ÅÔ½À´Ô½¶àµÄƽ̨֧³Ö´ÓNAND FLASHÖÐÆô¶¯£¬ÕÆÎÕNAND
flashµÄÇý¶¯±àдÓÐ×ÅÖØÒªµÄÏÖʵÒâÒ壬ÓÉÓÚÄÚºËÒѾÍê³ÉÁ˴󲿷ֵŤ×÷£¬Êµ¼Ê¹¤×÷Öд󲿷ֹ¤³Ìʦ¶ÔNAND
FLASHÇý¶¯Ö»ÊǼòµ¥µÄÐ޸ģ¬¶ÔÆä¹¤×÷ÔÀí²¢²»Ì«Çå³þ£¬ÏÂÃæÎÒà ......