CPU¶ÔÍâÉè¶Ë¿ÚÎïÀíµØÖ·µÄ±àÖ··½Ê½ÓÐÁ½ÖÖ£ºÒ»ÖÖÊÇIOÓ³É䷽ʽ£¬ÁíÒ»ÖÖÊÇÄÚ´æÓ³É䷽ʽ¡£Linux½«»ùÓÚIOÓ³É䷽ʽµÄºÍÄÚ´æÓ³É䷽ʽµÄIO¶Ë¿Úͳ³ÆΪIOÇøÓò£¨IO region£©¡£
IO regionÈÔÈ»ÊÇÒ»ÖÖIO×ÊÔ´£¬Òò´ËËüÈÔÈ»¿ÉÒÔÓÃresource½á¹¹ÀàÐÍÀ´ÃèÊö¡£
Linux¹ÜÀíIO region£º
1) request_region()
°ÑÒ»¸ö¸ø¶¨Çø¼äµÄIO¶Ë¿Ú·ÖÅä¸øÒ»¸öIOÉ豸¡£
2) check_region()
¼ì²éÒ»¸ö¸ø¶¨Çø¼äµÄIO¶Ë¿ÚÊÇ·ñ¿ÕÏУ¬»òÕßÆäÖÐһЩÊÇ·ñÒѾ·ÖÅä¸øij¸öIOÉ豸¡£
3) release_region()
ÊÍ·ÅÒÔÇ°·ÖÅä¸øÒ»¸öIOÉ豸µÄ¸ø¶¨Çø¼äµÄIO¶Ë¿Ú¡£
LinuxÖпÉÒÔͨ¹ýÒÔϸ¨Öúº¯ÊýÀ´·ÃÎÊIO¶Ë¿Ú£º
inb(),inw(),inl(),outb(),outw(),outl()
¡°b¡±¡°w¡±¡°l¡±·Ö±ð´ú±í8룬16룬32λ¡£
¶ÔIOÄÚ´æ×ÊÔ´µÄ·ÃÎÊ
1) request_mem_region()
ÇëÇó·ÖÅäÖ¸¶¨µÄIOÄÚ´æ×ÊÔ´¡£
2) check_mem_region()
¼ì²éÖ¸¶¨µÄIOÄÚ´æ×ÊÔ´ÊÇ·ñÒѱ»Õ¼Óá£
3) release_mem_region()
ÊÍ·ÅÖ¸¶¨µÄIOÄÚ´æ×ÊÔ´¡£
ÆäÖд«¸øº¯ÊýµÄstart address²ÎÊýÊÇÄÚ´æÇøµÄÎïÀíµØÖ·£¨ÒÔÉϺ¯Êý²ÎÊý±íÒÑÊ¡ÂÔ£©¡£Çý¶¯¿ª·¢ÈËÔ±¿ÉÒÔ½«ÄÚ´æÓ³É䷽ʽµÄIO¶Ë¿ÚºÍÍâÉèÄÚ´æͳһ¿´×÷ÊÇIOÄÚ´æ×ÊÔ´¡£ioremap()ÓÃÀ´½«IO×ÊÔ´µÄÎïÀíµØÖ·Ó³Éäµ½ÄÚºËÐéµØÖ·¿Õ¼ä£¨3GB - 4GB£©ÖУ¬²ÎÊýaddrÊÇÖ¸ÏòÄÚºËÐéµØÖ·µÄÖ¸Õë¡£
LinuxÖпÉÒÔͨ¹ýÒÔϸ¨Öúº¯ÊýÀ´·ÃÎÊIOÄÚ´æ×ÊÔ´£º
readb(),readw(),readl(),writeb(),writew(),writel()¡£
LinuxÔÚkernel/resource.cÎļþÖж¨ÒåÁËÈ«¾Ö±äÁ¿ioport_resourceºÍiomem_resource£¬À´·Ö±ðÃèÊö»ùÓÚIOÓ³É䷽ʽµÄÕû¸öIO¶Ë¿Ú¿Õ¼äºÍ»ùÓÚÄÚ´æÓ³É䷽ʽµÄIOÄÚ´æ×ÊÔ´¿Õ¼ä£¨°üÀ¨IO¶Ë¿ÚºÍÍâÉèÄڴ棩¡£
cwqing1973 ÓÚ 2008-11-11 13:39:13·¢±í:
ËäÈ»ÊÇÈ뼶µÄһЩCÓïÑԵĺ¯Êý£¬µ«ÊÇ»áÓÑÄÜ×öµ½Ñ§¶øÓÐ˼£¬½øÐÐ×ܽᣬ֤Ã÷ÊÇÓÃÐÄÔÚѧϰ¡£¹ÄÀøһϡ£Ð»Ð»¡£
xingxiboy ÓÚ 2008-11-10 18:22:28·¢±í:
linuxȺºÅ--------58702086
xingxiboy ÓÚ 2008-11-10 18:11:50·¢±í:
(e:e2s (e:e2s (e:e2s
xingxiboy ÓÚ 2008-11-10 18:11:33·¢±í:
(q):s (q):s (q):s 5:ty( (o):tx :0wmjh(1
xingxiboy ÓÚ 2008-11-10 18:11:18·¢±í:
:0)1 :0)1 :0)1 :0)1