Changes between Initial Version and Version 1 of epics/bbb/epics_ioc


Ignore:
Timestamp:
11/29/13 14:58:16 (11 years ago)
Author:
michkawa
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • epics/bbb/epics_ioc

    v1 v1  
     1= !BeagleBone Black Serialx4 BOXを使ったMAR-782用IOC = 
     2 
     3[wiki:epics/bbb/seralx4_cape BeagleBone Black Serialx4 Cape]に[wiki:epics/bbb/epics EPICS]をインストールし、その上でIOCを実行したときのメモ。 
     4 
     5== 環境整備 == 
     6 
     7当初、BBBに内蔵されたeMMCに環境を作ってそこでIOCを起動しようとしたが、Serialx4 CapeをつけてBBBを起動するとなぜか追加したSerialが認識されない。調べてみると、Serialx4 CapeをつけるとeMMCのデバイスドライバ(?)と当たってしまい、弾かれてしまうようだった。 
     8 
     9{{{ 
     10[    0.249779] bone-capemgr bone_capemgr.8: Baseboard: 'A335BNLT,0A5C,2713BBBK6962' 
     11[    0.249820] bone-capemgr bone_capemgr.8: compatible-baseboard=ti,beaglebone-black 
     12[    0.280807] bone-capemgr bone_capemgr.8: slot #0: No cape found 
     13[    0.317915] bone-capemgr bone_capemgr.8: slot #1: No cape found 
     14[    0.355023] bone-capemgr bone_capemgr.8: slot #2: No cape found 
     15[    0.385285] bone-capemgr bone_capemgr.8: slot #3: 'RS232C x4 Cape,00A0,KEK cERL CTRL,cape-bone-uartx4' 
     16[    0.385455] bone-capemgr bone_capemgr.8: slot #4: specific override 
     17[    0.385496] bone-capemgr bone_capemgr.8: bone: Using override eeprom data at slot 4 
     18[    0.385525] bone-capemgr bone_capemgr.8: slot #4: 'Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G' 
     19[    0.385656] bone-capemgr bone_capemgr.8: slot #5: specific override 
     20[    0.385691] bone-capemgr bone_capemgr.8: bone: Using override eeprom data at slot 5 
     21[    0.385719] bone-capemgr bone_capemgr.8: slot #5: 'Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI' 
     22[    0.385867] bone-capemgr bone_capemgr.8: slot #6: specific override 
     23[    0.385903] bone-capemgr bone_capemgr.8: bone: Using override eeprom data at slot 6 
     24[    0.385931] bone-capemgr bone_capemgr.8: slot #6: 'Bone-Black-HDMIN,00A0,Texas Instrument,BB-BONELT-HDMIN' 
     25[    0.386482] bone-capemgr bone_capemgr.8: loader: before slot-3 cape-bone-uartx4:00A0 (prio 0) 
     26[    0.386511] bone-capemgr bone_capemgr.8: loader: check slot-3 cape-bone-uartx4:00A0 (prio 0) 
     27[    0.386647] bone-capemgr bone_capemgr.8: loader: before slot-4 BB-BONE-EMMC-2G:00A0 (prio 1) 
     28[    0.386673] bone-capemgr bone_capemgr.8: loader: check slot-4 BB-BONE-EMMC-2G:00A0 (prio 1) 
     29[    0.386797] bone-capemgr bone_capemgr.8: loader: before slot-5 BB-BONELT-HDMI:00A0 (prio 1) 
     30[    0.386822] bone-capemgr bone_capemgr.8: loader: check slot-5 BB-BONELT-HDMI:00A0 (prio 1) 
     31[    0.386884] bone-capemgr bone_capemgr.8: initialized OK. 
     32[    0.388874] OneNAND driver initializing 
     33[    0.390228] bone-capemgr bone_capemgr.8: loader: after slot-3 cape-bone-uartx4:00A0 (prio 0) 
     34[    0.390263] bone-capemgr bone_capemgr.8: slot #3: Requesting part number/version based 'cape-bone-uartx4-00A0.dtbo 
     35[    0.390293] bone-capemgr bone_capemgr.8: slot #3: Requesting firmware 'cape-bone-uartx4-00A0.dtbo' for board-name 'RS232C x4 Cape', version '00A0' 
     36[    0.390696] bone-capemgr bone_capemgr.8: loader: check slot-4 BB-BONE-EMMC-2G:00A0 (prio 1) 
     37[    0.390737] bone-capemgr bone_capemgr.8: loader: check slot-5 BB-BONELT-HDMI:00A0 (prio 1) 
     38[    0.390775] bone-capemgr bone_capemgr.8: loader: before slot-6 BB-BONELT-HDMIN:00A0 (prio 2) 
     39[    0.390798] bone-capemgr bone_capemgr.8: loader: check slot-6 BB-BONELT-HDMIN:00A0 (prio 2) 
     40[    0.390823] bone-capemgr bone_capemgr.8: loader: check slot-6 BB-BONELT-HDMIN:00A0 (prio 2) 
     41}}} 
     42 
     43ここまでは認識してるのに、 
     44 
     45{{{ 
     46[    0.528866] davinci_mdio 4a101000.mdio: davinci mdio revision 1.6 
     47[    0.528890] davinci_mdio 4a101000.mdio: detected phy mask fffffffe 
     48[    0.529890] libphy: 4a101000.mdio: probed 
     49[    0.529920] davinci_mdio 4a101000.mdio: phy[0]: device 4a101000.mdio:00, driver SMSC LAN8710/LAN8720 
     50[    0.530135] Detected MACID = 90:59:af:56:ae:c8 
     51[    0.530248] cpsw 4a100000.ethernet: NAPI disabled 
     52[    0.531798] omap_rtc 44e3e000.rtc: setting system clock to 2000-01-01 00:03:34 UTC (946685014) 
     53[    0.539102] ALSA device list: 
     54[    0.539124]   No soundcards found. 
     55[    0.539756] Waiting for root device /dev/mmcblk0p2... 
     56[   60.501673] bone-capemgr bone_capemgr.8: failed to load firmware 'cape-bone-uartx4-00A0.dtbo' 
     57[   60.510609] bone-capemgr bone_capemgr.8: loader: failed to load slot-3 cape-bone-uartx4:00A0 (prio 0) 
     58[   60.520282] bone-capemgr bone_capemgr.8: loader: check slot-6 BB-BONELT-HDMIN:00A0 (prio 2) 
     59[   60.520310] bone-capemgr bone_capemgr.8: loader: check slot-5 BB-BONELT-HDMI:00A0 (prio 1) 
     60[   60.520327] bone-capemgr bone_capemgr.8: loader: after slot-5 BB-BONELT-HDMI:00A0 (prio 1) 
     61[   60.520354] bone-capemgr bone_capemgr.8: slot #5: Requesting firmware 'cape-boneblack-hdmi-00A0.dtbo' for board-name 'Bone-Black-HDMI', version '00A0' 
     62[   60.520378] bone-capemgr bone_capemgr.8: slot #5: dtbo 'cape-boneblack-hdmi-00A0.dtbo' loaded; converting to live tree 
     63[   60.520736] bone-capemgr bone_capemgr.8: slot #5: #4 overlays 
     64[   60.521835] bone-capemgr bone_capemgr.8: loader: check slot-4 BB-BONE-EMMC-2G:00A0 (prio 1) 
     65[   60.521856] bone-capemgr bone_capemgr.8: loader: after slot-4 BB-BONE-EMMC-2G:00A0 (prio 1) 
     66[   60.521878] bone-capemgr bone_capemgr.8: slot #4: Requesting firmware 'cape-bone-2g-emmc1.dtbo' for board-name 'Bone-LT-eMMC-2G', version '00A0' 
     67[   60.521896] bone-capemgr bone_capemgr.8: slot #4: dtbo 'cape-bone-2g-emmc1.dtbo' loaded; converting to live tree 
     68[   60.522475] bone-capemgr bone_capemgr.8: slot #4: #2 overlays 
     69[   60.523096] of_get_named_gpio_flags: can't parse gpios property 
     70[   60.523110] of_get_named_gpio_flags: can't parse gpios property 
     71[   60.523120] of_get_named_gpio_flags: can't parse gpios property 
     72[   60.523152] gpio-rctrl rstctl.3: gpio_rctrl_request eMMC_RSTn 
     73[   60.523186] omap_hsmmc mmc.11: Got rstctl (gpio:#0 name eMMC_RSTn) label:eMMC_RSTn 
     74[   60.523198] gpio-rctrl rstctl.3: gpio_rctrl_deassert eMMC_RSTn 
     75[   60.523456] edma-dma-engine edma-dma-engine.0: allocated channel for 0:3 
     76[   60.523503] edma-dma-engine edma-dma-engine.0: allocated channel for 0:2 
     77}}} 
     78 
     791分待ってエラーになってる。'''orz'''[[br]] 
     80今までは、開発用と考えてmicroSDカード上で開発していたので気付かなかった。[[br]] 
     81対応策が思いつかないので、今回はeMMCは諦め、microSDカードに環境を作ることにしたら、今まで通り問題なくSerialを認識して動作した。 
     82 
     83=== nfs client === 
     84 
     85IOCファイルはローカルに置かずにnfs server上に置いておいて、起動時に nfs mount したファイルを実行するようにした。[[br]] 
     86デフォルトではnfs clientが入っていないので、パッケージをインストール。 
     87 
     88{{{ 
     89root@beaglebone:~# opkg install nfs-utils-client 
     90}}} 
     91 
     92パッケージインストール後、fstabにnfs mountする箇所を記述。 
     93 
     94{{{ 
     95root@beaglebone:~# more /etc/fstab 
     96rootfs               /                    auto       defaults              1  1 
     97proc                 /proc                proc       defaults              0  0 
     98devpts               /dev/pts             devpts     mode=0620,gid=5       0  0 
     99tmpfs                /tmp                 tmpfs      defaults              0  0 
     100172.28.64.115:/raid0/data/_NAS_NFS_Exports_/cerl /cerl nfs defaults,nolock 0  0 
     101}}} 
     102 
     103実際にmountできるか実験。 
     104 
     105{{{ 
     106root@beaglebone:~# mount -a 
     107root@beaglebone:~# df 
     108Filesystem                                         1K-blocks       Used   Available Use% Mounted on 
     109rootfs                                               3369444    1728320     1466636  55% / 
     110/dev/root                                            3369444    1728320     1466636  55% / 
     111devtmpfs                                              255148          0      255148   0% /dev 
     112tmpfs                                                 255280          0      255280   0% /dev/shm 
     113tmpfs                                                 255280        232      255048   1% /run 
     114tmpfs                                                 255280          0      255280   0% /sys/fs/cgroup 
     115tmpfs                                                 255280        232      255048   1% /etc/machine-id 
     116tmpfs                                                 255280          0      255280   0% /tmp 
     117172.28.64.115:/raid0/data/_NAS_NFS_Exports_/cerl 11707011072 1452805120 10254205952  13% /cerl 
     118}}} 
     119 
     120mount できた。 
     121 
     122== IOC == 
     123 
     124IOCは[wiki:epics/streamdevice/Aloka_MAR_783/ioc 以前使っていたもの]をBBB上の環境でコンパイルしたら、そのまま動作した。 
     125 
     126 
     127== IOC の自動起動 == 
     128 
     129BBB Serialx4 BOXが起動したら自動的にIOCが立ち上がってくれないと面倒なので、その設定を行う。[[br]] 
     130RedHatやcentosなどは、/etc/rc*に設定すると自動的に立ち上がってくれるが、BBBのdefault OSである Angstrom Linux はちょっと特殊で、systemctlというコマンドでシャットダウンやserviceの追加削除等を行うらしい。でも、設定ファイル自体は、/etc/init.dに書けば自動的に追加されるのでそこに記述。 
     131 
     132{{{ 
     133#! /bin/sh 
     134# 
     135# epics 
     136 
     137cERLNFSMountFlag=`/bin/df | /bin/grep cerl | /usr/bin/wc -l` 
     138 
     139cERLmount(){ 
     140    if [ $cERLNFSMountFlag -eq 0 ]; then 
     141        echo -n "Mount cERL NFS disk:" 
     142        /bin/mount -a 
     143        echo "done" 
     144    else 
     145        echo "Already cERL NFS disk mountd." 
     146    fi 
     147} 
     148startioc(){ 
     149        echo -n "Starting ioc: " 
     150        if [ -e /home/root/ioc_start.sh ]; then 
     151                /home/root/ioc_start.sh 
     152        fi 
     153        echo "done" 
     154} 
     155stopioc(){ 
     156        echo -n "Stopping ioc: " 
     157        if [ -e /home/root/ioc_stop.sh ]; then 
     158                /home/root/ioc_stop.sh 
     159        fi 
     160        echo "done" 
     161} 
     162 
     163case "$1" in 
     164  start) 
     165        cERLmount 
     166        startioc 
     167        ;; 
     168  stop) 
     169        stopioc 
     170        ;; 
     171  restart) 
     172        stopioc 
     173        cERLmount 
     174        startioc 
     175        ;; 
     176  reload) 
     177        stopioc 
     178        cERLmount 
     179        startioc 
     180        ;; 
     181  *) 
     182        echo "Usage: epics { start | stop | restart | reload }" >&2 
     183        exit 1 
     184        ;; 
     185esac 
     186 
     187exit 0 
     188 
     189}}} 
     190 
     191もう一つの問題としては、通常/etc/fstabにnfs mountする記述があれば自動的にnfs mountされるはずだが、なぜかmountされないので同じスクリプトに入れておいた。 
     192 
     193{{{ 
     194[    0.552787] EXT4-fs (mmcblk0p2): INFO: recovery required on readonly filesystem 
     195[    0.552804] EXT4-fs (mmcblk0p2): write access will be enabled during recovery 
     196[    2.339425] EXT4-fs (mmcblk0p2): recovery complete 
     197[    2.343749] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null) 
     198[    2.343820] VFS: Mounted root (ext4 filesystem) readonly on device 179:2. 
     199[    2.352313] devtmpfs: mounted 
     200[    2.352594] Freeing init memory: 264K 
     201[    2.585729] systemd[1]: systemd 196 running in system mode. (+PAM -LIBWRAP -AUDIT -SELINUX +IMA +SYSVINIT -LIBCRYPTSETUP +GCRYPT +ACL +XZ; angstrom) 
     202[    2.633741] systemd[1]: Inserted module 'autofs4' 
     203[    2.635073] systemd[1]: Set hostname to <beaglebone>. 
     204[    2.637823] systemd[1]: Initializing machine ID from random generator. 
     205[    2.638123] systemd[1]: Installed transient /etc/machine-id file. 
     206[    2.880724] systemd[1]: Cannot add dependency job for unit nfs_client.service, ignoring: Unit nfs_client.service failed to load: No such file or directory. See system logs and 'systemctl status nfs_client.service' for details. 
     207[    2.881977] systemd[1]: Starting Forward Password Requests to Wall Directory Watch. 
     208[    2.882440] systemd[1]: Started Forward Password Requests to Wall Directory Watch. 
     209[    2.882552] systemd[1]: Expecting device dev-ttyO0.device... 
     210}}} 
     211 
     212この起動スクリプトも実行はされているけどなぜかmountされていないので、しつこくcronに起動時のみ実行するように記述。 
     213 
     214{{{ 
     215@reboot (/bin/sleep 20; /bin/systemctl restart epics.service) 
     216}}} 
     217 
     218これでやっと起動時にnfs mountされるようになった。[[br]] 
     219ちなみに、epicsの起動スクリプトは、 
     220 
     221{{{ 
     222#!/bin/sh -x 
     223 
     224EPICS_EMBED_DIR="/cerl/epics/embed/BeagleBoneBlack" 
     225EPICS_EMBED_ENV=$EPICS_EMBED_DIR/etc/setenvR314.12.3-linux-arm-bbb.sh 
     226# set Boot IOC st.cmd 
     227IOC_ST_CMD_PATH=$EPICS_EMBED_DIR/app/radmon/iocBoot/iocAloka_MAR783 
     228IOC_ST_CMD1=st1.cmd 
     229IOC_ST_CMD2=st2.cmd 
     230SCR_NAME1=radmon1 
     231SCR_NAME2=radmon2 
     232 
     233# set epics environment 
     234if [ -e $EPICS_EMBED_ENV ]; then 
     235    . $EPICS_EMBED_ENV 
     236fi 
     237 
     238PWD = `pwd` 
     239cd $IOC_ST_CMD_PATH 
     240 
     241if [ -e $IOC_ST_CMD_PATH/$IOC_ST_CMD1 ]; then 
     242    screen -AmdS $SCR_NAME1 ./$IOC_ST_CMD1 
     243    sleep 2 
     244fi 
     245 
     246if [ -e $IOC_ST_CMD_PATH/$IOC_ST_CMD2 ]; then 
     247    screen -AmdS $SCR_NAME2 ./$IOC_ST_CMD2 
     248fi 
     249 
     250cd $PWD 
     251 
     252}}} 
     253 
     254これで、BBB Serialx4 BOXが起動すると自動的にIOCが起動するようになった。