ARM Ubuntu: как запустить код в привилегированном режиме?

У меня есть ARM Samsung Chromebook под управлением Ubuntu (chrUbuntu 12.04).

Каков самый простой способ запустить какой-либо код в «привилегированном» состоянии ARM? Я не ищу sudo, я ищу режим процессора ARM Supervisor, IRQ, FIQ и т. д. Где-то я могу проверить/изменить регистры сопроцессора.

Перейти в режим priv легко: просто выполните вызов SVC. Вопрос в том, как проще всего подключить мой собственный код к ОС, чтобы он вызывался при определенном вызове SVC?

Я не большой хакер Linux. В основном я ищу общие указатели на самое простое общее направление (пересобрать ядро? взять исходный код драйвера и подключить модифицированный драйвер? какой-нибудь простой параметр командной строки для запуска чего-то priv?), тогда я пойду оттуда.


В случае, если мой вышеприведенный подход не имеет смысла и есть более простой способ, моя общая цель:

  • написать несколько низкоуровневых ассемблерных процедур
  • посмотрите, как они работают с различными аппаратными конфигурациями ядра Cortex-A15

Заранее спасибо,

Павел


person pmeyer    schedule 17.11.2012    source источник
comment
Самый простой способ — вообще забыть о хромбуке и запустить его в эмуляторе.   -  person Flexo    schedule 18.11.2012
comment
Я пытаюсь оптимизировать код специально для процессора Cortex-A15. Эмулятор не поможет, так как он будет намного слишком медленным и не будет правильно отображать поведение Cortex-A15.   -  person pmeyer    schedule 18.11.2012


Ответы (2)


Самый простой способ получить доступ к регистрам сопроцессоров в случае, если они не разрешены с пользовательской земли, - запустить некоторый код инициализации в последовательности загрузки ядра, например, board-init, или написать модуль ядра, чтобы делать то, что вы хотите. См. этот ответ. Также, если интересно, этот вопрос.

person auselen    schedule 18.11.2012
comment
Очень полезно. Я буду придерживаться подхода модуля ядра. Спасибо! - person pmeyer; 18.11.2012

Что касается второй версии вашего вопроса: мне кажется, что вам нужны инструменты производительности, а не попытки реализовать свои собственные измерения производительности: https://perf.wiki.kernel.org/index.php/Tutorial

Другой способ — реализовать загружаемый модуль ядра. Если вы создаете модуль в виде драйвера или чего-либо, доступ к которому осуществляется через /proc или /sys, этот модуль будет выполняться в режиме супервизора.

person unixsmurf    schedule 18.11.2012
comment
Два ответа: 1) Общие инструменты производительности были бы в порядке, но было бы лучше получить некоторые необработанные счетчики производительности в A15. Мне не нужна портативность. 2) Я также хотел бы иметь возможность манипулировать некоторыми аппаратными параметрами (медленный кэш L2, настройка аппаратной предварительной выборки и т. д.). Для этого мне нужен режим ядра. Из-за этого преследую модуль ядра (скорее всего просто драйвер блочного устройства). Моя проблема сейчас: я запускаю ChrUbuntu, который просто захватывает исходное ядро ​​​​ChromeOS. У меня нет /lib/modules/build. Еще изучаю варианты. - person pmeyer; 19.11.2012
comment
1) Какую выгоду вы ожидаете от самостоятельного написания этого кода, а не от доступа к тем же самым счетчикам через perf? 2) Этот тип модификации обычно проще сделать один раз, во время загрузки (желательно до включения кешей/MMU). Взгляните на chromium.org/chromium-os/ developer-guide#TOC-Get-the-Source для получения информации о получении доступа к исходным кодам ядра. - person unixsmurf; 19.11.2012
comment
Перевод счетчиков производительности в пользовательский режим: никаких преимуществ. Я могу использовать perf для этого. В остальном (изменение задержки L2, конфигурация предварительной выборки, потоковая запись и т. д.) моя цель — протестировать код, который я пишу, в разных конфигурациях. Сейчас я работаю над созданием собственного ядра для Chromebook из исходного кода. Как только я это сделаю, я должен быть готов идти. Спасибо за указатели! - person pmeyer; 20.11.2012