2015-07-12 5 views
1

Что я хочу сделать, это попытаться запустить короткий код в Raspberry pi 1 (ARMv6) и получить количество тактов, которые потребовались. Поэтому я должен прочитать регистр счетчика циклов, который находится в CP15 c15. В документе (ARM11->ARM1176->ARM1176JZF-S Technical Reference Manual->System Control Coprocessor->System control processor registers->c15, Cycle Counter Register) говорится, что мне нужно сначала войти в пользовательский режим. Но я понятия не имею, как это сделать.Как получить доступ к пользовательскому режиму в малине pi 1?

В Raspberry Pi 2 (ARMv7) Я знаю, это может быть сделано с помощью модуля ядра из следующего кода:

/* enable user-mode access */ 
asm ("MCR p15, 0, %0, C9, C14, 0\n\t" :: "r"(1)); 

, но так как регистры ARMv6 и ARMv7 разные, я не знаю, как напишите сборщик для малины 1. До сих пор я не мог найти ничего об этом в руководстве. Кто-нибудь знает как это делать?

Btw, моя цель - просто получить тактовые циклы запуска кода. Если кто-то знает другие подходы к этому, я тоже рад видеть. Спасибо!

+0

Er, точный текст, на который вы ссылаетесь, является «Доступ к регистру счетчика циклов в режиме пользователя зависит от бит V, см. [C15,« Регистр контроля безопасности для безопасного пользователя и небезопасного доступа »] (http: // infocenter. arm.com/help/topic/com.arm.doc.ddi0301h/Babidacc.html) ", вы не следовали ссылке перекрестной ссылки? (Обратите внимание, что это безопасно). В любом случае использование 'perf' почти наверняка будет лучше, чем разоблачение необработанного глобального счетчика, чтобы попытаться измерить одну задачу, если вы не поймете, почему эта задача будет иногда занимать десятки тысяч циклов дольше, и вы довольны дико неточными данными. – Notlikethat

ответ

1

Нет общей возможности изменять параметры ядра. Для редактирования /boot/cmdline.txt вы должны либо иметь корневой доступ, либо физическую замену карты. Он вступает в силу и при следующей загрузке, поэтому у вас уже есть возможность максимально возможного отказа в обслуживании.

Поскольку эта нить не умрет, могу ли я хотя бы указать, что init = shell не является так называемым однопользовательским режимом. Однопользовательский режим - это когда вы добавляете «одиночный» в cmdline, иначе загружаете или переходите в уровень запуска 1 или S. У вас почти нет фоновых демонов, и только root может войти в систему на консоли. Если установлен пароль root, его обычно необходимо ввести.

init =/bin/bash лучше назвать «режимом однопроцессорного режима». Начальная система, уровни запуска и сценарии инициализации полностью пропущены, вместо этого запускается корневая оболочка. Даже важные псевдо-файловые системы, такие как/dev и/proc и/sys, не монтируются, поэтому многие обычные команды не сработают. Управление заданиями недоступно.

+0

А? Как у этого есть что-то, что можно сделать с доступом к счетчикам производительности оборудования? – Notlikethat

+0

Я рассказываю вам, что действительно является USER MODE, и может быть совместимо с аппаратными средствами. –