ÌØ±ðÊÇÔÚ´¦ÀíPCI£¨Peripheral Component Interconnect£©É豸ʱ£¬sysfsµÄ×÷ÓÃÓÈΪͻ³ö
±¾ÎĽ«ÉîÈë̽ÌÖLinux PCI sysfsµÄ¹¦ÄÜ¡¢Ê¹Ó÷½·¨¼°ÆäÓÅÊÆ£¬°ïÖú¶ÁÕ߸üºÃµØÀí½âºÍÓ¦ÓÃÕâһǿ´óµÄ¹¤¾ß
Ò»¡¢sysfsÎļþϵͳ¸ÅÊö sysfsÊÇÒ»¸ö»ùÓÚÄÚ´æµÄÎļþϵͳ£¬ÓÃÓÚ½«É豸µÄ²ã¼¶½á¹¹·´Ó³µ½Óû§¿Õ¼äÖÐ
Óû§¿Õ¼äµÄ³ÌÐò¿ÉÒÔͨ¹ý¶ÁÈ¡sysfsÖеÄÎļþÀ´»ñÈ¡É豸µÄÐÅÏ¢ºÍ״̬£¬»¹¿ÉÒÔͨ¹ý¶ÁдÕâЩÎļþÀ´¿ØÖÆÉ豸
sysfs²»½öΪ³ÌÐòÔ±ÌṩÁ˵÷ÊÔÇý¶¯ÎÊÌâµÄÊֶΣ¬»¹³ÉΪÁËÒ»ÖÖÖ±¹ÛÇÒ¸ßЧµÄ¹ÜÀíÉ豸µÄ·½Ê½
sysfsµÄÎļþ·¾¶Í¨³£ÒÔ/sys¿ªÍ·£¬ºóÃæ¸ú×ÅÉ豸¡¢Çý¶¯³ÌÐò»ò×ÜÏßµÄÐÅϢ·¾¶
ÀýÈ磬¹ÒÔØµ½PCI×ÜÏßµÄÉ豸ÂÞÁÐÔÚ/sys/bus/pci/devicesĿ¼Ï£¬Ã¿Ò»¸ö×ÓĿ¼¶ÔÓ¦Ò»¸öÉ豸
ÕâÖֽṹʹµÃÓû§¿ÉÒÔ·½±ãµØä¯ÀÀºÍ¹ÜÀíϵͳÖеÄËùÓÐPCIÉ豸
¶þ¡¢PCIÉ豸ÔÚsysfsÖеıíʾ ÔÚsysfsÖУ¬PCIÉ豸µÄÐÅÏ¢ºÍ״̬±»×éÖ¯µÃ¾®¾®ÓÐÌõ
ÿ¸öPCIÉ豸¶¼ÓÐÒ»¸ö¶ÔÓ¦µÄ×ÓĿ¼£¬ÕâЩ×ÓĿ¼λÓÚ/sys/bus/pci/devicesÏÂ
ÿ¸ö×ÓĿ¼µÄÃû³ÆÍ¨³£ÊÇÉ豸µÄPCIµØÖ·£¬Èç0000:29:00.0
ÔÚÕâЩ×ÓĿ¼ÖУ¬¿ÉÒÔÕÒµ½¶à¸öÎļþ£¬ËüÃÇÌṩÁËÉ豸µÄ¸÷ÖÖÐÅÏ¢ºÍÅäÖÃÑ¡Ïî
ÀýÈ磬ÔÚÒ»¸öPCIÉ豸µÄ×ÓĿ¼ÖУ¬¿ÉÄÜ»áÕÒµ½Ò»¸öÃûΪenableµÄÎļþ
ͨ¹ý¶ÁÈ¡Õâ¸öÎļþ£¬¿ÉÒÔ»ñµÃÉ豸µÄÔËÐÐ״̬
Èç¹ûcat enableµÃµ½µÄ½á¹ûÊÇ1£¬ËµÃ÷É豸¿ÉÄÜ´¦ÓÚÔËÐÐ״̬
ͬÑù£¬Í¨¹ýÏòÕâ¸öÎļþдÈëÌØ¶¨µÄÖµ£¨Èçecho 0 > enable£©£¬¿ÉÒÔ¿ØÖÆÉ豸µÄ״̬£¬¿ÉÄܻὫÉ豸¹Ø±Õ
³ýÁËenableÎļþÍ⣬PCIÉ豸µÄ×ÓĿ¼Öл¹¿ÉÄܰüº¬ÆäËû¶à¸öÎļþ£¬ËüÃÇÌṩÁËÉ豸µÄÅäÖÃÐÅÏ¢¡¢×ÊÔ´·ÖÅ䡢״̬±êÖ¾µÈ
ÕâЩÎļþµÄ´æÔÚʹµÃÓû§¿ÉÒÔ¶ÔÉ豸½øÐÐÏêϸµÄ¼à¿ØºÍ¿ØÖÆ
Èý¡¢sysfsÔÚPCIÉ豸¹ÜÀíÖеÄÓ¦Óà sysfsÔÚPCIÉ豸¹ÜÀíÖеÄÓ¦Ó÷dz£¹ã·º£¬°üÀ¨µ«²»ÏÞÓÚÒÔϼ¸¸ö·½Ã棺 1.É豸ÐÅÏ¢»ñÈ¡£ºÍ¨¹ý¶ÁÈ¡sysfsÖеÄÎļþ£¬Óû§¿ÉÒÔÇáËɵػñÈ¡PCIÉ豸µÄ¸÷ÖÖÐÅÏ¢£¬ÈçÉ豸Ðͺš¢ÖÆÔìÉÌ¡¢×ÊÔ´·ÖÅäµÈ
ÕâЩÐÅÏ¢¶ÔÓÚÉ豸µ÷ÊÔ¡¢ÐÔÄÜÓÅ»¯ÒÔ¼°¹ÊÕÏÅŲ鶼¾ßÓÐÖØÒªÒâÒå
2.É豸״̬¼à¿Ø£ºsysfsÖеÄÎļþ»¹¿ÉÒÔ·´Ó³É豸µÄµ±Ç°×´Ì¬£¬ÈçÊÇ·ñÔÚÔËÐС¢ÊÇ·ñÓдíÎó·¢ÉúµÈ
ͨ¹ý¶¨ÆÚ¶ÁÈ¡ÕâЩÎļþ£¬Óû§¿ÉÒÔʵʱ¼à¿ØÉ豸µÄ״̬£¬¼°Ê±·¢ÏÖ²¢´¦ÀíDZÔÚµÄÎÊÌâ
3.É豸¿ØÖÆ£ºÍ¨¹ýÏòsysfsÖеÄÎļþдÈëÌØ¶¨µÄÖµ£¬Óû§¿ÉÒÔ¿ØÖÆPCIÉ豸µÄ״̬ºÍÐÐΪ
ÀýÈ磬¿ÉÒÔͨ¹ýдÈëenableÎļþÀ´¿ØÖÆÉ豸µÄ¿ªÆôºÍ¹Ø±Õ
ÕâÖÖ¿ØÖÆ·½Ê½²»½öÖ±¹ÛÒ×¶®£¬¶øÇÒ¾ßÓи߶ȵÄÁé»îÐÔ
4.Çý¶¯µ÷ÊÔ£ºÔÚ¿ª·¢ºÍµ÷ÊÔPCIÉ豸Çý¶¯Ê±£¬sysfsÒ²·¢»ÓÁËÖØÒª×÷ÓÃ
³ÌÐòÔ±¿ÉÒÔÔÚÉ豸µÄÇý¶¯Öд´½¨sysfsÎļþ»òĿ¼£¬ÓÃÓÚÊä³öµ÷ÊÔÐÅÏ¢¡¢¼Ç¼É豸״̬µÈ
ÕâЩÎļþ»òĿ¼µÄ´æÔÚ¿ÉÒÔ°ïÖú³ÌÐòÔ±¸ü¿ìµØ¶¨Î»ºÍ½â¾öÇý¶¯ÖеÄÎÊÌâ
ËÄ¡¢sysfsÓëioctlµÄ±È½Ï ÔÚLinuxÉ豸¹ÜÀíÖУ¬³ýÁËsysfsÍ⣬ioctlÒ²ÊÇÒ»ÖÖ³£ÓõÄÉ豸¿ØÖÆÊÖ¶Î
È»¶ø£¬ÓëioctlÏà±È£¬sysfs¾ßÓÐһЩ¶ÀÌØµÄÓÅÊÆ£º 1.ʵÏÖ·½Ê½¼ò½à£ºsysfsÊÇÒ»¸öÎļþϵͳ£¬Óû§¿Õ¼äͨ¹ýÎļþÓëÄں˽øÐÐͨÐÅ
Òò´Ë£¬ÔÚsysfsÖÐÌí¼Óй¦ÄÜʱ£¬Ö»ÐèҪн¨Ò»¸öÎļþ¼´¿É
¶øioctlÔòÐèҪͨ¹ýÉ豸ÎļþµÄ»Øµ÷º¯ÊýÀ´ÊµÏÖ£¬Ìí¼Óй¦ÄÜʱÐèÒªÔÚº¯ÊýÖжà¼ÓÒ»¸ö·ÖÖ§£¨switch case£©£¬Õâ¿ÉÄܵ¼Öº¯Êý¸´ÔӶȹý¸ß¶øÄÑÒÔά»¤
2.²Ù×÷Ö±¹Û£ºÓÉÓÚsysfsÖеÄÎļþÊÇËù¼û¼´ËùµÃµÄ£¬Óû§¿ÉÒÔÖ±½Óͨ¹ýcat¡¢echoµÈÃüÁîÀ´¶ÁÈ¡ºÍдÈëÎļþÄÚÈÝ£¬´Ó¶øÊµÏÖ¶ÔÉ豸µÄ¼à¿ØºÍ¿ØÖÆ
¶øioctlÔòÐèÒª±àд³ÌÐò²ÅÄܲÙ×÷£¬Ïà¶Ô²»¹»Ö±¹Û
3.¹¦ÄÜ·Ö¸îÇåÎú£ºsysfs½«É豸µÄ¸÷ÖÖ¹¦ÄÜ·Ö¸î³É¶à¸ö¶ÀÁ¢µÄÎļþ£¬ÕâʹµÃÓû§¿ÉÒÔ¸üÇåÎúµØÁ˽âÉ豸µÄ¸÷¸ö²¿·Ö¼°Æä¹¦ÄÜ
È»¶ø£¬µ±Ìí¼ÓµÄ¹¦Äܹý¶àʱ£¬ÎļþÊýÁ¿¿ÉÄÜ»áÔö¼Ó£¬¶ÔÓû§Ôì³ÉÒ»¶¨µÄÀ§ÈÅ
Ïà±È֮ϣ¬ioctl½«¹¦ÄÜͳһµ½Ò»¸öÎļþÖУ¬Ð§ÂÊ¿ÉÄÜ»á¸ü¸ß
¾¡¹Üsysfs¾ßÓÐÕâЩÓÅÊÆ£¬µ«ioctlÔÚijЩ³¡¾°ÏÂÈÔÈ»¾ßÓв»¿ÉÌæ´úµÄ×÷ÓÃ
ÀýÈ磬ÔÚ´¦ÀíһЩ¸´ÔÓµÄÉ豸¿ØÖƲÙ×÷ʱ£¬ioctl¿ÉÄܸü¼Ó¸ßЧºÍÁé»î
Òò´Ë£¬ÔÚʵ¼ÊÓ¦ÓÃÖУ¬¿ÉÒÔ¸ù¾Ý¾ßÌåÐèÇóºÍʹÓó¡¾°À´Ñ¡ÔñʹÓÃÄÄÖÖ·½Ê½
Îå¡¢sysfsµÄʹÓÃʵÀý ΪÁ˸üºÃµØÀí½âsysfsÔÚPCIÉ豸¹ÜÀíÖеÄÓ¦Óã¬ÒÔÏÂÌṩһ¸ö¼òµ¥µÄʹÓÃʵÀý£º ¼ÙÉèÎÒÃÇÐèÒª´´½¨Ò»¸ö¼òµ¥µÄsysfsÄ£¿éÀ´ÑÝʾsysfsµÄ»ù±¾¹¦ÄÜ
ÎÒÃÇ¿ÉÒÔ¶¨ÒåÒ»¸öÈ«¾Ö±äÁ¿test_value£¬²¢ÔÚsysfsÖд´½¨Ò»¸öÃûΪtest_valueµÄÎļþÀ´·´Ó³Õâ¸ö±äÁ¿µÄÖµ
ͨ¹ý¶ÁÈ¡ºÍдÈëÕâ¸öÎļþ£¬ÎÒÃÇ¿ÉÒÔ»ñÈ¡ºÍÉèÖÃtest_valueµÄÖµ
Ê×ÏÈ£¬ÎÒÃÇÐèÒª±àдһ¸öLinuxÄÚºËÄ£¿éÀ´ÊµÏÖÕâ¸ö¹¦ÄÜ
ÔÚÄ£¿é³õʼ»¯º¯ÊýÖУ¬ÎÒÃÇ´´½¨kobjectºÍsysfsÊôÐÔ£¬²¢½«ËüÃÇ×¢²áµ½ÏµÍ³ÖÐ
ÔÚÄ£¿éÍ˳öº¯ÊýÖУ¬ÎÒÃÇ×¢ÏúÕâЩ¶ÔÏóºÍÊôÐÔ
È»ºó£¬ÎÒÃÇ¿ÉÒÔ±àÒë²¢¼ÓÔØÕâ¸öÄ£¿é
¼ÓÔØÄ£¿éºó£¬ÔÚ/sys/kernel/testdrvĿ¼Ï»á³öÏÖÒ»¸öÃûΪtest_valueµÄÎļþ
ͨ¹ý¶ÁÈ¡Õâ¸öÎļþ£¬ÎÒÃÇ¿ÉÒԵõ½test_valueµÄµ±Ç°Öµ
ͨ¹ýÏòÕâ¸öÎļþдÈëеÄÖµ£¬ÎÒÃÇ¿ÉÒÔÉèÖÃtest_valueµÄÖµ
Õâ¸ö¼òµ¥µÄʵÀýչʾÁËÈçºÎʹÓÃsysfsÀ´´´½¨Ò»¸öÓû§¿Õ¼äÓëÄں˿ռäÖ®¼äµÄͨÐŽӿÚ
ͨ¹ýÀ©Õ¹Õâ¸öʾÀý£¬ÎÒÃÇ¿ÉÒÔʵÏÖ¸ü¼Ó¸´ÔÓµÄÉ豸¹ÜÀí¹¦ÄÜ
Áù¡¢×ܽá sysfs×÷ΪLin