内核空间上的实现timecounter_init(clocksource.h)给出了无效的ISA状态错误

时间:2014-11-24 20:14:14

标签: c linux time linux-kernel embedded-linux

我在使用ARM Cortex-M4的stm32f429上实现了嵌入式Linux操作系统。在我的代码中,我需要为了个人目的而实现clocksource.h库来测量经过的时间。我系统调用的代码是:

#include <linux/syscalls.h>
#include <linux/gpio.h>
#include <linux/delay.h>
#include <linux/time.h>
#include <linux/clocksource.h>


SYSCALL_DEFINE2(mycall, int*, arg1, char *, arg2) 
{
    struct timecounter *tc;
    struct cyclecounter *cc;
    long int value;

    local_irq_disable(); /*Disabling local interrupt*/


    spin_lock(&my_lock);

    timecounter_init(&tc,&cc,0);
    printk(KERN_INFO "PRINT\n");
    value = timecounter_read(&tc);

    local_irq_enable(); /*Enabling local interrupt*/


    return( value );
}

当我在我的主板上加载测试应用程序并运行时,输出结果给了我:

KERNEL: fault at 0xd00877e0 [pc=0xd00877e0, sp=0xd0019f58]
Escalated to Hard Fault
Invalid ISA state


Pid: 17, comm:                 test
CPU: 0    Not tainted  (2.6.33-arm1 #594)
pc : [<d00877e0>]    lr : [<d009ec19>]    psr: 6000000b
sp : d0019f58  ip : 08060501  fp : 00000000
Code dump at pc [d00877e0]:
d0094a69 d009122f d0087dc5 d00b2231 
r10: 01000000  r9 : d0018000  r8 : d0257ec4
r7 : 00000000  r6 : 00000000  r5 : ffffffff  r4 : d0019f84
r3 : d00877e0  r2 : 00000000  r1 : d0019f80  r0 : d0019f80
Flags: nZCv  IRQs on  FIQs on  Mode UK11_26  ISA ARM  Segment kernel
Kernel panic - not syncing: 
Rebooting in 10 seconds..

我该如何解决?我必须初始化cyclecounter cc?如果是,怎么样?

1 个答案:

答案 0 :(得分:0)

如果您使用Emcraft的SDK,那么您需要检查CFLAGS和LDFLAGS 像这样

CFLAGS="-Os -mcpu=cortex-m3 -mthumb -I /opt/linux-cortexm-1-12/A2F/root/usr/include"

LDFLAGS="-mcpu=cortex-m3 -mthumb -L/opt/linux-cortexm-1-12/A2F/root/usr/lib"