Я пытаюсь изменить существующий модуль ядра Linux для загрузки прошивки
данные из файла в файловой системе. Я рассмотрел много способов сделать
это в другом модуле кода все потребует серьезной модификации существующих
код. Я хотел бы использовать .h файл для хранения изменений и сохранения
сам файл драйвера, так что модифицированный драйвер может быть более переносимым.
При написании драйвера он уже вызывает файл .h для получения необходимого
значения, однако они предварительно установлены в файле .h, что я хотел бы сделать,
иметь .h файл, получить данные из файла конфигурации на диске (прошить как
этот драйвер для андроида). Я много искал для сопоставимых
метод чтения данных из файла, но ни один из них не сохраняет данные в форме, необходимой модулю. Вот что должно содержать данные:
struct fw_data
{
u32 offset : 8;
u32 : 0;
u32 val;
};
static const struct fw_data GSL1680_FW[] = {
{0xf0,0x3},
{0x00,0xa5a5ffc0},
{0x04,0x00000000},
{0x08,0xe810c4e1},
{0x0c,0xd3dd7f4d},
{0x10,0xd7c56634},
{0x14,0xe3505a2a},
{0x18,0x514d494f},
{0x1c,0xb83a7121},
{0x20,0x00000000},
{0x24,0x00000000},
{0x28,0x00000000},
{0x2c,0x00000000},
{0x30,0x00001000},
{0x34,0x00000000},
{0x38,0x00000000},
{0x3c,0x00000000},
{0x40,0x00000001},
{0x44,0x00000000},
{0x48,0x00000000},
{0x4c,0x00000000},
{0x50,0x00000000},
{0x54,0x01020304},
{0x58,0x05060708},
{0x5c,0x090a0b0c},
{0x60,0x0d0e0e0f},
{0x64,0x10111213},
{0x68,0x14151617},
{0x6c,0x18191a1b},
{0x70,0x1b1c1e1f},
{0x74,0x00000000},
{0x78,0x00010000},
{0x7c,0x8c846af3},
{0xf0,0x4},
{0x00,0x00000000},
{0x04,0x00000000},
{0x08,0x00000000},
{0x0c,0x00000000},
{0x10,0xffffff38},
{0x14,0x00000000},
{0x18,0x00000000},
{0x1c,0x00000000},
{0x20,0x00000000},
{0x24,0x00000000},
{0x28,0x00000000},
{0x2c,0x00000000},
{0x30,0x00002400},
{0x34,0x00000000},
{0x38,0x00000000},
{0x3c,0x00000000},
{0x40,0x00000000},
{0x44,0x00000002},
{0x48,0x00000001},
{0x4c,0x00004000},
{0x50,0x00000000},
{0x54,0x00010202},
{0x58,0x02030304},
{0x5c,0x05050606},
{0x60,0x07080909},
{0x64,0x0a0b0c0c},
{0x68,0x0d0e0f10},
{0x6c,0x11121416},
{0x70,0x16191c1e},
{0x74,0x00000000},
{0x78,0x80808080},
{0x7c,0x8c846af3},
{0xf0,0xb3},
{0x00,0x00001682},
{0x04,0x00000000},
{0x08,0x46656220},
{0x0c,0x20352032},
{0x10,0x30313300},
{0x14,0x00000000},
{0x18,0x31353a34},
{0x1c,0x383a3334},
{0x20,0x00000000},
{0x24,0x00000000},
{0x28,0x00000000},
{0x2c,0x00000000},
{0x30,0x00000000},
{0x34,0x00000000},
{0x38,0x00000000},
{0x3c,0x00000000},
{0x40,0x00000000},
{0x44,0x00000000},
{0x48,0x00000000},
{0x4c,0x00000000},
{0x50,0x00000000},
{0x54,0x00000000},
{0x58,0x00000000},
{0x5c,0x00000000},
{0x60,0x00000000},
{0x64,0x00000000},
{0x68,0x00000000},
{0x6c,0x00000000},
{0x70,0x00000000},
{0x74,0x00000000},
{0x78,0x00000000},
{0x7c,0x00000000},
};
Я удалил большой раздел включенных данных, так как они по сути одинаковы, отличаясь только адресом и данными. Я думаю, что вышеизложенное должно дать некоторую идею о том, что там.
Значения являются местоположением регистра и шестнадцатеричными данными для этого местоположения.
Я обнаружил примеры модулей, которые загружают данные непосредственно в микросхему из файла, выполняющего аналогичную функциональность, однако те, которые я обнаружил, вносят существенные изменения в основной модуль для достижения этой цели, и, как я уже сказал, я буду хотелось бы сохранить основной модуль как можно ближе к его существующей форме, чтобы функциональные возможности могли быть реализованы в различных версиях модуля и более переносимы из одной модели SOC в другую с минимальной модификацией основного модуля между ними.
Я пытался считывать данные в GSLX680 [] с помощью filp_read несколькими способами, однако успеха у меня не было.
Я далек от эксперта по программированию на Си и никогда раньше не пытался так сильно модифицировать модуль, и никогда раньше не сталкивался с чтением данных из файла в пространстве ядра. Я просто любитель, пытающийся добавить функциональность к драйверу, чтобы он решал многие проблемы с различиями в конфигурации на устройствах Android китайского производства, использующих тот же SOC. Любая помощь с благодарностью.
Изменить: я добавил структуру fw_data выше, я не знал, что она существует, пока не рассмотрел весь код, связанный с этим драйвером. В этом я уверен, что именно поэтому я не смог получить данные из файла в GSLX680 []. Я начинаю сейчас, любые предложения приветствуются.
Спасибо
fsebentley
Задача ещё не решена.