【问题标题】:How to access user mode in Raspberry pi 1?如何在 Raspberry pi 1 中访问用户模式?
【发布时间】:2015-07-12 09:51:36
【问题描述】:

我想要做的是尝试在 Raspberry pi 1(ARMv6) 中运行一个短代码,并获取它所花费的时钟周期数。所以我必须读取CP15 c15中的循环计数器寄存器。在文档(ARM11->ARM1176->ARM1176JZF-S Technical Reference Manual->System Control Coprocessor->System control processor registers->c15, Cycle Counter Register)中说我需要先访问用户模式。但我不知道该怎么做。

在 Raspberry pi 2(ARMv7) 中,我知道这可以通过以下代码的内核模块来完成:

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

但是由于ARMv6和ARMv7的寄存器不同,我不知道如何为Raspberry 1编写汇编程序。直到现在我在手册中都找不到有关此的任何信息。有人知道怎么做吗?

顺便说一句,我的目的只是获得运行代码的时钟周期。如果有人知道其他方法,我也很高兴看到。谢谢!

【问题讨论】:

  • 呃,你指的准确的文字是“在用户模式下访问循环计数器寄存器取决于V位,见c15, Secure User and Non-secure Access Validation Control Register”,你没有点击交叉引用链接吗? (注意它只是安全的)无论如何,使用perf 几乎肯定比暴露一个原始的全局计数器来尝试测量单个任务要好,除非你明白为什么该任务有时需要数万个周期才能运行,并且您对极其不准确的数据感到满意。

标签: arm raspberry-pi clock armv6


【解决方案1】:

没有修改内核参数的通用能力。要编辑 /boot/cmdline.txt,您必须已经具有 root 访问权限或物理交换卡的能力。它也只在下次启动时生效,因此您已经拥有了最大可能的拒绝服务能力。

既然这个线程不会死,我至少可以指出 init=shell 不是正确的单用户模式。单用户模式是当您将“单”添加到 cmdline,或者以其他方式启动或转换到运行级别 1 或 S 时。您几乎没有启动后台守护程序,只有 root 可以在控制台上登录。如果设置了root密码,一般需要输入。

init=/bin/bash 最好称为“单进程模式”。初始化系统、运行级别和初始化脚本被完全跳过,而是启动一个根 shell。甚至像 /dev 和 /proc 和 /sys 这样重要的伪文件系统都没有挂载,所以很多正常的命令都会失败。作业控制不可用。

【讨论】:

  • 嗯?这与访问硬件性能计数器有什么关系?
  • 我告诉你什么是真正的用户模式,它可以与硬件工具兼容。
猜你喜欢
  • 2018-12-19
  • 2022-08-17
  • 1970-01-01
  • 2015-07-15
  • 2014-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
相关资源
最近更新 更多