Что мне нужно сделать: изменить код ядра Linux (3.13.6, загруженный с kernel.org). Найдите количество вызовов функции kvm_vmx_exit_handler.
Что я пытаюсь сделать: объявить массив в файле x86.h.
extern unsigned long int my_count_s[40];
файл x86.h, который включается в файл 'vmx.c'
#include "x86.h"
Теперь я пытаюсь инициализировать элемент массива значением 0 в файле 'vmx.c'.
my_count_s[1] = 0;
Я буду увеличивать его каждый раз, когда вызывается функция kvm_exit_handler. И я узнаю, сколько раз kvm выполнял выход, когда что-то происходило, и сколько раз вызывалась конкретная функция обработки выхода. Я буду использовать один элемент массива для каждой функции exithandler.
Ошибка, с которой я столкнулся:
arch/x86/kvm/vmx.c:58:1: warning: data definition has no type or storage class [enabled by default]
arch/x86/kvm/vmx.c:58:1: error: type defaults to ‘int’ in declaration of ‘my_count_s’ [-Werror=implicit-int]
arch/x86/kvm/vmx.c:58:1: error: conflicting types for ‘my_count_s’
arch/x86/kvm/x86.h:8:26: note: previous declaration of ‘my_count_s’ was here
arch/x86/kvm/vmx.c:58:1: error: invalid initializer
Мое понимание: я объявил тип данных my_count_s[40] как unsigned long int, но почему по умолчанию используется значение 'int'? И даже если он был задан по умолчанию для типа данных 'int', почему возникла ошибка инициализации для строки my_count_s[1] = 0; ?
ПРИМЕЧАНИЕ: 1. Строка 58 в файле vmx.c — это "my_count_s[1]=0;" 2. Если я скомпилирую ядро, просто объявив массив, оно работает нормально, но всплывают ошибки, когда я пытаюсь присвоить значение элементу в массиве.