Здравствуйте, ArtSh, Вы писали:
AS>Есть ли удобные методы отладки при написании драйверов в *nix. И есть ли пакеты облегчающие написание кода типа DriverStudio?
Не знаю, как сейчас, но в всоё время Линус выкинул из ядра все средства отладки — чтоб знал, что пишешь! (ищи ошибку, пока глаза на лоб не вылезут; если ты не понимаешь, что написал и надеешься на отладчик... нафиг такой код!).
Про printk, думаю, ты знаешь.
...Complex problems have simple, easy-to-understand wrong answers...
(Grossman's Misquote of H.L.Mencken)
Здравствуйте, ArtSh, Вы писали:
AS>Есть ли удобные методы отладки при написании драйверов в *nix. И есть ли пакеты облегчающие написание кода типа DriverStudio?
*nix — это что такое? В FBSD, помнится, есть встроенный ddb. В Linux есть kdb (патчем от SGI).
А для кодирования зачем специальные среди — вполне подходит старый добрый emacs.
Здравствуйте, ArtSh, Вы писали:
AS>Есть ли удобные методы отладки при написании драйверов в *nix. И есть ли пакеты облегчающие написание кода типа DriverStudio?
Под Линухом надо соответственно
проконфигурировать ядро
Kernel hacking/Kernel debugging,Remote debugging.
Тогда можно отлаживать ядро или модули, но на 2-м компе через нулл-модем кабель.
При такои конфигурации ядро не стартует, а ждет приказов от gdb.
Стартани gdb (или DDD) из директории с Линух source,
устанави параметры сериального интерфейса:
set remotebaud 34800
и заместа загрузки бинарника, укажи
target remote /dev/ttySXX
(смотря какой сер.порт)
На одном и том же компе как в SoftIce помоему не пойдет.
Здравствуйте, ArtSh, Вы писали:
AS>Есть ли удобные методы отладки при написании драйверов в *nix. И есть ли пакеты облегчающие написание кода типа DriverStudio?
Облегчающие не знаю, а для отладки есть "копия" SI — LinIce (последняя — 2.0) — сслыка на wasm.ru
Здравствуйте, ArtSh, Вы писали:
AS>Есть ли удобные методы отладки при написании драйверов в *nix. И есть ли пакеты облегчающие написание кода типа DriverStudio? может, будет полезно
Здравствуйте, Murr, Вы писали:
M>*nix — это что такое? В FBSD, помнится, есть встроенный ddb. В Linux есть kdb (патчем от SGI).
Ну скажу я Вам, что интересует меня SuSE Linux 9.1, и что, Вы мне сразу ссылку на DriverStudio портированную под Linux сразу дадите?
M>А для кодирования зачем специальные среди — вполне подходит старый добрый emacs.
Использование удобных утилит, облегчающих отладку и написание программ никому не повредит. Берегите свое время.
Здравствуйте, ArtSh, Вы писали:
AS>Ну скажу я Вам, что интересует меня SuSE Linux 9.1, и что, Вы мне сразу ссылку на DriverStudio портированную под Linux сразу дадите?
При чем тут Driver Studio?
Если я вам бы сказал только ddb(для FreeBSD), а вы пользовались Linux, то какую вообще пользу вам бы принесло?
AS>Использование удобных утилит, облегчающих отладку и написание программ никому не повредит. Берегите свое время.
Про отладку согласен. А чем кодирование для kernel отличается от кодирования для user-space?
Набор шаблонов для драйверов? Так он может быть полезен разве что вы по 10 драйверов в день пишете.
Вообще, концепция шаблона абсолютно абсурдна.
Здравствуйте, SlothMind, Вы писали:
SM>Здравствуйте, ArtSh, Вы писали:
AS>>Есть ли удобные методы отладки при написании драйверов в *nix. И есть ли пакеты облегчающие написание кода типа DriverStudio? SM>может, будет полезно
Согласен. При определенных условиях — наилучшее решение.
Здравствуйте, Murr, Вы писали:
M>При чем тут Driver Studio?
при том, что с ее помощью можно написать работающий драйвер за 5 минут. Если идет процесс разработки устройства то это очень удобно.
M>Если я вам бы сказал только ddb(для FreeBSD), а вы пользовались Linux, то какую вообще пользу вам бы принесло?
А если мне завтра понадобиться писать под FreeBSD?
Здравствуйте, SlothMind, Вы писали:
SM>может, будет полезно
Некоторое время тормозил, что UML — User Mode Linux. А вообще несколько не понятно, чем лучше vmware?
Здравствуйте, ArtSh, Вы писали:
AS>Здравствуйте, SlothMind, Вы писали:
SM>>может, будет полезно
AS>Некоторое время тормозил, что UML — User Mode Linux. А вообще несколько не понятно, чем лучше vmware?
В контексте твоего вопроса — тем что UML можно отлаживать gdb.
Здравствуйте, ArtSh, Вы писали:
AS>при том, что с ее помощью можно написать работающий драйвер за 5 минут.
Ну так расскажите, что там полезного есть. Просветите, так сказать.
Я в свою очередь могу попытаться просветить, чем можно для этого воспользоваться в Linux.
Я тебе уже честно сказал, что не вижу, чем кодирование для userspace отличается от кодирования для kernelspace. Ну разве что кроме бестолковых шаблонов, которые могут быть полезны только совсем зеленым новичкам или людям, которые по десять драйверов в день пишут.
AS>А если мне завтра понадобиться писать под FreeBSD?
Тогда придешь завтра в форум и спросите для FreeBSD.
Или ты считаешь, что кодированием драйверов для FreeBSD имеет что-то общее с кодированием драйверов для Linux (думаю не больше, чем общее между кодированием драйверов для Win и для Lin)?
Если ты едешь в Зимбабве и хочешь узнать правила пребывания там, то
я ты же не приходишь в форум и не спрашиваешь "какие правила пребывания в *ве?".
Здравствуйте, Murr, Вы писали:
M>Ну так расскажите, что там полезного есть. Просветите, так сказать. M>Я в свою очередь могу попытаться просветить, чем можно для этого воспользоваться в Linux.
1. BoundsChecker проверяет выделение памяти
2. TrueTime профайлер.
3. SoftIce отладчик.
4. TrueCoverage тоже что-то профайлера + анализатор вызовов и зависимостей функций
также возможность удаленной отладки (COM, Ethernet) + удобная оболочка позволяющая устанавливать драйвера, просматривать отчеты выше перечисленных средств(а также некоторый других средств сторонних разработчиков) и отладочную информацию и конечно же простой в использовании набор шаблонов. (все таки зря Вы так пренебрежительно относитесь к шаблонам. Сходу написать код который работает и не вешает систему непросто, особенно когда нужно достаточно часто его изменять или переписывать заново)
M>Я тебе уже честно сказал, что не вижу, чем кодирование для userspace отличается от кодирования для kernelspace. Ну разве что кроме бестолковых шаблонов, которые могут быть полезны только совсем зеленым новичкам или людям, которые по десять драйверов в день пишут.
отлаживать тяжелее и последствия более тяжелые. К томуже наверное идеология другая. Я, как можно понять по вопросу, в основном программировал под Win и под Lin начал писать недавно, и действительно вижу, что пока идеология не слишком сильно отличается от usermode. Но, по моему, так же можно сказать что и dll никак не отличается от драйвера.
M>Тогда придешь завтра в форум и спросите для FreeBSD. M>Или ты считаешь, что кодированием драйверов для FreeBSD имеет что-то общее с кодированием драйверов для Linux (думаю не больше, чем общее между кодированием драйверов для Win и для Lin)?
А что, они настолько отличаются?
M>Если ты едешь в Зимбабве и хочешь узнать правила пребывания там, то M>я ты же не приходишь в форум и не спрашиваешь "какие правила пребывания в *ве?".
однако если я еду в страны ЕС, то так и скажу, хотя страны разные.
Здравствуйте, ArtSh, Вы писали:
AS>1. BoundsChecker проверяет выделение памяти
Linux kernel можно собрать некоторым количеством кода, который поможет выловить некорректные обращения к памяти и использование stale указателей. Естественно, подобные вещи автоматически выловить можно не всегда.
Например, CONFIG_DEBUG_SLAB, CONFIG_DEBUG_PAGEALLOC.
AS>2. TrueTime профайлер.
Есть такая штука, как OProfile. У нас вообще свой профилировшик.
Есть еще kprobes, на основе которых тоже можно собирать информацию.
AS>3. SoftIce отладчик.
Ну тут уже упоминали kdb, gdb+UML.
AS>4. TrueCoverage тоже что-то профайлера + анализатор вызовов и зависимостей функций
AS>также возможность удаленной отладки (COM, Ethernet)
Kernel собрать с поддержкой serial консоли, тогда к kdb можно достучаться через minicom.
>удобная оболочка позволяющая устанавливать драйвера
В GNU/Linux драйверы не устанавливаются в том смысле, в котором устанавливаются в Windows.
В Linux драйверы можно загружать только из user-space, ядро этим не занимается.
Занимаются этим утилиты под названием modutils (modprobe,insmod,rmmod), у них есть база
модулей (modules.dep) и конфигурационный файл(modules.conf или modprobe.conf), в котором прописаны опции (параметры, которые можно передать из userspace) модулям. Если нужно встроить драйвер в загрузку GNU/Linux, то он прописывается в автозагрузку (обычно, init scripts, но для некоторых дистрибутивов, как Debian, можно и по-другому), как и любая другая программа.
В ядре есть ряд триггеров, которые вызывают загрузку модулей — фактически, запуск процесса modprobe.
>просматривать отчеты выше перечисленных средств(а также некоторый других средств сторонних разработчиков) и >отладочную информацию и конечно же простой в использовании набор шаблонов. (все таки зря Вы так >пренебрежительно относитесь к шаблонам. Сходу написать код который работает и не вешает систему непросто, >особенно когда нужно достаточно часто его изменять или переписывать заново)
На sourceforge есть утилиты для Oprofile, которые позволяют просматривать соотв, информацию.
А что до шаблонов — я никогда не слышал, чтобы такой набор существовал. Вероятно, его можно наковырять из каких-нибудь книжек по ядру. Но, честно скажу, не могу понять, как это может ускорить процесс разработки, когда шапка пишется 5 минут, а разработка длится месяц (в моем случае — 3 года). Зачем регулярно переписывать код с нуля?
AS>отлаживать тяжелее и последствия более тяжелые. К томуже наверное идеология другая. Я, как можно понять по >вопросу, в основном программировал под Win и под Lin начал писать недавно, и действительно вижу, что пока >идеология не слишком сильно отличается от usermode. Но, по моему, так же можно сказать что и dll никак не >отличается от драйвера.
А разве отличается?
Большинство различий — концептуальные, а не в организации кодирования (подсветка синтаксиса, удобный code browsing, удобный tag browsing, удобные средства редактирования, etc).
AS>А что, они настолько отличаются?
Ну я ж говорю. Оцени разницу между WinNT и Linux и представь, что такая же — между Linux и FreeBSD.
Есть, конечно, ряд вещей, которые изнутри сближают FreeBSD с Linux, но есть и ряд вещей, которые идеологически сближают Linux с WinNT. Ну тут можно много говорить.
AS>однако если я еду в страны ЕС, то так и скажу, хотя страны разные.
Дык, в том то и дело, что Linux и FreeBSD изнутри достаточно различно устроены.
Их схожесть обуславливается совместимыми интерфейсами системных библиотек (libc, POSIX threads, etc) и в малой степени — внутренним устройством.
Здравствуйте, ArtSh, Вы писали:
AS>Есть ли удобные методы отладки при написании драйверов в *nix. И есть ли пакеты облегчающие написание кода типа DriverStudio?