| 1 |
#!/usr/bin/python |
|---|
| 2 |
# |
|---|
| 3 |
|
|---|
| 4 |
# |
|---|
| 5 |
# Copyright (C) 2008 Pieter Palmers |
|---|
| 6 |
# |
|---|
| 7 |
# This program is free software: you can redistribute it and/or modify |
|---|
| 8 |
# it under the terms of the GNU General Public License as published by |
|---|
| 9 |
# the Free Software Foundation, version 3 of the License. |
|---|
| 10 |
# |
|---|
| 11 |
# This program is distributed in the hope that it will be useful, |
|---|
| 12 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|---|
| 13 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|---|
| 14 |
# GNU General Public License for more details. |
|---|
| 15 |
# |
|---|
| 16 |
# You should have received a copy of the GNU General Public License |
|---|
| 17 |
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
|---|
| 18 |
# |
|---|
| 19 |
|
|---|
| 20 |
# |
|---|
| 21 |
# Test for common FFADO problems |
|---|
| 22 |
# |
|---|
| 23 |
|
|---|
| 24 |
import sys |
|---|
| 25 |
|
|---|
| 26 |
# Add the path of the installed dependent files |
|---|
| 27 |
sys.path.append( "$PYTHONDIR" ) |
|---|
| 28 |
|
|---|
| 29 |
from listirqinfo import IRQ,SoftIRQ,IRQInfo |
|---|
| 30 |
from helpstrings import HelpStrings |
|---|
| 31 |
from ffado_diag_helpers import * |
|---|
| 32 |
|
|---|
| 33 |
## message strings |
|---|
| 34 |
FFADODIAG_VERSION = "0.1" |
|---|
| 35 |
|
|---|
| 36 |
welcome_msg = """ |
|---|
| 37 |
|
|---|
| 38 |
FFADO diagnostic utility """ + FFADODIAG_VERSION + """ |
|---|
| 39 |
============================ |
|---|
| 40 |
(C) 2008 Pieter Palmers |
|---|
| 41 |
|
|---|
| 42 |
""" |
|---|
| 43 |
|
|---|
| 44 |
help_msg = """ |
|---|
| 45 |
Usage: ffado-diag [verboselevel] |
|---|
| 46 |
|
|---|
| 47 |
verboselevel : verbosity level. (optional) |
|---|
| 48 |
|
|---|
| 49 |
""" |
|---|
| 50 |
|
|---|
| 51 |
## main program |
|---|
| 52 |
if __name__== '__main__': |
|---|
| 53 |
|
|---|
| 54 |
print welcome_msg |
|---|
| 55 |
|
|---|
| 56 |
num_args = len(sys.argv) |
|---|
| 57 |
if num_args not in [1,2]: |
|---|
| 58 |
print help |
|---|
| 59 |
sys.exit(0) |
|---|
| 60 |
|
|---|
| 61 |
if num_args == 2: |
|---|
| 62 |
loglevel = eval(sys.argv[1]) |
|---|
| 63 |
if loglevel == 1: |
|---|
| 64 |
logging.getLogger('diag').setLevel(logging.INFO) |
|---|
| 65 |
elif loglevel == 2: |
|---|
| 66 |
logging.getLogger('diag').setLevel(logging.DEBUG) |
|---|
| 67 |
|
|---|
| 68 |
print "=== CHECK ===" |
|---|
| 69 |
print " Base system..." |
|---|
| 70 |
|
|---|
| 71 |
# check kernel |
|---|
| 72 |
kernel_version = get_kernel_version() |
|---|
| 73 |
print " kernel version............ " + str(kernel_version) |
|---|
| 74 |
kernel_is_rt_patched = get_kernel_rt_patched() |
|---|
| 75 |
print " RT patched............... " + str(kernel_is_rt_patched) |
|---|
| 76 |
|
|---|
| 77 |
# check modules |
|---|
| 78 |
oldstack_present = check_1394oldstack_present() |
|---|
| 79 |
oldstack_loaded = check_1394oldstack_loaded() |
|---|
| 80 |
oldstack_active = check_1394oldstack_active() |
|---|
| 81 |
oldstack_statically_linked = not check_1394oldstack_loaded() and check_1394oldstack_linked() |
|---|
| 82 |
newstack_present = check_1394newstack_present() |
|---|
| 83 |
newstack_loaded = check_1394newstack_loaded() |
|---|
| 84 |
newstack_active = check_1394newstack_active() |
|---|
| 85 |
newstack_statically_linked = not check_1394newstack_loaded() and check_1394newstack_linked() |
|---|
| 86 |
|
|---|
| 87 |
print " old 1394 stack present.... " + str(oldstack_present) |
|---|
| 88 |
print " old 1394 stack loaded..... " + str(oldstack_loaded) |
|---|
| 89 |
print " old 1394 stack active..... " + str(oldstack_active) |
|---|
| 90 |
print " new 1394 stack present.... " + str(newstack_present) |
|---|
| 91 |
print " new 1394 stack loaded..... " + str(newstack_loaded) |
|---|
| 92 |
print " new 1394 stack active..... " + str(newstack_active) |
|---|
| 93 |
|
|---|
| 94 |
# check /dev/raw1394 node presence |
|---|
| 95 |
devnode_present = check_1394oldstack_devnode_present() |
|---|
| 96 |
print " /dev/raw1394 node present. " + str(devnode_present) |
|---|
| 97 |
if devnode_present: |
|---|
| 98 |
# check /dev/raw1394 access permissions |
|---|
| 99 |
devnode_permissions = check_1394oldstack_devnode_permissions() |
|---|
| 100 |
print " /dev/raw1394 permissions.. " + str(devnode_permissions) |
|---|
| 101 |
else: |
|---|
| 102 |
devnode_permissions = None |
|---|
| 103 |
|
|---|
| 104 |
# check libraries |
|---|
| 105 |
print " Prerequisites (dynamic at run-time)..." |
|---|
| 106 |
print " gcc................ %s" % get_version_first_line('gcc --version') |
|---|
| 107 |
print " g++................ %s" % get_version_first_line('g++ --version') |
|---|
| 108 |
print " PyQt............... %s" % get_version_first_line('pyuic -version') |
|---|
| 109 |
print " jackd.............. %s" % get_version_first_line('jackd --version') |
|---|
| 110 |
print " path............. %s" % get_command_path('jackd') |
|---|
| 111 |
print " flags............ %s" % get_package_flags("jack") |
|---|
| 112 |
print " libraw1394......... %s" % get_package_version("libraw1394") |
|---|
| 113 |
print " flags............ %s" % get_package_flags("libraw1394") |
|---|
| 114 |
print " libavc1394......... %s" % get_package_version("libavc1394") |
|---|
| 115 |
print " flags............ %s" % get_package_flags("libavc1394") |
|---|
| 116 |
print " libiec61883........ %s" % get_package_version("libiec61883") |
|---|
| 117 |
print " flags............ %s" % get_package_flags("libiec61883") |
|---|
| 118 |
print " libxml++-2.6....... %s" % get_package_version("libxml++-2.6") |
|---|
| 119 |
print " flags............ %s" % get_package_flags("libxml++-2.6") |
|---|
| 120 |
print " dbus-1............. %s" % get_package_version("dbus-1") |
|---|
| 121 |
print " flags............ %s" % get_package_flags("dbus-1") |
|---|
| 122 |
print " Prerequisites (static at compile-time)..." |
|---|
| 123 |
f = open( "$PYTHONDIR/static_info.txt", "r" ) |
|---|
| 124 |
for line in f: |
|---|
| 125 |
line = line[:-1] |
|---|
| 126 |
if line is not "\n" and line.startswith(" "): |
|---|
| 127 |
print line |
|---|
| 128 |
f.close() |
|---|
| 129 |
|
|---|
| 130 |
# libraw |
|---|
| 131 |
|
|---|
| 132 |
print " Hardware..." |
|---|
| 133 |
# check host controller |
|---|
| 134 |
print " Host controllers:" |
|---|
| 135 |
list_host_controllers() |
|---|
| 136 |
print " CPU info:" |
|---|
| 137 |
print run_command("cat /proc/cpuinfo") |
|---|
| 138 |
|
|---|
| 139 |
print " Configuration..." |
|---|
| 140 |
# check RT settings |
|---|
| 141 |
|
|---|
| 142 |
# check IRQ settings |
|---|
| 143 |
print " IRQ information" |
|---|
| 144 |
info = IRQInfo() |
|---|
| 145 |
|
|---|
| 146 |
info.load() |
|---|
| 147 |
print str(info) |
|---|
| 148 |
|
|---|
| 149 |
print "" |
|---|
| 150 |
print "=== REPORT ===" |
|---|
| 151 |
|
|---|
| 152 |
help = HelpStrings() |
|---|
| 153 |
|
|---|
| 154 |
# do the interpretation of the tests |
|---|
| 155 |
print "FireWire kernel drivers:" |
|---|
| 156 |
if (oldstack_loaded or oldstack_statically_linked) and \ |
|---|
| 157 |
(newstack_loaded or newstack_statically_linked): |
|---|
| 158 |
help.show('MODULES_BOTH_STACKS_LOADED') |
|---|
| 159 |
sys.exit(-1) |
|---|
| 160 |
elif newstack_loaded or newstack_statically_linked: |
|---|
| 161 |
help.show('MODULES_NEW_STACK_LOADED') |
|---|
| 162 |
sys.exit(-1) |
|---|
| 163 |
elif oldstack_statically_linked: |
|---|
| 164 |
print "[PASS] Kernel drivers statically linked into the kernel." |
|---|
| 165 |
elif not oldstack_present: |
|---|
| 166 |
help.show('MODULES_OLD_STACK_NOT_INSTALLED') |
|---|
| 167 |
sys.exit(-1) |
|---|
| 168 |
elif not oldstack_loaded: |
|---|
| 169 |
help.show('MODULES_OLD_STACK_NOT_LOADED') |
|---|
| 170 |
sys.exit(-1) |
|---|
| 171 |
else: |
|---|
| 172 |
print "[PASS] Kernel modules present and correctly loaded." |
|---|
| 173 |
|
|---|
| 174 |
if not devnode_present: |
|---|
| 175 |
help.show('DEVNODE_OLD_STACK_NOT_PRESENT') |
|---|
| 176 |
sys.exit(-1) |
|---|
| 177 |
else: |
|---|
| 178 |
if not devnode_permissions: |
|---|
| 179 |
help.show('DEVNODE_OLD_STACK_NO_PERMISSION') |
|---|
| 180 |
sys.exit(-1) |
|---|
| 181 |
else: |
|---|
| 182 |
print "[PASS] /dev/raw1394 node present and accessible." |
|---|
| 183 |
|
|---|
| 184 |
|
|---|
| 185 |
|
|---|