我试图在运行Linux的ARM设备上读写DACR(Nexus5上的Android:)。我有一个内核模块。相关的instructions如下:

MRC p15, 0, <Rd>, c3, c0, 0 ; Read DACR
MCR p15, 0, <Rd>, c3, c0, 0 ; Write DACR

我在模块中使用C代码,其中包含程序集。我写了以下代码来读取当前的DACR值:
unsigned int x = 0;
__asm__("MRC p15, 0, r1, c3, c0, 0;" : "=r" (x));
 printk(KERN_INFO "DACR read - value = %u", x);

上面的代码没有使内核崩溃,读取的值是3920437248
我无法正确编写DACR写入的指令。我试图从这个question开始执行以下操作(将所有1写入DACR进行测试),但设备崩溃并重新启动:
__asm__("MVN r1, #0;");
__asm__("MCR p15, 0, r1, c3, c0, 0;");

有人能建议如何正确地写入DACR吗?
另外,如何参数化上述指令-例如,使用x值初始化DACR,以下内容是否正确:
__asm__("MCR p15, 0, %0, c3, c0, 0;" :: "r" (x));

最佳答案

哦,你把收银机写对了。
问题是,问题是这样的:
我正试着在高速公路上驾驶我的车挂上倒车档。我试着按照手册上的指示,把变速杆牢牢地移到“R”位置,但我的变速箱现在已经在路上抛锚了。有人能建议如何正确挂上倒车档吗?
你在一个实时系统上。内核已经在使用域。它需要访问权限才能正常工作。如果您通过将所有内容标记为Manager并删除所有权限检查来宣布开放季节,则copy-on-write将不再工作;每个进程都开始通过它们的初始映射来破坏零页,而不是触发分配真正的备份页;猫和狗住在一起;混乱。

10-06 01:40