Согласно первому пункту в разделе «Инициализация таблицы страниц» документа http://www.cse.iitd.ernet.in/~sbansal/os/lec/l14.html, entry.S отвечает за настройку таблиц страниц. И мы действительно находим логику в https://github.com/torvalds/linux/blob/master/arch/x86/entry/entry_64.S, которая имеет дело с этим («таблицы страниц настроены так, что...» ).
Однако вhttps://github.com/torvalds/linux/blob/v4.14/arch/x86/boot/compressed/head_64.Sмы находим больше ссылок на настройку таблиц страниц. Здесь мы видим «Создать раннюю загрузочную таблицу страниц 4G» и «Включить таблицы загрузочных страниц».
В этой статье приведены примеры того, как включить пейджинг, включая пейджинг идентификации:https://github.com/littleosbook/littleosbook/blob/master/paging.md. Обратите внимание, что в примере используются регистры управления cr3, cr4 и cr0, как описано в https://en.wikipedia.org/wiki/Control_register. Файлы входа _64.S и заголовка _64.S также используют эти управляющие регистры.
Я решил эту проблему благодаря совету одного из разработчиков elogind, и я хочу закрыть ее на случай, если кто-то еще столкнется с подобными проблемами:
Проблема заключалась в неправильной конфигурации PAM для диспетчера отображения при работе с elogind, а не с systemd. Конфигурация по умолчанию для моего дистрибутива оказалась несовместимой с elogind. Файлы sddm-greeter
и system-login
в /etc/pam.d
нужно модифицировать, чтобы они вызывали elogind, а не systemd :
session optional pam_elogind.so
Например, я изменил приветствие sddm -на:
#%PAM-1.0
# Load environment from /etc/environment and ~/.pam_environment
auth required pam_env.so
# Always let the greeter start without authentication
auth required pam_permit.so
# No action required for account management
account required pam_permit.so
# Can't change password
password required pam_deny.so
# Setup session
session required pam_unix.so
#-session optional pam_systemd.so
session optional pam_elogind.so
sddm-greeter (END)
и система -войдите в:
#%PAM-1.0
auth required pam_tally2.so onerr=succeed file=/var/log/tallylog
auth required pam_shells.so
auth requisite pam_nologin.so
auth include system-auth
account required pam_tally2.so
account required pam_access.so
account required pam_nologin.so
account include system-auth
password include system-auth
session optional pam_loginuid.so
session optional pam_keyinit.so force revoke
session include system-auth
session optional pam_motd.so motd=/etc/motd
session optional pam_mail.so dir=/var/spool/mail standard quiet
#-session optional pam_systemd.so
session optional pam_elogind.so
session required pam_env.so
system-login (END)
По сути, я закомментировал строки systemd и заменил их эквивалентами elogind. После этого аутентификация агента polkit работала нормально.