Разыскиваю медиаплеер на linux
Приветствую всех! Кто-нибудь встречал стационарный медиаплеер на Linux, для которого можно было бы скомпилировать свой код? Хочу купить плеер, который можно подружить с камерой.
Приветствую всех! Кто-нибудь встречал стационарный медиаплеер на Linux, для которого можно было бы скомпилировать свой код? Хочу купить плеер, который можно подружить с камерой.
Пишу анализатор на yacc/lex ассемблерных файлов. Пока что он должен разобрать входной файл и вывести его же: совпали файлы - хорошо, не совпали - не хорошо. Для упрощения написал грамматику только непосредственно для инструкций, а все остальные конструкции (которые не подходят под грамматику) хочу вывести без изменений. Для вывода конструкций, не являющихся инструкциями хочу использовать встроенный механизм обработки ошибок yacc - добавил правило с error. Внутри правила вывожу значение соответствующей переменной, но получаю не совсем то, что хотел - ожидал, что получу все значение строки, которую парсер не смог разобрать, а получаю только небольшой ее кусок. Есть какие-нибудь способы решить эту проблему?
Есть для Linux простая библиотека, которая позволит проводить быстрые вычисления по mod 2^m для различных m? От нее реально надо только умение считать a+b и a*b + скорость вычисления + простота использования. Заранее спасибо
Заранее спасибо за ответы.
Занимаюсь разработкой архитектуры своего проекта. Появилась идея разбить функционал на независимые модули, оформленные в виде библиотек .so, а общий функционал реализовать в виде ядра программы. То есть фактически ядро будет являться диспетчером, вызывающим модули из библиотек. В ядре же собираюсь разместить функции, связанные с обеспечением хранения настроек, состояния модулей и тд. В связи с этим прочитал ряд статей по поводу динамических библиотек, провел несколько экспериментов и все равно остались некоторые вопросы.
Во-первых, можно ли сделать так, чтобы ядро программы экспортировало некоторый набор функций (а именно функции работы с конфигурацией и состоянием модуля), которые бы импортировались подключаемыми динамическими библиотеками-модулями? В свою очередь библиотеки-модули экспортировали свои интерфейсные функции, которыми бы пользовалось ядро для обращения к модулям. Второе вроде как понятно, для этого и создаются so. Но вот про использование из .so функций из подлинковавшей ее программы нигде не нашел упоминания.
Во-вторых, исследуя получающиеся на выходе компилятора .so с помощью readelf обнаружил, что среди символов лежат все присутствующие в коде библиотеки функции. Это не есть хорошо: они занимают лишнее место, да и незачем выставлять на показ внутренние функции. В этом вопросе мне вспоминается опыт написания dll в NT - там я помечал функции, которые я хочу экспортировать. Более того, мне вспоминается, что при ручном импортировании функций из библиотеки в NT как-то можно было вообще не использовать имена функций, а лишь ее номер. Мне кажется в данном случае это было бы даже оправданно. И выкинуть имена всех символов, чтобы кто не знает - не пользовался. Можно ли сделать экспорт только нужных функций и по возможности с доступом не по именам, а по номерам?
В-третьих, в статье "Анатомия динамических библиотек Linux" прочитал, что при подгрузке библиотеки, у нее автоматически вызывается функция инициализации. Иногда ее иметь действительно полезно. Но, действуя по описанию, фактически я только добавил ключ компиляции у gcc и не создавал никаких процедур. Компилятор не заругался. Можно ли добавить процедуру инициализации и деинициализации в библиотеку или в статье наврали?
И, наверное, тупой вопрос. Можно ли загрузить библиотеку из ее mmap образа или напрямую из фрагмента файла без сохранения на диск во временный файл? Это для быстрого холодного старта из архива поставки продукта.
Насчет доступа к образу ядра в памяти есть некоторые наработки, так что тут вроде все понятно. Погуглил в сторону образа ядра на диске (/boot/vmlinuz-2.6.xx.xx). Выяснил, что это запакованный gzip elf файла ядра, перед которым лежит код распаковщика и загрузчика. Выдернул из этого файла архив ядра по статье http://bappoy.pp.ru/2008/09/05/extracting-vmlinux.html , посмотрел на него:), потыкался objdump`ом.
Какие вижу проблемы. Elf файл ядра, как я понимаю, представляет собой нелинкованное ядро. По этому поводу таблицы системных вызовов как таковой там не должно быть - ее должен кто-то заполнить при загрузке. В связи с этим придется каким-то образом самостоятельно рассчитывать вероятные адреса загрузки системных вызовов и сравнивать их тем, что имеет место в таблице системных вызовов. Если бы все системные вызовы лежали в одной секции, то как бы ядро не было загружено, последовательность разностей адресов системных вызовов из соседних ячеек в этой таблице должна была бы оставаться константной. Эту последовательность можно было бы сравнить с тем, что мы видим в памяти. Но лежат ли они всегда в одной секции?
В общем, хочется услышать мнения по поводу того, как можно реализовать такую утилитку.
Последнее вроде плучилось - gdb похоже подключился к системе. А вот с ядром не понятно что делать.
До этого я писал только драйвера под винду, так что примерно представляю процесс дебага - надо в начало модуля добавить int 3, чтобы всплыл отладчик, когда модуль начнет грузиться, а там уже бряки и все дела. Будет ли работать такая стратегия с gdb?