1

Raspbian Linux がインストールされた Raspberry Pi 2 モデル B があります。LCD モジュール SC1602a にテキストを出力する Linux サービスを作成して開始する必要があります。次のようになります。

[ これ]

Java 言語 1.8_x86 、Apache Commons Daemon、および jsvc を使用してデーモン サービスを作成します。また、pi4j プロジェクト(これは WiringPi のラッパーです) を使用して、Raspberry Pi のピンを管理します。Java クラス:

public class Application implements Daemon{
   public static void main(String[] a){
      Application app=new Application();
      app.init(null);
      app.start();
      System.in.read();
      application.stop();
      application.destroy();
   }

   public void init(DaemonContext daemonContext) throws Exception {
        LogUtil.info("Init method...");
        GpioController gpio = GpioFactory.getInstance();
        LogUtil.info("GpioController instance created...");
        GpioLcdDisplay lcd;
        lcd = new GpioLcdDisplay(2, 16, RaspiPin.GPIO_00, RaspiPin.GPIO_02, new Pin[]{RaspiPin.GPIO_03, RaspiPin.GPIO_04, RaspiPin.GPIO_05, RaspiPin.GPIO_06});
        LogUtil.info("LCD instance created...");
        lcd.clear();
        lcd.write(new Date().toString());
        LogUtil.info("Init compeleted:");
   }
   public void start() throws Exception {}
   public void stop() throws Exception {}
   public void destroy() {}
}

Maven を使用してアーティファクトをパッケージ化します。WinScp を使用してアーティファクトを Raspberry Pi に移動します。コマンドラインからこのアプリケーションを起動すると、java -jar application.jarうまく動作します。アプリケーションは、LCD モジュールの「hello」文字列に出力します。次に、Linux サービスのようなアプリケーションを起動しようとしました。Raspberry Pi に jsvc をインストールし、スクリプトlcdを作成してフォルダー /etc/init.d/ に移動しました。chmod +x lcdまた、フォルダー /etc/init.d から書き込みました。これは私のスクリプトです:

NAME="lcd"
DESC="Lcd Application"
EXEC="/usr/bin/jsvc"
FILE_PATH="/root/lcd"
JAVA_HOME=/usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt
CLASS_PATH="$FILE_PATH/lcd.jar:/usr/share/java/commons-daemon-1.0.15.jar"
CLASS="com.mycompany.Application"
ARGS=""
USER="root"
PID="/var/run/$NAME.pid"
LOG_OUT="$FILE_PATH/$NAME.out"
LOG_ERR="$FILE_PATH/$NAME.err"
jsvc_exec()
{   
    cd $FILE_PATH
    echo $CLASS_PATH
    sudo $EXEC -home $JAVA_HOME -cp $CLASS_PATH -user $USER -outfile $LOG_OUT -errfile $LOG_ERR -pidfile $PID $1 $CLASS $ARGS
}
case "$1" in
   start)
      echo "Starting service LCD"
      jsvc_exec
      echo "Service started"
   ;;

   //many unimportant information

コマンドを書きservice lcd startます。この方法はうまくいきません。この場合、アプリケーションは LCD モジュールに情報を出力しません。ログファイルを開くと、次の情報が見つかりました。

液晶出力:

2015-08-20 12:59:09.934 [情報] - メソッドの初期化...

液晶エラー:

配線PiSetup: /dev/mem を開けません: 操作は許可されていません 戻り値 1 でサービスを終了します

ご覧のとおり、pi4j ドライバーをロードしようとするとアプリケーションが失敗します。dev/mem ファイルのアクセス ルールを拡張しようとしましたが、それを実行しましたがrwxrwxrwx、サービスはまだ機能していません。

init()また、メソッドからLCDの初期化をオフにしました。サービスはうまく起動するので、サービスはLCDなしでうまく機能します。

誰かが解決策を知っていますか?どうもありがとう

4

0 に答える 0