搜索
bottom↓
回复: 27

请教NUC980的Linux上休眠唤醒的问题,谢谢。

[复制链接]
(3823471)

出0入16汤圆

发表于 2021-6-18 00:50:10 | 显示全部楼层 |阅读模式
1、nuc980的Linux上,通过设置rtc 的alarm时间来唤醒系统。
2、通过echo mem > /sys/power/state 命令来休眠。
3、每次设置完rtc的alarm时间后,调用echo mem > /sys/power/state 命令,进入休眠,等待alarm时间到了之后,唤醒系统。
4、现在遇到的问题运行一段时间后,随机:设置alarm时间会失败
具体如下:
retval = ioctl(fd, RTC_ALM_SET, &rtc_tm);
              printf("ioctl=%d\n",retval);
              if (retval <0) {
                printf("ioctl RTC_ALM_SET  faild!!!\n");
                close(fd);
                exit(0);
            }
追踪打印:
ioctl=-1
ioctl RTC_ALM_SET faild!!!





******** RTC Test Demo ***********
Test second alarm(hour,min,sec)..

Select :
read current time is: 2005-01-01 06:59:32

ioctl=0
read current alarm time is: 2005-01-01 06:59:42

Waiting 10 seconds for alarm...

PM: Syncing filesystems ... done.
Freezing user space processes ... (elapsed 0.001 seconds) done.
Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
Suspending console(s) (use no_console_suspend to debug)
PM: suspend of devices complete after 33.783 msecs
PM: late suspend of devices complete after 3.491 msecs
PM: noirq suspend of devices complete after 3.466 msecs
Wake up source: 00000000 00000080
PM: noirq resume of devices complete after 2.716 msecs
PM: early resume of devices complete after 2.908 msecs
PM: resume of devices complete after 63.083 msecs
Restarting tasks ...

Alarm interrupt come on,the func running!
done.
Test second alarm(hour,min,sec) test OK!

******** RTC Test Demo ***********
Test second alarm(hour,min,sec)..

Select :
read current time is: 2005-01-01 06:59:50

ioctl=-1
ioctl RTC_ALM_SET faild!!!
PM: Syncing filesystems ... done.
Freezing user space processes ... (elapsed 0.001 seconds) done.
Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
Suspending console(s) (use no_console_suspend to debug)


不知道啥问题,哪位兄弟在这个平台上玩过这个功能,给指点下。

我问了新塘的技术支持工程师,还没回复。
(3790263)

出0入0汤圆

发表于 2021-6-18 10:03:38 | 显示全部楼层
这输入这个命令直接提示错误,是什么原因
(3789164)

出0入16汤圆

 楼主| 发表于 2021-6-18 10:21:57 | 显示全部楼层
liurangzhou 发表于 2021-6-18 10:03
这输入这个命令直接提示错误,是什么原因

输入命令没有提示错误啊,是设置rtc时间,程序打印有错误。
(3776994)

出0入0汤圆

发表于 2021-6-18 13:44:47 | 显示全部楼层
redworlf007 发表于 2021-6-18 10:21
输入命令没有提示错误啊,是设置rtc时间,程序打印有错误。

我是说我的
(3774052)

出0入16汤圆

 楼主| 发表于 2021-6-18 14:33:49 来自手机 | 显示全部楼层
liurangzhou 发表于 2021-6-18 13:44
我是说我的

你内核里面没开启那个功能吧
(3772725)

出0入0汤圆

发表于 2021-6-18 14:55:56 | 显示全部楼层
redworlf007 发表于 2021-6-18 14:33
你内核里面没开启那个功能吧

要开启哪个功能,我感觉是开启的
(3769449)

出0入16汤圆

 楼主| 发表于 2021-6-18 15:50:32 | 显示全部楼层
liurangzhou 发表于 2021-6-18 14:55
要开启哪个功能,我感觉是开启的

你在bsp手册里面搜这个 echo mem > /sys/power/state,按说明配置。
(3767132)

出0入16汤圆

 楼主| 发表于 2021-6-18 16:29:09 | 显示全部楼层
