linux系统时间会跳变,关于am3359 linux下系统时间跳变的问题

最近在am3359下 跑linux 系统 发现设置好系统时间以后 跑一段时间大约24个小时左右,系统时间就开始跳变 总是在一个地方循环往复具体如下:

root@ap_control:~# date +%s

1415649163

root@ap_control:~# date +%s

1415649167

root@ap_control:~# date +%s

1415649173

root@ap_control:~# date +%s

1415649177

root@ap_control:~# date +%s

1415649182

root@ap_control:~# date +%s

1415649004

root@ap_control:~# date +%s

1415649029

root@ap_control:~# date +%s

1415649066

root@ap_control:~# date +%s

1415649068

root@ap_control:~# date +%s

1415649070

时间如下:

root@ap_control:~# date

Mon Nov 10 19:52:30 UTC 2014

root@ap_control:~# date

Mon Nov 10 19:52:33 UTC 2014

root@ap_control:~# date

Mon Nov 10 19:52:34 UTC 2014

root@ap_control:~# date

Mon Nov 10 19:52:35 UTC 2014

root@ap_control:~# date

Mon Nov 10 19:52:35 UTC 2014

root@ap_control:~# date

Mon Nov 10 19:52:36 UTC 2014

root@ap_control:~# date

Mon Nov 10 19:52:37 UTC 2014

root@ap_control:~# date

Mon Nov 10 19:52:38 UTC 2014

root@ap_control:~# date

Mon Nov 10 19:52:39 UTC 2014

root@ap_control:~# date

Mon Nov 10 19:52:40 UTC 2014

root@ap_control:~# date

Mon Nov 10 19:52:41 UTC 2014

root@ap_control:~# date

Mon Nov 10 19:52:48 UTC 2014

root@ap_control:~# date

Mon Nov 10 19:51:10 UTC 2014

root@ap_control:~# date

Mon Nov 10 19:51:24 UTC 2014

root@ap_control:~# date

Mon Nov 10 19:51:27 UTC 2014

root@ap_control:~# date

Mon Nov 10 19:53:00 UTC 2014

root@ap_control:~# date

Mon Nov 10 19:53:02 UTC 2014

root@ap_control:~# date

Mon Nov 10 19:50:05 UTC 2014

root@ap_control:~# date

Mon Nov 10 19:50:08 UTC 2014

请各位指导

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在AM5728平台上,可以使用设备树和驱动程序来实现定时器捕获PWM的频率和占空比。以下是基本步骤: 1. 配置设备树,指定PWM和定时器的引脚、中断等信息。 2. 在Linux内核中编写驱动程序,该程序将使用所需的设备树信息来初始化PWM和定时器,并将定时器设置为捕获模式。 3. 在驱动程序中使用定时器中断来捕获PWM的频率和占空比,并将结果发送到用户空间。 下面是一个简单的示例代码,可以帮助你了解如何在Linux内核中编写驱动程序来实现这一功能: ``` #include <linux/init.h> #include <linux/module.h> #include <linux/device.h> #include <linux/platform_device.h> #include <linux/of.h> #include <linux/of_gpio.h> #include <linux/of_irq.h> #include <linux/interrupt.h> #include <linux/timer.h> #include <linux/pwm.h> static struct platform_device *pdev; static struct pwm_device *pwm; static int irq; static struct timer_list timer; static void timer_callback(unsigned long data) { struct timeval tv; do_gettimeofday(&tv); unsigned long long now = tv.tv_sec * 1000000 + tv.tv_usec; unsigned long long last = data; unsigned long long delta = now - last; unsigned long long period = delta / 2; unsigned long long duty = pwm_get_duty_cycles(pwm); printk(KERN_INFO "PWM frequency: %llu Hz, duty cycle: %llu%%\n", 1000000 / period, duty * 100 / pwm_get_period(pwm)); timer.expires = jiffies + msecs_to_jiffies(1000); timer.data = now; add_timer(&timer); } static irqreturn_t irq_handler(int irq, void *data) { pwm_capture(pwm); mod_timer(&timer, jiffies + msecs_to_jiffies(500)); return IRQ_HANDLED; } static int pwm_capture_init(void) { struct device_node *np = of_find_node_by_name(NULL, "pwm"); if (!np) return -ENODEV; pwm = pwm_request(np, "pwm_capture"); if (IS_ERR(pwm)) return PTR_ERR(pwm); irq = of_irq_get(np, 0); if (irq < 0) { pwm_free(pwm); return irq; } if (request_irq(irq, irq_handler, IRQF_TRIGGER_RISING, "pwm_capture", NULL)) { pwm_free(pwm); return -EBUSY; } setup_timer(&timer, timer_callback, 0); return 0; } static void pwm_capture_exit(void) { del_timer_sync(&timer); free_irq(irq, NULL); pwm_free(pwm); } module_init(pwm_capture_init); module_exit(pwm_capture_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Your Name"); MODULE_DESCRIPTION("PWM capture driver"); ``` 在此示例中,我们使用了一个定时器来定期捕获PWM的频率和占空比。在中断处理程序中,我们调用pwm_capture函数来捕获PWM的状态,并使用mod_timer函数来调度下一个定时器事件。在定时器回调函数中,我们计算出PWM的频率和占空比,并将结果打印到内核日志中。 请注意,这只是一个简单的示例代码,可能需要进行修改以适应您的具体需求。同时,您还需要根据您的硬件平台和设备树进行适当的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值