Как загрузить виртуальный адрес переменной в регистр кода ядра ARM64?Linux

Ответить
Anonymous
 Как загрузить виртуальный адрес переменной в регистр кода ядра ARM64?

Сообщение Anonymous »

Я написал макрос сборки, который считывает значение индекса (в данном случае myidx), которое используется в качестве места для записи данных метки в буфере отладки (в данном случае mydebug2). Это для ARM64.

Код: Выделить всё

.macro write_mark, data
adr_l x25, mydebug2 // x25 = &mydebug2
adr_l x26, myidx // x26 = &myidx
ldr x27, [x26] // x27 = myidx
mov x26, \data // x26 = data
//add x27, x27, x27, LSL #1 // x27, 3 // to double word address
lsl x27, x27, #3 // x27, 3 // to double word address
add x25, x25, x27
str x26, [x25] // mydebug2[myidx] = data
adr_l x26, myidx // x26 = &myidx
ldr x27, [x26] // x27 = myidx
add x27, x27, 1 // x27(myidx) ++
str x27, [x26] // myidx++
.endm
Я использую это вот так.

Код: Выделить всё

    adrp    x1, init_pg_dir
write_mark 0x5555
bl      __enable_mmu
write_mark 0x6666
Эта маркировка работает нормально, пока ЦП не активирует MMU процессора. Я вижу метки в буфере mydebug2, используя интерфейс отладки jtag. Но как только MMU включен, этот макрос больше не работает, потому что когда я загружаю адрес mydebug2 или myidx, это адрес переменной в физическом адресе. (Я проверял отладчиком, используя виртуальную машину qemu).
Как в этом случае загрузить регистры x25, x26 как виртуальный адрес??

Подробнее здесь: https://stackoverflow.com/questions/793 ... ernel-code
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»