電気回路/zynq/自動起動の設定

(1848d) 更新


電気回路/zynq

電源投入後に初期化&アプリケーションを自動実行する

  • FPGA ロジックのプログラム
  • 各種 dtso のデバイスツリーへの組み込み
  • 初期化スクリプトの実行
  • アプリケーションの実行

をしたい。

目次

/etc/init.d と /etc/rc5.d を使う

この際 systemd を使ってみようかしら、とも思ったけれど

何だかややこしいので Sysvinit でお茶を濁すことにする。

LANG:console
$ runlevel
 N 5

通常起動時の runlevel は 5 なので、/etc/init.d に起動スクリプトを置いて、 そこへのシンボリックリンクを /etc/rc5.d に作っておく。

/etc/init.d/fpga : https://github.com/osamutake/zynq-utils/tree/master/src/fpga

を用意し、

LANG:console
$ ln -s /etc/init.d/fpga /etc/rc5.d/S00fpga

することで、起動時に

  • /boot/design*.bin を fpga-program する
  • /boot/dtso/*.dtso を dto する
  • /boot/fpga_init.d/* に start を付けて実行する

を行えるようになった。

後は、

/boot/fpga_init.d/10_gpio1

LANG:sh
#!/bin/sh

do_start () {
  if [ ! -e /sys/class/gpio/gpiochip901 ]; then
    echo "ERROR: /sys/class/gpio/gpiochip901 not found."
    exit 1
  fi

  for n in 901 902 903 904 905
  do
    echo $n > /sys/class/gpio/export
  done

}

do_stop () {
  if [ ! -e /sys/class/gpio/gpiochip901 ]; then
    echo "ERROR: /sys/class/gpio/gpiochip901 not found."
    exit 1
  fi

  for n in 901 902 903 904 905
  do
    echo $n > /sys/class/gpio/unexport
  done
}

case $1 in
  start)
    do_start
    ;;
  stop)
    do_stop
    ;;
  *)
    echo "Usage: $0 {start|stop}"
    exit 2
    ;;
esac

/boot/fpga_init.d/80_lcd-show-ip

LANG:sh
#!/bin/sh

do_start () {
  lcd-show-ip
}

do_stop () {
  true
}

case $1 in
  start)
    do_start
    ;;
  stop)
    do_stop
    ;;
  *)
    echo "Usage: $0 {start|stop}"
    exit 2
    ;;
esac

のようにして起動スクリプトを追加していけばいい。

作業履歴へ戻る → 電気回路/zynq

コメント・質問





Counter: 2173 (from 2010/06/03), today: 2, yesterday: 2