Написание драйвера под Linux
Segmentation fault - значит, комментируй по одному обращения по указателям, чтобы найти тот, который указывает туда, куда не надо.
Segmentation Fault
A segmentation fault occurs when your program tries to access memory locations that haven't been allocated
for the program's use. Here are some common errors that will cause this problem:
scanf("%d", number);
In this case, number is integer. scanf expects you to pass it the address of the variable you want to read
an integer into. But, the writer has fogotten to use the `&' before number to give scanf the address of the
variable. If the value of number happened to be 3, scanf would try to access memory location 3, which is
not accessible by normal users. The correct way to access the address of number would be to place a `&'
before number:
scanf("%d", &number);
Another common segmentation fault occurs when you try to access an array index which is out of range. Let's
say you set up an array of integers:
int integers[80];
If, in your program, you try to use an index (the number within the brackets) over 79, you will ``step out
of your memory bounds'', which causes a segmentation fault. To correct this, rethink your array bounds or
the code that is using the array.
Вряд ли в твоём случае имеет значение, драйвер ты писал или нет.А что более прямых способов диагностики нет? Типа ядро с символами и куда указывает ip на момент segmentation fault?
Segmentation fault - значит, комментируй по одному обращения по указателям, чтобы найти тот, который указывает туда, куда не надо.
Иначе было бы не segmentation fault, а kernel panic или типа того.
Поэтому надо брать в зубы gdb.
Главная идея была, что segmentation fault означает косяк с адресацией. Как уж он её проверять будет - без разницы.
A segmentaition fault выводится тк из пространства ядра нет системных вызовов для вывода на консоль.
выводить можно только в лог, а он выводит kernel Oops.
Повезло, что выводит, вместо того чтоб просто зависнуть.
Оставить комментарий
valga
Написал под КАМАК для работы с АЦП, более менее нормально работало, ну почти! Вчера запускаю - Sigmentation fault! В коде ничего не менял. Потом закомментировал всё в функции read - не помоглоМожет кто сталкивался с проблемой?