Нет, это обычно невозможно. Одна трудность связана с линковкой. Драйверы будут вызывать функции и инфраструктуру в Linux. Например, даже если kmalloc()
является одним и тем же источником, местоположение в адресном пространстве может быть другим. Чтобы извлечь код, вам нужно сопоставить извлеченные адреса Linux с вашими адресами назначения. Кроме того, для драйверов характерно использование inline
функций, которые могут вызываться в другом модуле, например kfifo
, и т. Д., Которые могут иметь функциональные изменения между версиями Linux. Еще более распространенным является то, что код kfifo
будет встроен в драйвер. Если функциональность спин-блокировки изменяется между версиями ARM Linux, вам нужно извлечь и заменить эту информацию из драйвера новой версией. Наконец, есть функции Linux, которые не просто устарели, но полностью удалены и заменены какой-либо другой инфраструктурой.
Ваш вопрос очень похож на декомпиляцию . Из некоторых приведенных выше причин и, возможно, более, вы можете видеть, что это очень трудно или невозможно реализовать. Вот почему люди сделали ядро Linux GPL. Вы должны иметь возможность запросить исходный код и изменить его гораздо более эффективным (и функционально правильным) способом.