Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在实时Linux内核模式下获取中断时间(时间戳)?_Linux_Linux Kernel_Timestamp_Embedded Linux_Ftrace - Fatal编程技术网

如何在实时Linux内核模式下获取中断时间(时间戳)?

如何在实时Linux内核模式下获取中断时间(时间戳)?,linux,linux-kernel,timestamp,embedded-linux,ftrace,Linux,Linux Kernel,Timestamp,Embedded Linux,Ftrace,客户端/服务器通信-客户端是发送方,服务器是接收方 当服务器通过以太网接口(UDP)接收数据时,服务器中的内核将被触发。我在服务器端使用实时LINUX。服务器(即嵌入式pc目标)正在处理中断,以触发嵌入式pc目标(包含rt Linux)以获得执行新到达数据的注意 如何在中断发生后立即计算内核中的时间并将响应发送回客户端?1)如果您使用的是嵌入式linux平台,可以参考CPU数据表:可能它有一组高速计时器。例如,我正在使用基于ARM Cortex A8的SoC,它有GP定时器,时钟频率可以达到38

客户端/服务器通信-客户端是发送方,服务器是接收方

当服务器通过以太网接口(UDP)接收数据时,服务器中的内核将被触发。我在服务器端使用实时LINUX。服务器(即嵌入式pc目标)正在处理中断,以触发嵌入式pc目标(包含rt Linux)以获得执行新到达数据的注意

如何在中断发生后立即计算内核中的时间并将响应发送回客户端?

1)如果您使用的是嵌入式linux平台,可以参考CPU数据表:可能它有一组高速计时器。例如,我正在使用基于ARM Cortex A8的SoC,它有GP定时器,时钟频率可以达到38.4 MHz,因此我可以以约27 ns的精度测量执行时间。很可能,您的操作系统不会提供这样的API,所以欢迎您直接从内核驱动程序读取CPU寄存器

2) 如果您只想估计执行时间,就可以使用主板的一个GPIO引脚。在“开始”处设置引脚,在“结束”处设置引脚,然后用示波器观察该引脚(如果有)

3) 若我误解了你们的意思,你们所需要的只是一个实时的时间戳(比如HH:mm:ss),你们可以参考你们板上的RTC芯片。使用实时时钟芯片的驱动程序,您可以从内核模块中读取时间。不幸的是,您可能无法从中断服务例程执行此操作。
或者只需调用do_gettimeofday并通过time_to_tm将timeval转换为人类可读的内容,如果需要:)

您准备好修改内核源代码了吗?我计划使用ftrace调试内核!!!实时操作在rt linux的内核模式下进行,因此我无法在用户空间中编写ISR来处理此操作。当服务器从客户端接收数据(嵌入式pc目标上的实时linux)时,内核(服务器)停止当前执行并切换到新到达的。我想知道内核被抢占的时间戳和内核开始执行的时间戳。如何获取内核的时间??我使用clock_gettime来获取时间戳,但是在内核中调用它来获取时间戳的位置??恐怕我无法引导您到特定的源代码行来放置时间戳:您应该查看以太网芯片驱动程序的源代码,找到ISR和其他您需要的函数。然后将获得的值打印到控制台,或者保存到sysfs中,或者实现您自己的接口,以便从用户空间或其他驱动程序进行访问。