電気回路/zynq/自動起動の設定 のバックアップソース(No.4)

更新

[[電気回路/zynq]]

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

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

をしたい。

** 目次 [#seefcc4e]

#contents

* /etc/init.d と /etc/rc5.d を使う [#rfb55e43]

この際 systemd を使ってみようかしら、とも思ったけれど
- https://dev.classmethod.jp/cloud/aws/service-control-use-systemd/
- https://qiita.com/ledmonster/items/5f2e1633d4124cb978fe

何だかややこしいので 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

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

* コメント・質問 [#g1487be2]

#article_kcaptcha


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