Всякий раз, когда я пытаюсь работать с исходным кодом ядра (будь то апстрим к более стабильной версии Linux, добавлять функции и т. Д.), При сборке происходит сбой случайных исходных файлов.
Например, я пытался перевести версию ядра с версии 3.18.110 до версии 3.18.125 (конечно, по одной версии за раз). Я успешно разрешил все возникшие конфликты, но когда я начинаю собирать ядро, компилятор находит ошибку в файле, которого нет даже в конфликтующих файлах. Устранение появившейся ошибки приведет к появлению большего количества ошибок либо в том же файле, либо в другом файле.
Другая вещь, которую я пробовал, - это добавление губернатора. Я успешно добавил код там, где это необходимо, добавил исходный файл регулятора, затем включил его в конфигурации по умолчанию и затем начал компилировать. После этого компилятор обнаружил некоторую ошибку в .c файле регулятора. Почему?
Я не прошу разрешения ошибок, я хочу знать, почему ошибки происходят в первую очередь.
Архитектура - это arm64, набор инструментов - это:
https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9
Пример:
Я пытаюсь добавить регулятор, редактируя эти файлы:
драйверы / CPUfreq / Kconfig
драйверы / CPUfreq / Makefile
включить / Linux / cpufreq.h
Kconfig:
config CPU_FREQ_DEFAULT_GOV_SMARTMAX
bool "smartmax"
select CPU_FREQ_GOV_SMARTMAX
help
Use the CPUFreq governor 'smartmax' as default
config CPU_FREQ_GOV_SMARTMAX
tristate "'smartmax' cpufreq policy governor"
select CPU_FREQ_TABLE
help
'smartmax' combined ondemand and smartass2
Makefile:
obj-$(CONFIG_CPU_FREQ_GOV_SMARTMAX) += cpufreq_smartmax.o
cpufreq.h:
#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_SMARTMAX)
extern struct cpufreq_governor cpufreq_gov_smartmax;
#define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_smartmax)
После этого я добавляю .c файл регулятора (который является неизменным и полностью оригинальным кодом регулятора), затем добавьте его в конфигурацию по умолчанию для моего устройства:
CONFIG_CPU_FREQ_GOV_SMARTMAX=y
Затем я иду в папку toolchain, открываю терминал и набираю это:
export CROSS_COMPILE=$(pwd)/bin/aarch64-linux-android-
export ARCH=arm64 && export SUBARCH=arm64
После этого я захожу в папку ядра и использую следующие команды:
make clean
make mrproper
make *my_device_config_name*
make -s -j$(nproc --all)
Выполнение всего этого приводит к следующим ошибкам в коде регулятора:
drivers / cpufreq / cpufreq_smartmax.c: в функции 'cpufreq_smartmax_timer':
drivers / cpufreq / cpufreq_smartmax.c: 522: 3: ошибка: неявное объявление функции '__cpufreq_driver_getavg' [-Werror = неявное объявление функции]
freq_avg = __cpufreq_driver_getavg (policy, j);
drivers / cpufreq / cpufreq_smartmax.c: в функции 'store_debug_mask':
drivers / cpufreq / cpufreq_smartmax.c: 607: 2: ошибка: неявное объявление функции 'strict_strtoul' [-Werror = неявное объявление-функции]
res = strict_strtoul (buf, 0, & input);