Написание драйвера под Linux

valga

Написал под КАМАК для работы с АЦП, более менее нормально работало, ну почти! Вчера запускаю - Sigmentation fault! В коде ничего не менял. Потом закомментировал всё в функции read - не помогло
Может кто сталкивался с проблемой?

Defolt1

Вряд ли в твоём случае имеет значение, драйвер ты писал или нет.
Segmentation fault - значит, комментируй по одному обращения по указателям, чтобы найти тот, который указывает туда, куда не надо.

Anturag

Привильно Контра делает....

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.

sergey_m

Вряд ли в твоём случае имеет значение, драйвер ты писал или нет.
Segmentation fault - значит, комментируй по одному обращения по указателям, чтобы найти тот, который указывает туда, куда не надо.
А что более прямых способов диагностики нет? Типа ядро с символами и куда указывает ip на момент segmentation fault?

Marinavo_0507

Похоже, его драйвер не в ядре, а в юзерспейсе.
Иначе было бы не segmentation fault, а kernel panic или типа того.
Поэтому надо брать в зубы gdb.

Defolt1

Я дал совет в контексте его действий: он сам писал про попытки комментить read.
Главная идея была, что segmentation fault означает косяк с адресацией. Как уж он её проверять будет - без разницы.

deestr

Происходит kernel Oops!
A segmentaition fault выводится тк из пространства ядра нет системных вызовов для вывода на консоль.
выводить можно только в лог, а он выводит kernel Oops.

Marinavo_0507

Берёшь ksymoops и декодируешь.
Повезло, что выводит, вместо того чтоб просто зависнуть.
Оставить комментарий
Имя или ник:
Комментарий: