#c #linux #memory #kernel
#c #линукс #память #ядро
Вопрос:
Я новичок в ядре Linux.
Я учусь использовать крипто-API ядра Linux и получаю пример кода по этой ссылке «https://www.kernel.org/doc/html/latest/crypto/api-samples.html#code-example-for-symmetric-key-cipher-operation»
Я заметил, что пример кода используется sg_init_one(amp;sg, data, datasize);
для привязки data
баффа к scatterlist
структуре. Наконец, определенный алгоритм шифрования получит поддержку данных, которые вызывающий абонент хочет передать из sg.
Но когда я использую массивный бафф и передаю его sg_init_one
как data
.
например
u8 data[32]; struct scatterlist sg; const size_t datasize = 32; sg_init_one(amp;sg, data, datasize);
Но алгоритм шифрования, получающий данные из sg, не соответствует необработанным данным, и проанализированный виртуальный адрес также не соответствует.
Похоже, что виртуальный адрес u8 data[32];
передается неправильно, почему? В этом случае есть ли какая-либо разница между одномерным массивом и указателем первого уровня?
Я также обнаружил , что sg_init_one
позвоню sg_set_page
и просмотрю страницу баффа virt_to_page
. Связано ли это с различием между указателями и массивами в управлении памятью ядра, которое вызывает ошибку при получении страницы?