开机启动脚本



  • 我创建了一个自己的应用程序自启动脚本,又创建了一个摄像头开机自启动脚本(mjpg_streamer),我发现摄像头的脚本可以运行,应用程序的脚本不运行。用ps命令查看进程,只有mjpg_streamer进程,没有应用程序的进程。

    应用程序脚本:

    #!/bin/sh /etc/rc.common
    # Copyright (C) 2009 OpenWrt.org
    
    START=99
    USE_PROCD=1
    PROG=/usr/bin/intellicar
    
    start_service() {
            procd_open_instance
            procd_set_param command "$PROG"
            procd_close_instance
    }
    
    stop_service(){
            killall $PROG
    }
    
    摄像头的脚本:
    
    #!/bin/sh /etc/rc.common
    # /init.d/startcamera
    START=50
    start()
    {
            mjpg_streamer -i "input_uvc.so -d /dev/video0 -y" -o "output_http.so -w www"
    }
    stop()
    {
            killall startcamera
    }
    

    @mangoo,请帮忙看一下,问题出在哪,谢谢。顺祝端午节安康。



  • 看着应该是没什么问题。只需要注意的是START=99是要等到系统完全启动(jffs2初始化完毕)才执行。
    你看下是不是没有等到jffs2初始化完?



  • 好的,谢谢。



  • @lonfaye 还请测试后回复下,我暂时没时间试验😀



  • 启动脚本问题:

    后来把摄像头的启动脚本改成/etc/init.d/mjpg-streamer start就可以了,应用程序和摄像头都可以启动。

    我发现再init.d里面已经有mjpg-streamer启动脚本,我猜测如果再写一条mjpg_streamer -i "input_uvc.so -d /dev/video0 -y" -o "output_http.so -w www"命令脚本,是不是冲突了(不明白这其中的原理)?因此就改成了上面的命令,即start已有的这个mjpg-streamer启动脚本。

    另外一个问题:

    我在写一个编码器程序,需要一个定时器,当定时器在设定的时间内进入中断后,计算编码器脉冲的个数,从而计算当前motor的速度。因此我写一个定时器中断的驱动,但是在怎么获取MT7688定时器的中断号上卡住了,查mt7688的datasheet和一些资料,都没找到,方便的话,麻烦回复一下这个问题,谢谢。



  • @lonfaye开机启动脚本 中说:

    需要一个定时器,当定时器在设定的时间内进入中断

    https://widora.io/_media/zh/mt7628_datasheet_full.pdf page101



  • 非常感谢,我手上用的是mt7688的datasheet,没有你发的这个版本全。

    问题1:
    我看dts里面 watchdog:

    	watchdog@100 {
    		compatible = "ralink,mt7628an-wdt", "mtk,mt7621-wdt";
    		reg = <0x100 0x30>;
    
    		resets = <&rstctrl 8>;
    		reset-names = "wdt";
    
    		interrupt-parent = <&intc>;
    		interrupts = <24>;
    			
    	};
    

    这个interrupt属性24是中断号吗?如果是,datasheet里面的watchdog的中断号是23,如下:

    2c663a07-0d8e-46ec-a09f-366110f840c6-image.png
    这是为什么?

    问题2:

    假设我要使用timer0中断,源程序如下:
    static int add_irq(int timer,void* data)
    {
    int err=0;
    int irq_number=_timers[timer].irq;//中断号

    debug("Adding IRQ %d handler\n",irq_number);
    
    err=request_irq(irq_number, timer_interrupt, 0, DRV_NAME, data);
    
    if(!err)
    {
    	debug("Got IRQ %d.\n", irq_number);
    	return irq_number;
    }
    else
    {
    	debug("Timer IRQ handler: trouble requesting IRQ %d error %d\n",irq_number, err);
    }
    
    return -1;
    

    }
    irq_number(中断号)可以直接写成24吗,和dts里面的watchdog是否有冲突?

    谢谢。



  • 这是事情有点诡异,从dts(15.05到19.07)看,wdt完全是被配置到了timer0(int24)上,但实际上wdt在正常工作,从
    reg r 10000128 可以读到。

    稍等这两天我查下这个事情。



  • @100 和 reg <100>没错误,内核代码里根据100做的偏移(drivers/watchdog/mt7621_wdt.c):
    TIM截图20200628100254.jpg

    剩下唯一的问题是中断号。



  • 中断号有两种可能:
    1、文档写错了,或者是DTS遗留问题一直没改。
    2、这里写中断没有作用,因为看门狗的复位是从硬件上直接发起复位,不需要经过INTC控制器。并且看门狗的重载也无需中断参与。我已经测试了将DTS这部分中断删除,经测试没有任何影响,看门狗工作正常。



  • 好的,谢谢。


Log in to reply
 

10
Online

922
Users

562
Topics

2.2k
Posts