liurangzhou 发表于 2021-6-18 14:55
要开启哪个功能,我感觉是开启的

Power management options --->
  • Suspend to RAM and standby

    我查了下,内核里面这个要打开。
  • (3761678)

    出0入0汤圆

    发表于 2021-6-18 18:00:03 | 显示全部楼层
    没弄过,不过这个看不出来什么东西,如果你可以改程序的话,可以增加一行perror,打印一下全局errono,根据这个错误代码去内核源码里找一下原因。
    (3760751)

    出0入16汤圆

     楼主| 发表于 2021-6-18 18:15:30 | 显示全部楼层
    thepresent 发表于 2021-6-18 18:00
    没弄过,不过这个看不出来什么东西,如果你可以改程序的话,可以增加一行perror,打印一下全局errono,根据 ...

    我正在内核驱动里面加打印看看。
    (3752036)

    出0入16汤圆

     楼主| 发表于 2021-6-18 20:40:45 | 显示全部楼层
    一路追,内核驱动在这里随机失败。。。还得继续追下去。。。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    (3750559)

    出0入16汤圆

     楼主| 发表于 2021-6-18 21:05:22 | 显示全部楼层
    这里超时了。。。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    (3712049)

    出100入101汤圆

    发表于 2021-6-19 07:47:12 来自手机 | 显示全部楼层
    lz不是搞硬件?这也是硬件工程师的活?
    (3705304)

    出0入16汤圆

     楼主| 发表于 2021-6-19 09:39:37 来自手机 | 显示全部楼层
    fengyunyu 发表于 2021-6-19 07:47
    lz不是搞硬件?这也是硬件工程师的活?

    软件说这个是系统的事情,和软件没关系。
    (3682784)

    出290入263汤圆

    发表于 2021-6-19 15:54:57 | 显示全部楼层
    本帖最后由 armstrong 于 2021-6-19 15:56 编辑
    redworlf007 发表于 2021-6-19 09:39
    软件说这个是系统的事情,和软件没关系。


    你们的软件部门只把ARM当作PC来用,连OS和bsp都不管?这种软件开发部门还真是无能!是不是工资还比搞系统的高?
    (3651512)

    出0入16汤圆

     楼主| 发表于 2021-6-20 00:36:09 来自手机 | 显示全部楼层
    armstrong 发表于 2021-6-19 15:54
    你们的软件部门只把ARM当作PC来用,连OS和bsp都不管?这种软件开发部门还真是无能!是不是工资还比搞系统 ...

    哎,有啥办法呢。
    (2832167)

    出0入16汤圆

     楼主| 发表于 2021-6-29 12:11:54 | 显示全部楼层
    结贴,搞好了。
    setup_alarm(fd, 5, alarm_func);
    printf("1234567890\n");
    sleep(5);

    设置完闹钟后,睡一会就好了,两次设置闹钟时间,要有间隔。
    (2809772)

    出0入0汤圆

    发表于 2021-6-29 18:25:09 | 显示全部楼层
    redworlf007 发表于 2021-6-29 12:11
    结贴,搞好了。
    setup_alarm(fd, 5, alarm_func);
    printf("1234567890\n");

    楼主你好,根据你在一楼的描述,我理解的是先使用ioctl设定闹钟,然后紧接着通过echo mem > /sys/power/state 命令,进入休眠。然后被唤醒之后传输数据,然后再次设定闹钟后休眠...循环。
    现在你使用了setup_alarm函数,我看了一下官方demo的源码,这里面是设定了闹钟之后,启用中断,然后开始阻塞读rtc,到了时间之后再执行alarm_func,这个过程中没有看到进入休眠的指令啊,你是修改了demo的源码了吗?
    (2795805)

    出0入16汤圆

     楼主| 发表于 2021-6-29 22:17:56 | 显示全部楼层
    本帖最后由 redworlf007 于 2021-6-29 22:23 编辑
    thepresent 发表于 2021-6-29 18:25
    楼主你好,根据你在一楼的描述,我理解的是先使用ioctl设定闹钟,然后紧接着通过echo mem > /sys/power/s ...


    我是两个进程,A进程设置好闹钟后,启动B进程,B进程里面运行业务程序,业务程序跑完了,调用休眠指令。
    (2757607)

    出0入0汤圆

    发表于 2021-6-30 08:54:34 | 显示全部楼层
    redworlf007 发表于 2021-6-29 22:17
    我是两个进程,A进程设置好闹钟后,启动B进程,B进程里面运行业务程序,业务程序跑完了,调用休眠指令。 ...


    上面的代码是我看到的官方demo中的setup_alarm的定义,其中在@1处设定了闹钟之后,@2处的代码是会一直阻塞到闹钟报警的。这样的话,如果在A进程中先通过setup_alarm设定闹钟,然后启动B进程的话,启动B进程的时候闹钟已经报警过了啊。所以你是修改了setup_alarm函数?或者是在setup_alarm函数之前先启动了B进程?还是我理解的有问题?谢谢
    ps:这段代码发不上去,提示有敏感词,只能贴图片了。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    (2731988)

    出0入16汤圆

     楼主| 发表于 2021-6-30 16:01:33 | 显示全部楼层
    你看看,我这个这里加的启动B程序。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    (2726390)

    出0入0汤圆

    发表于 2021-6-30 17:34:51 | 显示全部楼层
    redworlf007 发表于 2021-6-30 16:01
    你看看,我这个这里加的启动B程序。

    明白了,确实跟我猜的一样,你修改了setup_alarm函数的代码。谢谢了。
    (2726267)

    出0入16汤圆

     楼主| 发表于 2021-6-30 17:36:54 | 显示全部楼层
    thepresent 发表于 2021-6-30 17:34
    明白了,确实跟我猜的一样,你修改了setup_alarm函数的代码。谢谢了。

    我是二把刀,我瞎试的,反正能用,哈哈。
    我从23号0点,测到现在了,暂时没问题,还在跑着。
    (1947913)

    出0入16汤圆

     楼主| 发表于 2021-7-9 17:49:28 | 显示全部楼层
    2块板子 测试了17天了,正常休眠唤醒,没有死机。
    (1946597)

    出0入0汤圆

    发表于 2021-7-9 18:11:24 来自手机 | 显示全部楼层
    休眠后核心板耗电多少?
    (1944678)

    出0入16汤圆

     楼主| 发表于 2021-7-9 18:43:23 | 显示全部楼层
    jetchenxg2021 发表于 2021-7-9 18:11
    休眠后核心板耗电多少?

    最低0.2W。
    (1283578)

    出100入101汤圆

    发表于 2021-7-17 10:21:43 | 显示全部楼层
    redworlf007 发表于 2021-6-19 09:39
    软件说这个是系统的事情,和软件没关系。


    看以前回帖,你们软件工程师使用python开发linux下的应用。请问下,这些软件工程师对linux的系统特性要很了解么?
    (1253740)

    出0入16汤圆

     楼主| 发表于 2021-7-17 18:39:01 来自手机 | 显示全部楼层
    fengyunyu 发表于 2021-7-17 10:21
    看以前回帖,你们软件工程师使用python开发linux下的应用。请问下,这些软件工程师对linux的系统特性要很 ...

    嵌入式的Linux,要考虑掉电  硬盘读写寿命问题,还要考虑外设响应情况,主要得熟悉硬件外设的情况,还要了解Python那些库,是怎么实现的。比如Python的写文件的库函数,是先把文件里面清空,再把要写的内容和以前里面的内容写入,遇到磁盘空间不足时,擦除后就写入不了了,那个文件就被清空了,如果对开机脚本这么操作,就会出现系统无法启动的问题。其实和用什么语言关系不大,只要看在嵌入式上的开发经验。说实话,绝大多数用Python开发的程序员,对嵌入式里面软硬件的工作原理狗屁不通。
    回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号 )

    GMT+8, 2021-8-1 06:54

    © Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

    快速回复 返回顶部 返回列表