Я портирую 3G-модем, написанный для Linux для ноутбуков, на встроенное устройство Android (Gingerbread) с процессором ARM. Я уже получил драйвер устройства, скомпилированный (код C) в виде модуля (файл .ko) и установлен. Я вижу это, когда я загружаю ядро, и оно работает хорошо. Он подключается к USB-порту, как задумано. Он счастлив, что готов к разговору.
Следующая необходимая часть - это «менеджер соединений», написанный на C ++. Вот где у меня проблема. Это не работает в пространстве ядра, но это не обычное приложение для Android с пользовательским интерфейсом. Это «задача», работающая в фоновом режиме, которая должна запускаться из файла «init.rc» во время загрузки. Makefile, предоставляемый с исходным кодом, хорош для установки зависимостей, но бесполезен для платформы, на которую я хочу ориентироваться. Я использую набор инструментов, поставляемый с исходным кодом Android «arm-eabi- *» (работает на компьютере с Ubuntu), который я использовал для компиляции Android и ядра. Я получил много ошибок компиляции, потому что он использует стандартные библиотеки "libc", которых нет в Android. Я заменил его на «bionic libc», который является облегченной версией Linux для Linux. Кроме того, он ищет «crt0.o», который является кодом запуска статически связанной программы в среде linux (и нескольких других ОС). В Android он динамически связан во время выполнения, поэтому использует что-то еще, кроме crt0.o.
В Интернете имеется масса информации о программировании приложений для Android, но очень мало о подобных вещах низкого уровня. Если у кого-то есть рабочий make-файл для создания такого кода C ++, который будет запускаться в качестве фоновой задачи под Android ARM, я был бы очень признателен, чтобы взглянуть на него или есть какая-либо информация, которая может помочь мне найти способ сделать это. Или, если кто-то сделал что-то подобное, мог бы подсказать, как этого добиться.