Sept 28, 2000 onl50t: Solaris 2.6 cc ドライバのデバッグ. cc ドライバのデバッグ#05(その10) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (http://www-online.kek.jp/~inoue/CAMAC/ onl50t-sol2.6/Desktop/debug-list-step10.txt) 高エネルギー加速器研究機構 素粒子原子核研究所 物理、オンライングループ 井上 栄二 (1). 現状確認 (A). 株式会社ロジックハウスの白田様より SPARC CPU-50T を借用した。 (B). FORCE,CPU-50(UltraSPARC-IIi 300MHz)、に Solaris2.6 のシステムを インストールした。 (C). /etc の下の各設定、および /export/home の作成をやった。 (D). "Solaris2.6 Hardware: 5/98 SMCC Desktop 日本語版 SPARC版"では ディスクレス・クライアントを設定することはできないことを確認した。 (E). CPU-50T に Solaris2.6用の VMEドライバ、FRCvme-2.3.1 をインストール した。 (F). onl50t に ccドライバをインストールした。 (G). サンプル・プログラムを実行した。 (1). cam1、シングル・アクション 24ビット camac read/write の実行 NG. システムはパニックを起こしてリブートしてしまう。 (2). cam3、camac LAM割り込み処理の実行 NG. システムはパニックを起こしてリブートしてしまう。 (3). cam2、ブロック転送 16ビット read/write の実行 ok. 正常に実行できた。 (4). cam2、ブロック転送 24ビット read/write の実行 ok. 正常に実行できた。 (H). クラッシュ時の savecoreファイルを入手してデバッグを始めた。 (I). cam1プログラムのデバッグ、icc_ioctlルーチンを修正した。 ok. cam1プログラムは正常に実行できた。 (J). cam3プログラムのデバッグを始めた。 camac_s()ルーチンの中で "cc->k->dhr = *dat;" を実行したところでエラーになっている。 message構造体をcc_device構造体の中に入れてみたが改善されない。 (K). cam3プログラムは正常に動作できるようになった。 (L). cam3プログラムのデバッグ時に付加したゴミをはずして最終的な動作確認 をやった。 ok. (M). onl50t 上でデバッグしたcamacドライバをfrc7v-cl2 上で動作確認した。 ok. (N). onl50t 上でデバッグしたcamacドライバを onl7v2、スタンドアロン Solaris2.6 上で動作確認した。 ok. (O). onl50t 上でデバッグしたcamacドライバを frc8vt、ディスクレス・サーバ Solaris2.6 上で動作確認した。 ok. (P). onl50t 上でデバッグしたcamacドライバを onl8v1、スタンドアロン Solaris2.6 上で動作確認した。 ok. (Q). onl50t 上でデバッグしたcamacドライバを onl5v4、スタンドアロン Solaris2.6 上で動作確認した。 ok. (R). スタンドアロン Solaris2.6、onl50t 上で、シングルアクションの実行 速度を測定時に、camac_s()コールを連続実行すると不正割り込みが かかってしまった。 (S). camac_s()コールを連続実行しても不正割り込みはかからないように なった。 ok. -------------------- リスト処理 (A). 公開版のcamacドライバ、"FORCE-50T-sol2.6" を使ってリスト処理の テストを始める。 (B). KEKリスト処理で camacシングルアクション read/write、LAM割り込み 処理、DMA camacブロック転送の現状確認をした。 (C). Kineticリスト処理で camacシングルアクション read の現状確認をした。 (D). KEKリスト処理、Kineticリスト処理両方をとおしてソースプログラム上で 明らかに問題と思われる部分を修正した。 (E). KEKリスト処理でシングルアクション read/write が正常に実行できて いることを確認した。 (F). KEKリスト処理で DMA camacブロック転送 read が正常に実行できて いることを確認した。 (G). KEKリスト処理で LAM割り込み処理が が正常に実行できていることを確認 した。 (H). KEKリスト処理全般に関連する関数の動作を確認した。 (I). Kineticリストで camacにアクセスする関数が正常に動作するのを確認 した。 (J). Kineticリスト処理で リスト・ファイルのセーブおよびロードができる ことを確認した。 さらに KEKリスト処理の中からKineticリスト処理を 実行できることを確認した。 (2). ここでやるべきこと リスト処理のデバッグ用に付加してあるトレースのための文をはずして動作 確認する。 (3). cc.cファイルの修正 onl50t[104]% vi cc.c : static int cc_write(dev_t dev, struct uio *uio, cred_t *cred_p) { /* register struct cc_device *cc = &ccdevice[0]; */ register struct cc_device *cc; : /* cmn_err(CE_NOTE," ccwrite: cc->klist1[%d].wc = 0x%x", cc->a_reg, cc->klist1 [cc->a_reg].wc); */ cc->ptr_kdata = cc->data_area; : uios->uio_resid = uio->uio_resid; /* cmn_err(CE_NOTE," cc_write: 1 copyin: uio->uio_iov = 0x%x", uio->uio_iov); cmn_err(CE_NOTE," cc_write: 1 copyin: iov->iov_base = 0x%x", iov->iov_base); */ switch (cc->message.command) { : /* cmn_err(CE_NOTE," cc_write: CC_CMD_DOBLOCK: cc->ptr_udata = 0x%x", cc->ptr_u data); cmn_err(CE_NOTE," cc_write: CC_CMD_DOBLOCK: iov->iov_base = 0x%x", iov->iov_ base); */ : cc->iosb.devinfo = cc->camac_qx + (cc->camac_qx << 16); /* cmn_err(CE_NOTE," ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x%x", cc->ios b.status); cmn_err(CE_NOTE," ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x%x", cc- >iosb.ret_length); cmn_err(CE_NOTE," ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x%x", cc->iosb .s_reg); cmn_err(CE_NOTE," ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0x%x", cc->io sb.devinfo); */ copyout((caddr_t)&cc->iosb, (caddr_t)cc->message.ptr_iosb, : code = 0x00FF & cc->ptr_list[0]; /* cmn_err(CE_NOTE," cc_write: CC_CMD_LOADDOLIST: in while, code = 0x%x", code) ; cmn_err(CE_NOTE," cc_write: CC_CMD_LOADDOLIST: in while, cc->ptr_udata = 0x% x", cc->ptr_udata); */ instruction_call = instruction[code]; : /* cmn_err(CE_NOTE," ccwrite: CC_CMD_ADDKLIST: cc->klist1[%d].wc = 0x%x", cc->a _reg, cc->klist1[cc->a_reg].wc); */ break; : /* cmn_err(CE_NOTE," ccwrite: CC_CMD_DELKLIST: klname = %s", klname); */ : case CC_CMD_EXEKLIST: /* cmn_err(CE_NOTE," ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x%x", cc->kl ist1[0].wc); */ copyin((caddr_t)cc->message.klname, (caddr_t)klname, sizeof(klname)); : cc->len_udata = 0; /* cmn_err(CE_NOTE," cc_write: CC_CMD_EXEKLIST: cc->ptr_udata = 0x%x", cc->ptr_ udata); cmn_err(CE_NOTE," cc_write: CC_CMD_EXEKLIST: iov->iov_base = 0x%x", iov->iov _base); */ : /* cmn_err(CE_NOTE," ccwrite: CC_CMD_EXEKLIST: cc->klist1[0].wc = 0x%x", cc->kl ist1[0].wc); */ klexe(unit, klname); : cc->iosb.devinfo = cc->camac_qx + (cc->camac_qx << 16); /* cmn_err(CE_NOTE," ccwrite: CC_CMD_EXEKLIST: cc->iosb.status = 0x%x", cc->ios b.status); cmn_err(CE_NOTE," ccwrite: CC_CMD_EXEKLIST: cc->iosb.ret_length = 0x%x", cc- >iosb.ret_length); cmn_err(CE_NOTE," ccwrite: CC_CMD_EXEKLIST: cc->iosb.s_reg = 0x%x", cc->iosb .s_reg); cmn_err(CE_NOTE," ccwrite: CC_CMD_EXEKLIST: cc->iosb.devinfo = 0x%x", cc->io sb.devinfo); cmn_err(CE_NOTE," ccwrite: CC_CMD_EXEKLIST: cc->k->mtc = 0x%x", cc->k->mtc); */ copyout((caddr_t)&cc->iosb, (caddr_t)cc->message.ptr_iosb, : static void cc_timeout(caddr_t unit) { /* register struct cc_device *cc = &ccdevice[0]; */ register struct cc_device *cc; : /* cmn_err(CE_NOTE," CC_timeout: enter"); */ : static u_int cc_intr(int unit) { /* register struct cc_device *cc = &ccdevice[0]; */ register struct cc_device *cc; : /* cmn_err(CE_NOTE," CC_intr: cc->interrupt = 0x%x", cc->interrupt); */ : /* uio = cc->uio; cmn_err(CE_NOTE," cc_intr: 0x%x %d %d %d %d %d", uio->uio_iov->iov_base, uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); copyin((caddr_t)uio->uio_iov->iov_base, (caddr_t)cc->data_area, 10*sizeo f(u_short)); cmn_err(CE_NOTE," cc_intr: contents of uio->uio_iov->iov_base =0x%x, 0x% x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x\n", cc->data_area[0],cc->data_ area[1],cc->data_area[2],cc->data_area[3],cc->data_area[4],cc->data_area[5],cc-> data_area[6],cc->data_area[7],cc->data_area[8],cc->data_area[9]); */ : static int cc_ioctl(dev_t dev, int cmd, int arg, int flag, cred_t *cred_p, int *rval_p) { /* register struct cc_device *cc = &ccdevice[0]; */ register struct cc_device *cc; : /* cmn_err(CE_NOTE," cc_ioctl: CCIOC_WAIT_LAM: before cv_wait_sig: cc->data1 = 0x%x", cc->data1); */ if (cv_wait_sig(&cc->cv, &cc->mutex) == 0) { : mutex_exit(&cc->mutex); /* end MUTEX */ /* cmn_err(CE_NOTE," cc_ioctl: CCIOC_WAIT_LAM: after cv_wait_sig"); */ : case CCIOC_ENABLE_LAM : /* cmn_err(CE_NOTE," ioctl: CCIOC_ENABLE_LAM: cc->data1 = 0x%x", cc->data1); */ : sdat |= 0x100; /* cmn_err(CE_NOTE," ioctl: CCIOC_ENABLE_LAM: sdat = 0x%x", sdat); */ : cc_write24(int unit) /* struct cc_device *cc; E.Inoue */ { /* E.Inoue */ struct cc_device *cc; : cc->data1 = Tolong(2); /* cmn_err(CE_NOTE," cc_write24: cc->ptr_list[2] = 0x%x", cc->ptr_list[2]); cmn_err(CE_NOTE," cc_write24: cc->data1 = 0x%x", cc->data1); */ : cc_enbint(int unit) /* struct cc_device *cc; E.Inoue */ { /* E.Inoue */ struct cc_device *cc; : /* cmn_err(CE_NOTE," cc_enbint: enter"); */ #ifdef CC_SPARC_LIST_EXTENSION : cc->data1 = 0xFFFFFF; #endif /* cmn_err(CE_NOTE," cc_enbint: cc->data1 = 0x%x",cc->data1); */ : sdat |= 0x0100; /* cmn_err(CE_NOTE," cc_enbint: sdat = 0x%x",sdat); */ : int cc_move32_a(int unit) /* struct cc_device *cc; E.Inoue */ { /* E.Inoue */ struct cc_device *cc; : cc->a_reg = Tolong(1); /* cmn_err(CE_NOTE," cc_move32_a: cc->a_reg = 0x%x", cc->a_reg); */ return 0; : int cc_load_timer(int unit) /* struct cc_device *cc; E.Inoue */ { /* E.Inoue */ struct cc_device *cc; : /* cmn_err(CE_NOTE," cc_load_timer: cc->klist1[%d].name = %s", cc->a_reg, cc->k list1[cc->a_reg].name); cmn_err(CE_NOTE," cc_load_timer: cc->klist1[0] = 0x%x", cc->klist1[0]); cmn_err(CE_NOTE," cc_load_timer: before flush_buf #1: cc->ptr_udata = 0x%x", cc->ptr_udata); cmn_err(CE_NOTE," cc_load_timer: cc->now_wc = 0x%x", cc->now_wc); */ flush_buf(unit); /* cmn_err(CE_NOTE," cc_load_timer: after flush_buf #1: cc->ptr_udata = 0x%x", cc->ptr_udata); cmn_err(CE_NOTE," cc_load_timer: cc->now_wc = 0x%x", cc->now_wc); */ : /* cmn_err(CE_NOTE," cc_load_timer: cc->a_reg = 0x%x", cc->a_reg); */ : /* cmn_err(CE_NOTE," cc_load_timer: klexe return value = 0x%x", klexe(unit, cc- >klist1[cc->a_reg].name)); */ klexe(unit, cc->klist1[cc->a_reg].name); /* cmn_err(CE_NOTE," cc_load_timer: before flush_buf #2: cc->ptr_udata = 0x%x", cc->ptr_udata); cmn_err(CE_NOTE," cc_load_timer: cc->now_wc = 0x%x", cc->now_wc); */ : /* cmn_err(CE_NOTE," cc_load_timer: after flush_buf #2: cc->ptr_udata = 0x%x", cc->ptr_udata); cmn_err(CE_NOTE," cc_load_timer: cc->now_wc = 0x%x", cc->now_wc); */ cc->ptr_udata += cc->now_wc + 2; /* cmn_err(CE_NOTE," cc_load_timer: increment cc->ptr_udata: cc->ptr_udata = 0x %x", cc->ptr_udata); */ return 0; : kladd(int unit, char *name) /* struct cc_device *cc; : /* same name check */ /* cmn_err(CE_NOTE," kladd: step1: cc->ptr_dir = 0x%x", cc->ptr_dir); */ : return CC_STA_KLIST_SAMENAME; /* cmn_err(CE_NOTE," kladd: step1: name = %s", name); cmn_err(CE_NOTE," kladd: step1: cc->klist1[%d].name = %s", i, cc->klist1[i]. name); cmn_err(CE_NOTE," kladd: step1: cc->klist1[%d] = 0x%x", i, cc->klist1[i]); */ : /* add */ cc->k->cma = cc->ptr_cma; /* cmn_err(CE_NOTE," kladd: step2: cc->k->cma = 0x%x, %d(dec)", cc->k->cma, cc- >k->cma); */ : cc->klist1[cc->ptr_dir].wc = 0; /* cmn_err(CE_NOTE," kladd: step3: cc->klist1[%d].cma = 0x%x, %d(dec)", cc->ptr _dir, cc->klist1[cc->ptr_dir].cma, cc->klist1[cc->ptr_dir].cma); cmn_err(CE_NOTE," kladd: step3: cc->klist1[%d].wc = 0x%x", cc->ptr_dir, cc-> klist1[cc->ptr_dir].wc); */ : /* cmn_err(CE_NOTE," kladd: : in while, code = 0x%x", code); */ instruction_call = instruction[code]; : /* cmn_err(CE_NOTE," kladd: step4: cc->ptr_cma = 0x%x, %d(dec)", cc->ptr_cma, cc->ptr_cma); cmn_err(CE_NOTE," kladd: step4: cc->klist1[%d].cma = 0x%x, %d(dec)", cc->ptr _dir, cc->klist1[cc->ptr_dir].cma, cc->klist1[cc->ptr_dir].cma); cmn_err(CE_NOTE," kladd: step4: cc->klist1[%d].wc = 0x%x", cc->a_reg, cc->k list1[cc->a_reg].wc); */ return 0; : kldel(int unit, char *name) /* End */ { struct cc_device *cc; : cc->klist1[i].wc = 0; /* cmn_err(CE_NOTE," kldel: delte list: name = %s", name); */ return 0; : klexe(int unit, char *name) /* End */ { /* E.Inoue */ struct cc_device *cc; : cc = ddi_get_soft_state(cc_state,unit); /* cmn_err(CE_NOTE," klexe: enter unit = 0x%x", unit); cmn_err(CE_NOTE," klexe: enter cc = 0x%x", cc); */ : /* cmn_err(CE_NOTE," klexe: enter cc->ptr_dir = 0x%x", cc->ptr_dir); */ : /* cmn_err(CE_NOTE," klexe: step0: cc->klist1[0].wc = 0x%x", cc->klist1[0].wc); cmn_err(CE_NOTE," klexe: step0: retlen = 0x%x", retlen); cmn_err(CE_NOTE," klexe: step0: cc->ptr_udata = 0x%x", cc->ptr_udata); */ cc->klistf = CC_KLIST_YES; : if (strcmp(name, cc->klist1[i].name) == 0){ /* cmn_err(CE_NOTE," klexe: step1: name = %s", name); cmn_err(CE_NOTE," klexe: step1: cc->klist1[%d].name = %s", i, cc->klist1[i]. name); */ : if (i >= cc->ptr_dir){ /* cmn_err(CE_NOTE," klexe: step1: No name: name = %s", name); */ return CC_STA_KLIST_NONAME; : /* cmn_err(CE_NOTE," klexe: step2: cc->ptr_dir = 0x%x", cc->ptr_dir); */ cc->now_cma = cc->klist1[i].cma; cc->now_wc = cc->klist1[i].wc; /* cmn_err(CE_NOTE," klexe: step3: cc->klist1[%d].cma = 0x%x", i, cc->klist1[i] .cma); cmn_err(CE_NOTE," klexe: step3: cc->klist1[%d].wc = 0x%x", i, cc->klist1[i]. wc); cmn_err(CE_NOTE," klexe: step3: cc->now_cma = 0x%x, %d(dec)", cc->now_cma, c c->now_cma); cmn_err(CE_NOTE," klexe: step3: cc->now_wc = 0x%x", cc->now_wc); */ : uio->uio_offset = 0; /* cmn_err(CE_NOTE," klexe: step4: uio->uio_iov->iov_base = 0x%x", uio->uio_iov ->iov_base); cmn_err(CE_NOTE," klexe: step4: uio->uio_iov->iov_len = 0x%x", uio->uio_iov- >iov_len); cmn_err(CE_NOTE," klexe: step4: uio->uio_segflg = 0x%x", uio->uio_segflg); cmn_err(CE_NOTE," klexe: in: 0x%x %d %d %d %d %d", uio->uio_iov->iov_base, uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); */ : /* Kinetic 2917 list is now READ ONLY. */ /* ====== check */ /* cmn_err(CE_NOTE," klexe: before physio()"); */ : status = physio(cc_strategy, NULL, dev, B_READ, cc_minphys, uio); /* cmn_err(CE_NOTE," klexe: after physio(): status = 0x%x", status); */ : /* cmn_err(CE_NOTE," klexe: after physio() &cc->retlen = 0x%x, cc->retlen = 0x% x", &cc->retlen, cc->retlen); */ : /* cmn_err(CE_NOTE," klexe: after physio(): cc->now_wc = 0x%x", cc->now_wc); cmn_err(CE_NOTE," klexe: after physio(): cc->k->mtc = 0x%x", cc->k->mtc); */ : copyout((caddr_t)&cc->kl_retl, (caddr_t)cc->ptr_udata, sizeof(cc->kl_retl)); /* ====== end check */ /* end */ /* ====== check */ /* cmn_err(CE_NOTE," klexe: out: 0x%x %d %d %d %d %d", uio->uio_iov->iov_base, uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); cmn_err(CE_NOTE," klexe: after physio() retlen = 0x%x", retlen); cmn_err(CE_NOTE," klexe: after physio() &cc->retlen = 0x%x, cc->retlen = 0x% x", &cc->retlen, cc->retlen); */ copyin((caddr_t)uio->uio_iov->iov_base, (caddr_t)cc->data_area, 10*sizeo f(u_short)); /* cmn_err(CE_NOTE," klexe: after physio(): contents of uio->uio_iov->iov_b ase =0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x\n", cc->data_are a[0],cc->data_area[1],cc->data_area[2],cc->data_area[3],cc->data_area[4],cc->dat a_area[5],cc->data_area[6],cc->data_area[7],cc->data_area[8],cc->data_area[9]); */ : static int cc_strategy(struct buf *bp) { /* register struct cc_device *cc = &ccdevice[0]; */ register struct cc_device *cc; : minor_t unit; /* cmn_err(CE_NOTE," cc_strategy: enter"); */ cc = ddi_get_soft_state(cc_state, getminor(bp->b_edev)); : wc = (mode & CC_BIT16) ? cc->len : cc->len * 2; /* cmn_err(CE_NOTE," cc_strategy: cc->naf = 0x%x", cc->naf); */ : dma_addr = cc->dma_cookie.dmac_address; /* count = cc->dma_cookie.dmac_size; */ /* cmn_err(CE_NOTE," cc_strategy: dma_addr = 0x%x", dma_addr); */ : cc->k->cma = CC_CMA_INIT; /* Initialize memory pointer */ /* cmn_err(CE_NOTE," cc_strategy: Not Kinetic list-processing: cc->k->cma = 0x% x", cc->k->cma); */ cc->k->cmr = mode | (cc->cur_crate << 8); /* cmn_err(CE_NOTE," cc_strategy: Not Kinetic list-processing: mode | (cc->cur_ crate << 8) = 0x%x", mode | (cc->cur_crate << 8)); */ cc->k->cmr = naf; /* cmn_err(CE_NOTE," cc_strategy: Not Kinetic list-processing: naf = 0x%x", naf ); */ cc->k->cmr = -(cc->len & 0xFFFF); /* Max len = 1MWord */ /* cmn_err(CE_NOTE," cc_strategy: Not Kinetic list-processing: -(cc->len & 0xFF FF) = 0x%x", -(cc->len & 0xFFFF)); */ cc->k->cmr = CC_HALT; /* cmn_err(CE_NOTE," cc_strategy: Not Kinetic list-processing: CC_HALT = 0x%x", CC_HALT); */ cc->k->cma = CC_CMA_INIT; /* Reset memory pointer */ /* cmn_err(CE_NOTE," cc_strategy: Not Kinetic list-processing: cc->k->cma = 0x% x", cc->k->cma); */ cc->k->maclo = dma_addr & 0xFFFF; /* Set DMA base address */ /* cmn_err(CE_NOTE," cc_strategy: Not Kinetic list-processing: cc->k->maclo = 0 x%x", cc->k->maclo); */ cc->k->machi = dma_addr >> 16; /* cmn_err(CE_NOTE," cc_strategy: Not Kinetic list-processing: cc->k->machi = 0 x%x", cc->k->machi); */ cc->k->amr = CC_AMR_INIT; /* Set VME AM code */ /* cmn_err(CE_NOTE," cc_strategy: Not Kinetic list-processing: cc->k->amr = 0x% x", cc->k->amr); */ cc->k->mtc = wc; /* cmn_err(CE_NOTE," cc_strategy: Not Kinetic list-processing: cc->k->mtc = 0x% x", cc->k->mtc); */ : cc->k->cser = CC_DMA_RESET; /* DMA reset */ /* cmn_err(CE_NOTE," cc_strategy: Not Kinetic list-processing: cc->k->cser = 0x %x", cc->k->cser); */ : case 0x0000: /* CAMAC read */ cc->k->docr = CC_DOCR_INIT | CC_DMA_READ; /* cmn_err(CE_NOTE," cc_strategy: Not Kinetic list-processing: cc->k->docr = 0x %x", cc->k->docr); */ cc->k->sccr = CC_DMA_START; /* cmn_err(CE_NOTE," cc_strategy: Not Kinetic list-processing: cc->k->sccr = 0x %x", cc->k->sccr); */ cc->k->csr |= CC_DMA; /* DMA mode */ /* cmn_err(CE_NOTE," cc_strategy: Not Kinetic list-processing: cc->k->csr = 0x% x", cc->k->csr); */ cc->k->csr &= ~CC_WRITE; /* cmn_err(CE_NOTE," cc_strategy: Not Kinetic list-processing: cc->k->csr = 0x% x", cc->k->csr); */ : /* Kinetic list-processing */ else { /* cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing"); */ : /* cc->k->cma = 0x0000; */ /* Initialize memory pointer*/ /* cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing: cc->now_cma = 0x%x", cc->now_cma); cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing: cc->k->cmr = 0x%x", cc->k->cmr); cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing: cc->k->cmr = 0x%x", cc->k->cmr); cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing: cc->k->cmr = 0x%x", cc->k->cmr); cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing: cc->k->cmr = 0x%x", cc->k->cmr); cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing: cc->k->cmr = 0x%x", cc->k->cmr); cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing: cc->k->cmr = 0x%x", cc->k->cmr); cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing: cc->k->cmr = 0x%x", cc->k->cmr); cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing: cc->k->cmr = 0x%x", cc->k->cmr); cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing: cc->k->cmr = 0x%x", cc->k->cmr); cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing: cc->k->cmr = 0x%x", cc->k->cmr); */ /* E.Inoue for testing */ cc->k->cma = cc->now_cma; /* Initialize memory pointer*/ /* cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing: cc->now_cma = 0x%x", cc->now_cma); */ /* end */ cc->k->maclo = dma_addr & 0xFFFF; /* Set DMA base address */ /* cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing: cc->k->maclo = 0x%x" , cc->k->maclo); */ cc->k->machi = dma_addr >> 16; /* cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing: cc->k->machi = 0x%x" , cc->k->machi); */ cc->k->amr = CC_AMR_INIT; /* Set VME AM code */ /* cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing: cc->k->amr = 0x%x", cc->k->amr); */ : /* end */ /* cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing: cc->k->mtc = 0x%x", cc->k->mtc); */ : cc->k->cser = CC_DMA_RESET; /* DMA reset */ /* cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing: cc->k->cser = 0x%x", cc->k->cser); */ : cc->k->docr = CC_DOCR_INIT | CC_DMA_READ; /* cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing: cc->k->docr = 0x%x", cc->k->docr); */ cc->k->sccr = CC_DMA_START; /* cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing: cc->k->sccr = 0x%x", cc->k->sccr); */ cc->k->csr |= CC_DMA; /* DMA mode */ /* cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing: cc->k->csr = 0x%x", cc->k->csr); */ cc->k->csr &= ~CC_WRITE; /* cmn_err(CE_NOTE," cc_strategy: Kinetic list-processing: cc->k->csr = 0x%x", cc->k->csr); */ : /* cmn_err(CE_NOTE," cc_strategy: exit"); */ return 0; } : static int camac_b(int unit, u_short mode, u_short naf, int len, int *retlen) { register struct cc_device *cc; : /* cmn_err(CE_NOTE," in: 0x%x %d %d %d %d %d", uio->uio_iov->iov_base, uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); */ : /* cmn_err(CE_NOTE," camac_b: after physio() &cc->retlen = 0x%x, cc->retlen = 0 x%x", &cc->retlen, cc->retlen); */ cc->k->donc = CC_INT_AUTO_CLEAR | intrpri; : /* cmn_err(CE_NOTE,"out: %d %d %d %d %d", uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); */ : cc->len_udata += cc->retlen * 2; /* cmn_err(CE_NOTE," camac_b: step1: cc->retlen = 0x%x", cc->retlen); */ : cc->len_udata += cc->retlen; /* cmn_err(CE_NOTE," camac_b: step2: cc->retlen = 0x%x", cc->retlen); */ : *retlen = cc->retlen; /* cmn_err(CE_NOTE," camac_b: cc->retlen = 0x%x", cc->retlen); */ return cc->status; onl50t[105]% onl50t[48]% make ./script/cc_build.sh [Building for sun4u] rm -f cc.o onl50t[49]% ls -l cc* -rw-r--r-- 1 inoue kek 48136 Sep 27 09:50 cc -rw-r--r-- 1 inoue kek 117836 Sep 27 09:50 cc.c : onl50t[50]% ok. 正常にコンパイルできた。 (4). ライブラリファイルの修正 onl50t[53]% cp camlib.c camlib.c-Sept27-2000 onl50t[54]% vi camlib.c : CDMAW(mode, naf, buf, len, retlen, err) int mode, naf, len, *retlen, *err; u_short *buf; { register int status; : /* E.Inoue printf("buf's address = 0x%x\n", buf); end */ message.command = (u_short)CC_CMD_DOBLOCK; : CKEXEC(name, buf, lenbuf, iiosb) char *name; u_short *buf; int lenbuf; struct cc_iosb *iiosb; { register int status; /* E.Inoue printf("buf's address = 0x%x\n", buf); end */ message.command = (u_short)CC_CMD_EXEKLIST; : onl50t[55]% onl50t[55]% make cc -O -c camlib.c -o camlib.o -I. rm -f libcamac.a ar rcv libcamac.a camlib.o forlib.o a - camlib.o a - forlib.o ar: writing libcamac.a onl50t[56]% ls -l camlib* -rw-r--r-- 1 inoue kek 9866 Sep 27 10:24 camlib.c -rw-r--r-- 1 inoue kek 9874 Sep 27 10:22 camlib.c-Sept27-2000 -rw-r--r-- 1 inoue kek 9740 Jun 23 16:19 camlib.c-org -rw-r--r-- 1 inoue kek 1415 Jun 23 16:19 camlib.h -rw-r--r-- 1 inoue kek 9632 Sep 27 10:25 camlib.o onl50t[57]% ok. 正常にコンパイルできた。 (5). 例題ファイルの修正 (5-1). KEKリスト処理用の例題ファイルの修正 今回、デバッグで使用した KEKリスト処理用の例題プログラムは以下のとおり。 1. camtest5c 2. camtest5c1 3. camtest5c2 4. camtest4c (5-1-1). camtest5c onl50t[60]% pwd /export/home/onl50t/inoue/CAMAC/Driver/Kit-test/CAMAC-list/FORCE-50T-sol2.6/camlist onl50t[61]% onl50t[62]% diff camtest5c.c camtest5c.c-org 28c28 < perror((const char *)strerror(status)); --- > perror(strerror(status)); 44c44 < /* strcpy(Filename, "camtest4.obj"); */ --- > strcpy(Filename, "camtest4.obj"); 46c46 < /* strcpy(Filename, "camtest4dma.obj"); */ --- > strcpy(Filename, "camtest4dma.obj"); 72a73,85 > onl50t[63]% camtest5cプログラムには、メッセージ出力のための追加文はない。 (5-1-2). camtest5c1 onl50t[70]% diff camtest5c.c-org camtest5c1.c 1c1 < /* File name : camtest5c.c --- > /* File name : camtest5c1.c 5a6 > * Modified : June 30, E.Inue 28c29 < perror(strerror(status)); --- > perror((const char *)strerror(status)); 44,46c45,48 < strcpy(Filename, "camtest4.obj"); < strcpy(Filename, "camtest4single.obj"); < strcpy(Filename, "camtest4dma.obj"); --- > /* strcpy(Filename, "camtest4.obj"); */ > strcpy(Filename, "camtest4int.obj"); > /* strcpy(Filename, "camtest4single.obj"); */ > /* strcpy(Filename, "camtest4dma.obj"); */ 73,85d74 < < < < < < < < < < < < < onl50t[71]% camtest5c1プログラムには、メッセージ出力のための追加文はない。 (5-1-3). camtest5c2 onl50t[72]% diff camtest5c.c-org camtest5c2.c 1c1 < /* File name : camtest5c.c --- > /* File name : camtest5c2.c 5a6 > * Modified : June 2000, E.Inoue 28c29 < perror(strerror(status)); --- > perror((const char *)strerror(status)); 44,45c45,46 < strcpy(Filename, "camtest4.obj"); < strcpy(Filename, "camtest4single.obj"); --- > /* strcpy(Filename, "camtest4.obj"); */ > /* strcpy(Filename, "camtest4single.obj"); */ 73,85d73 < < < < < < < < < < < < < onl50t[73]% camtest5c2プログラムには、メッセージ出力のための追加文はない。 (5-1-4). camtest4c onl50t[74]% diff camtest4c.c-org camtest4c.c 6a7 > * Modified : August 2000, E.Inoue 29c30,31 < perror(strerror(status)); --- > /* perror(strerror(status)); */ > perror((const char *)strerror(status)); 45,46c47,48 < strcpy(Filename, "camtest4etc.obj"); < strcpy(Filename, "camtest4dma.obj"); --- > /* strcpy(Filename, "camtest4etc.obj"); */ > /* strcpy(Filename, "camtest4dma.obj"); */ 48c50 < strcpy(Filename, "camtest4.obj"); --- > /* strcpy(Filename, "camtest4.obj"); */ onl50t[75]% camtest4cプログラムには、メッセージ出力のための追加文はない。 (5-2). Kineticリスト処理用の例題ファイルの修正 今回、デバッグで使用した Kineticリスト処理用の例題プログラムは以下の とおり。 1. cam6 2. cam6a 3. cam6b 4. cam7 5. cam7A 6. cam7B (5-2-1). cam6 onl50t[79]% pwd /export/home/onl50t/inoue/CAMAC/Driver/Kit-test/CAMAC-list/FORCE-50T-sol2.6/camlist-kine onl50t[80]% onl50t[80]% diff cam6.c-org cam6.c 20,21c20,23 < int data[D_size]; < unsigned short *usp = (unsigned short *)data; --- > /* int data[D_size]; */ > unsigned short data[D_size]; > /* unsigned short *usp = (unsigned short *)data; */ > unsigned short *usp; 26a29,31 > usp = data; > printf("data buf's address = 0x%x\n", data); > 33a39,46 > /* E.Inoue > data[0] = 1; > data[1] = 2; > data[2] = 3; > data[3] = 4; > data[4] = 5; > data[5] = 6; > end */ onl50t[81]% デバッグ用に追加したメッセージ出力文が在る。 コメントアウトしよう。 nl50t[82]% vi cam6.c : /* printf("data buf's address = 0x%x\n", data); */ : onl50t[83]% onl50t[83]% make cam6 cc cam6.c -o cam6 -I.. -L.. -lcamac ../camasm/camasm cam6 a CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[84]% ok. 正常にコンパイルできた。 (5-2-2). cam6a onl50t[85]% diff cam6.c-org cam6a.c 2c2 < * cam6.c 20-FEB-1992 Y.Takeuchi * --- > * cam6a.c 20-FEB-1992 Y.Takeuchi * 12c12 < #define DEFNAME "cam6.obj" --- > #define DEFNAME "cam6.klist" 44a45,46 > /* load klist */ > CKLOAD(filename); 46,60d47 < /* read camac list */ < status = CRLIST(filename, list, L_size, &lenlis, &i); < printf(" list length = %d\n", lenlis); < if (status) { < printf("Read list error!\n"); < exit(status); < } < < /* install the list to K2917 */ < status = CKADD("test1", list, lenlis); < if (status) { < printf("Load list error!\n"); < exit(status); < } < 62c49 < printf(" Now execute %s ...\n", filename); --- > printf(" Now execute ---test1---\n"); 72,74d58 < /* save to file */ < CKSAVE("cam6.klist"); < onl50t[86]% デバッグ用に追加したメッセージ出力文はない。 (5-2-3). cam6b onl50t[87]% diff cam6.c-org cam6b.c 2c2,3 < * cam6.c 20-FEB-1992 Y.Takeuchi * --- > * cam6a.c 20-FEB-1992 Y.Takeuchi * > * modified 11-Sep-2000 E.Inoue 12c13,14 < #define DEFNAME "cam6.obj" --- > #define DEFNAME "cam6.klist" > #define UNDEFNAME "test1" 25a28 > char filename1[33]; 28a32 > strcpy(filename1, UNDEFNAME); 44a49,50 > /* load klist */ > CKLOAD(filename); 46,52c52,55 < /* read camac list */ < status = CRLIST(filename, list, L_size, &lenlis, &i); < printf(" list length = %d\n", lenlis); < if (status) { < printf("Read list error!\n"); < exit(status); < } --- > /* Execute */ > printf(" Now execute ---test1---\n"); > CKEXEC("test1", data, D_size, &iosb); > printf("\n"); 54,59c57,61 < /* install the list to K2917 */ < status = CKADD("test1", list, lenlis); < if (status) { < printf("Load list error!\n"); < exit(status); < } --- > /* Dump buffer */ > for(i = 0; i < 10; i++) > printf("data[%3d]=0x%8x %10u usp[%3d]=0x%4x %5d usp[%3d]=0x%4x %5d\n", > i, data[i], data[i], i*2, usp[i*2], usp[i*2], i*2+1, usp[i*2+1], usp[i*2+1]); > printf("\n"); 60a63,66 > /* Initialize data buffer */ > for(i = 0; i < D_size; i++) > usp[i] = 0; > 62c68 < printf(" Now execute %s ...\n", filename); --- > printf(" Now execute ---test1---\n"); 72,73c78,79 < /* save to file */ < CKSAVE("cam6.klist"); --- > /* delete "test1" */ > CKDEL(filename1); 74a81,113 > /* Initialize data buffer */ > for(i = 0; i < D_size; i++) > usp[i] = 0; > > /* Execute */ > printf(" Now execute ---test1---\n"); > CKEXEC("test1", data, D_size, &iosb); > printf("\n"); > > /* Dump buffer */ > for(i = 0; i < 10; i++) > printf("data[%3d]=0x%8x %10u usp[%3d]=0x%4x %5d usp[%3d]=0x%4x %5d\n", > i, data[i], data[i], i*2, usp[i*2], usp[i*2], i*2+1, usp[i*2+1], usp[i*2+1]); > printf("\n"); > > /* load klist */ > CKLOAD(filename); > > /* Initialize data buffer */ > for(i = 0; i < D_size; i++) > usp[i] = 0; > > /* Execute */ > printf(" Now execute ---test1---\n"); > CKEXEC("test1", data, D_size, &iosb); > printf("\n"); > > /* Dump buffer */ > for(i = 0; i < 10; i++) > printf("data[%3d]=0x%8x %10u usp[%3d]=0x%4x %5d usp[%3d]=0x%4x %5d\n", > i, data[i], data[i], i*2, usp[i*2], usp[i*2], i*2+1, usp[i*2+1], usp[i*2+1]); > printf("\n"); > onl50t[88]% デバッグ用に追加したメッセージ出力文はない。 (5-2-4). cam7 onl50t[93]% vi cam7.c /******************************************************************** * cam7.c 29-MAR-1992 Y.Takeuchi * * * * K2917 list processing test program * ********************************************************************/ #include #include #include "camlib.h" #define D_size 20240 #define L_size 1024 #define DEFNAME "cam7a.obj" #define NAME1 "cam7b.obj" main(argc, argv) int argc; char *argv[]; { unsigned short list[L_size]; int data[D_size]; unsigned short *usp = (unsigned short *)data; struct cc_iosb iosb; register int status; int i, lenlis; char filename[33]; /* read options */ strcpy(filename, (argc > 1) ? argv[1] : DEFNAME); /* Initialize data buffer */ for(i = 0; i < D_size; i++) usp[i] = 0; /* Open */ if (CAMOPN()) { printf("Open error!\n"); exit(1); } CGENC(); CGENZ(); CREMI(); CKINIT(); /* read camac list */ status = CRLIST(filename, list, L_size, &lenlis, &i); printf(" list length = %d\n", lenlis); if (status) { printf("Read list error!\n"); exit(status); } /* install the list to K2917 */ status = CKADD("test1", list, lenlis); if (status) { printf("Load list error!\n"); exit(status); } /* read camac list */ status = CRLIST(NAME1, list, L_size, &lenlis, &i); printf(" list length = %d\n", lenlis); if (status) { printf("Read list error!\n"); exit(status); } /* Execute */ printf(" Now execute %s ...\n", NAME1); CLEWAI(list, lenlis, data, D_size, &iosb); printf("\n"); /* Dump buffer */ for(i = 0; i < 10; i++) printf("data[%3d]=0x%8x %10u usp[%3d]=0x%4x %5d usp[%3d]=0x%4x %5d\n", i, data[i], data[i], i*2, usp[i*2], usp[i*2], i*2+1, usp[i*2+1], usp[i*2+1]); printf("\n"); /* Close */ CAMCLS(); return 0; } onl50t[94]% デバッグ用に追加したメッセージ出力文はない。 (5-2-5). cam7A onl50t[95]% diff cam7.c cam7A.c 2c2,3 < * cam7.c 29-MAR-1992 Y.Takeuchi * --- > * cam7A.c 29-MAR-1992 Y.Takeuchi * > * Modified E.Inoue * 12,13c13,15 < #define DEFNAME "cam7a.obj" < #define NAME1 "cam7b.obj" --- > #define DEFNAME "cam7aA.obj" > #define DEFNAME1 "cam7cA.obj" > #define NAME1 "cam7bA.obj" 26a29 > char filename1[33]; 29a33 > strcpy(filename1, DEFNAME1); 47c51 < /* read camac list */ --- > /* read camac list 0 */ 55,56c59,60 < /* install the list to K2917 */ < status = CKADD("test1", list, lenlis); --- > /* install the list 0 to K2917 */ > status = CKADD("test0", list, lenlis); 61a66,80 > /* read camac list 1 */ > status = CRLIST(filename1, list, L_size, &lenlis, &i); > printf(" list length = %d\n", lenlis); > if (status) { > printf("Read list error!\n"); > exit(status); > } > > /* install the list 1 to K2917 */ > status = CKADD("test1", list, lenlis); > if (status) { > printf("Load list error!\n"); > exit(status); > } > 80a100,102 > /* save to file */ > CKSAVE("cam7A.klist"); > onl50t[96]% デバッグ用に追加したメッセージ出力文はない。 (5-2-6). cam7B onl50t[97]% diff cam7.c cam7B.c 2c2,3 < * cam7.c 29-MAR-1992 Y.Takeuchi * --- > * cam7B.c 29-MAR-1992 Y.Takeuchi * > * Modified 20-Sep-2000 E.Inoue * 12,13c13,14 < #define DEFNAME "cam7a.obj" < #define NAME1 "cam7b.obj" --- > #define DEFNAME "cam7A.klist" > #define NAME1 "cam7bA.obj" 47,53c48,49 < /* read camac list */ < status = CRLIST(filename, list, L_size, &lenlis, &i); < printf(" list length = %d\n", lenlis); < if (status) { < printf("Read list error!\n"); < exit(status); < } --- > /* load klist */ > CKLOAD(filename); 55,61d50 < /* install the list to K2917 */ < status = CKADD("test1", list, lenlis); < if (status) { < printf("Load list error!\n"); < exit(status); < } < onl50t[98]% デバッグ用に追加したメッセージ出力文はない。 (6). cc.cファイル、ライブラリファイル、例題ファイルの実行 (6-1). ccドライバをロードし直す onl50t# make unload ./script/cc_unload.sh [Removing CAMAC device driver] [Removing CAMAC device driver from system] [Deleting CAMAC device files] onl50t# make load ./script/cc_load.sh [Installing CAMAC device driver] [Adding CAMAC device driver to system] [Configuring CAMAC device driver] [Making CAMAC device files] sun4u onl50t# (6-2). KEKリスト処理の実行 (6-2-1). camtest5c onl50t[70]% pwd /export/home/onl50t/inoue/CAMAC/Driver/Kit-test/CAMAC-list/FORCE-50T-sol2.6/caml ist onl50t[71]% onl50t[71]% camtest5c CamReaLIST : OK lenlist = 36 list = 329 1 0 10a ef7a6080 CamLisExeWAIt : OK contents of iosb : iosb.status = fffffff6 iosb.ret_length = 6 iosb.s_reg = f iosb.devinfo = a000 a0 contents of buffer : 5 0 5 5 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 onl50t[72]% CAMAC device driver V1.4x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 ok. デバッグ用の出力文なしに正常実行できた。 (6-2-2). camtest5c1 onl50t[75]% camtest5c1 CamReaLIST : OK lenlist = 61 list = 20b 0 10c 10d ef7a6080 CamLisExeWAIt : OK contents of iosb : iosb.status = fffffff6 iosb.ret_length = 8 iosb.s_reg = f iosb.devinfo = a000 a0 contents of buffer : 0 0 0 2 0 3e8 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 onl50t[76]% onl50t[76]% camtest5c1 CamReaLIST : OK lenlist = 61 list = 20b 0 10c 10d ef7a6080 CamLisExeWAIt : OK contents of iosb : iosb.status = fffffff6 iosb.ret_length = 8 iosb.s_reg = f iosb.devinfo = a000 a0 contents of buffer : 0 3e8 0 2 0 7d0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 onl50t[77]% ok. デバッグ用の出力文なしに正常実行できた。 (6-2-3). camtest5c2 onl50t[78]% camtest5c2 CamReaLIST : OK lenlist = 76 list = 20b 0 10c 10d ef7a6080 CamLisExeWAIt : OK contents of iosb : iosb.status = fffffff6 iosb.ret_length = 48 iosb.s_reg = f iosb.devinfo = 800 080 contents of buffer : ff00 5 ff00 5 ff00 5 ff00 0 ff00 5 ff00 5 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 onl50t[79]% ok. デバッグ用の出力文なしに正常実行できた。 (6-2-4). camtest4c onl50t[80]% camtest4c CAM_Open : Done CamReaLIST : OK lenlist = 36 CamLisLOAD : OK list = 329 1 0 10a ef7a6080 CamExeWAIt : OK contents of iosb : iosb.status = fffffff6 iosb.ret_length = 6 iosb.s_reg = f iosb.devinfo = a000 a0 contents of buffer : 5 0 5 5 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 onl50t[81]% ok. デバッグ用の出力文なしに正常実行できた。 (6-3). Kineticリスト処理の実行 (6-3-1). cam6 onl50t[83]% pwd /export/home/onl50t/inoue/CAMAC/Driver/Kit-test/CAMAC-list/FORCE-50T-sol2.6/caml ist-kine onl50t[84]% onl50t[84]% cam6 list length = 48 Now execute cam6.obj ... data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 287 647 data[ 1]=0x 287 647 usp[ 2]=0x 5 5 usp[ 3]=0x 5 5 data[ 2]=0x 5 5 usp[ 4]=0x 5 5 usp[ 5]=0x 5 5 data[ 3]=0x 5 5 usp[ 6]=0x 5 5 usp[ 7]=0x 5 5 data[ 4]=0x 5 5 usp[ 8]=0x 5 5 usp[ 9]=0xff00 65280 data[ 5]=0x 5 5 usp[ 10]=0x 5 5 usp[ 11]=0x 5 5 data[ 6]=0x 5 5 usp[ 12]=0x 5 5 usp[ 13]=0x 5 5 data[ 7]=0x 5 5 usp[ 14]=0x 5 5 usp[ 15]=0x 5 5 data[ 8]=0x 5 5 usp[ 16]=0x 5 5 usp[ 17]=0x 5 5 data[ 9]=0x ff00 65280 usp[ 18]=0x 5 5 usp[ 19]=0x 5 5 onl50t[85]% ok. デバッグ用の出力文なしに正常実行できた。 (6-3-2). cam6a onl50t[86]% cam6a Now execute ---test1--- buf's address = 0xeffeb494 data[ 0]=0x 287 647 usp[ 0]=0x 0 0 usp[ 1]=0x 287 647 data[ 1]=0x 50005 327685 usp[ 2]=0x 5 5 usp[ 3]=0x 5 5 data[ 2]=0x 50005 327685 usp[ 4]=0x 5 5 usp[ 5]=0x 5 5 data[ 3]=0x 50005 327685 usp[ 6]=0x 5 5 usp[ 7]=0x 5 5 data[ 4]=0x 5ff00 392960 usp[ 8]=0x 5 5 usp[ 9]=0xff00 65280 data[ 5]=0x 50005 327685 usp[ 10]=0x 5 5 usp[ 11]=0x 5 5 data[ 6]=0x 50005 327685 usp[ 12]=0x 5 5 usp[ 13]=0x 5 5 data[ 7]=0x 50005 327685 usp[ 14]=0x 5 5 usp[ 15]=0x 5 5 data[ 8]=0x 50005 327685 usp[ 16]=0x 5 5 usp[ 17]=0x 5 5 data[ 9]=0x 50005 327685 usp[ 18]=0x 5 5 usp[ 19]=0x 5 5 onl50t[87]% ok. デバッグ用の出力文なしに正常実行できた。 (6-3-3). cam6b onl50t[88]% cam6b Now execute ---test1--- buf's address = 0xeffeb494 data[ 0]=0x 287 647 usp[ 0]=0x 0 0 usp[ 1]=0x 287 647 data[ 1]=0x 50005 327685 usp[ 2]=0x 5 5 usp[ 3]=0x 5 5 data[ 2]=0x 50005 327685 usp[ 4]=0x 5 5 usp[ 5]=0x 5 5 data[ 3]=0x 50005 327685 usp[ 6]=0x 5 5 usp[ 7]=0x 5 5 data[ 4]=0x 5ff00 392960 usp[ 8]=0x 5 5 usp[ 9]=0xff00 65280 data[ 5]=0x 50005 327685 usp[ 10]=0x 5 5 usp[ 11]=0x 5 5 data[ 6]=0x 50005 327685 usp[ 12]=0x 5 5 usp[ 13]=0x 5 5 data[ 7]=0x 50005 327685 usp[ 14]=0x 5 5 usp[ 15]=0x 5 5 data[ 8]=0x 50005 327685 usp[ 16]=0x 5 5 usp[ 17]=0x 5 5 data[ 9]=0x 50005 327685 usp[ 18]=0x 5 5 usp[ 19]=0x 5 5 Now execute ---test1--- buf's address = 0xeffeb494 data[ 0]=0x 287 647 usp[ 0]=0x 0 0 usp[ 1]=0x 287 647 data[ 1]=0x 50005 327685 usp[ 2]=0x 5 5 usp[ 3]=0x 5 5 data[ 2]=0x 50005 327685 usp[ 4]=0x 5 5 usp[ 5]=0x 5 5 data[ 3]=0x 50005 327685 usp[ 6]=0x 5 5 usp[ 7]=0x 5 5 data[ 4]=0x 5ff00 392960 usp[ 8]=0x 5 5 usp[ 9]=0xff00 65280 data[ 5]=0x 50005 327685 usp[ 10]=0x 5 5 usp[ 11]=0x 5 5 data[ 6]=0x 50005 327685 usp[ 12]=0x 5 5 usp[ 13]=0x 5 5 data[ 7]=0x 50005 327685 usp[ 14]=0x 5 5 usp[ 15]=0x 5 5 data[ 8]=0x 50005 327685 usp[ 16]=0x 5 5 usp[ 17]=0x 5 5 data[ 9]=0x 50005 327685 usp[ 18]=0x 5 5 usp[ 19]=0x 5 5 Now execute ---test1--- buf's address = 0xeffeb494 data[ 0]=0x 0 0 usp[ 0]=0x 0 0 usp[ 1]=0x 0 0 data[ 1]=0x 0 0 usp[ 2]=0x 0 0 usp[ 3]=0x 0 0 data[ 2]=0x 0 0 usp[ 4]=0x 0 0 usp[ 5]=0x 0 0 data[ 3]=0x 0 0 usp[ 6]=0x 0 0 usp[ 7]=0x 0 0 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 Now execute ---test1--- buf's address = 0xeffeb494 data[ 0]=0x 287 647 usp[ 0]=0x 0 0 usp[ 1]=0x 287 647 data[ 1]=0x 50005 327685 usp[ 2]=0x 5 5 usp[ 3]=0x 5 5 data[ 2]=0x 50005 327685 usp[ 4]=0x 5 5 usp[ 5]=0x 5 5 data[ 3]=0x 50005 327685 usp[ 6]=0x 5 5 usp[ 7]=0x 5 5 data[ 4]=0x 5ff00 392960 usp[ 8]=0x 5 5 usp[ 9]=0xff00 65280 data[ 5]=0x 50005 327685 usp[ 10]=0x 5 5 usp[ 11]=0x 5 5 data[ 6]=0x 50005 327685 usp[ 12]=0x 5 5 usp[ 13]=0x 5 5 data[ 7]=0x 50005 327685 usp[ 14]=0x 5 5 usp[ 15]=0x 5 5 data[ 8]=0x 50005 327685 usp[ 16]=0x 5 5 usp[ 17]=0x 5 5 data[ 9]=0x 50005 327685 usp[ 18]=0x 5 5 usp[ 19]=0x 5 5 onl50t[89]% ok. デバッグ用の出力文なしに正常実行できた。 (6-3-4). cam7 onl50t[90]% cam7 list length = 4 list length = 16 Now execute cam7b.obj ... data[ 0]=0x 50005 327685 usp[ 0]=0x 5 5 usp[ 1]=0x 5 5 data[ 1]=0x 2 2 usp[ 2]=0x 0 0 usp[ 3]=0x 2 2 data[ 2]=0xff000005 4278190085 usp[ 4]=0xff00 65280 usp[ 5]=0x 5 5 data[ 3]=0x 50005 327685 usp[ 6]=0x 5 5 usp[ 7]=0x 5 5 data[ 4]=0x 0 0 usp[ 8]=0x 0 0 usp[ 9]=0x 0 0 data[ 5]=0x 0 0 usp[ 10]=0x 0 0 usp[ 11]=0x 0 0 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[91]% ok. デバッグ用の出力文なしに正常実行できた。 (6-3-5). cam7A onl50t[91]% cam7A list length = 4 list length = 6 list length = 20 Now execute cam7bA.obj ... data[ 0]=0x 50005 327685 usp[ 0]=0x 5 5 usp[ 1]=0x 5 5 data[ 1]=0x 2 2 usp[ 2]=0x 0 0 usp[ 3]=0x 2 2 data[ 2]=0x 50005 327685 usp[ 4]=0x 5 5 usp[ 5]=0x 5 5 data[ 3]=0x 50000 327680 usp[ 6]=0x 5 5 usp[ 7]=0x 0 0 data[ 4]=0x 2ff00 196352 usp[ 8]=0x 2 2 usp[ 9]=0xff00 65280 data[ 5]=0x 50005 327685 usp[ 10]=0x 5 5 usp[ 11]=0x 5 5 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[92]% ok. デバッグ用の出力文なしに正常実行できた。 (6-3-6). cam7B onl50t[93]% cam7B list length = 20 Now execute cam7bA.obj ... data[ 0]=0x 50005 327685 usp[ 0]=0x 5 5 usp[ 1]=0x 5 5 data[ 1]=0x 2 2 usp[ 2]=0x 0 0 usp[ 3]=0x 2 2 data[ 2]=0x 50005 327685 usp[ 4]=0x 5 5 usp[ 5]=0x 5 5 data[ 3]=0x 50000 327680 usp[ 6]=0x 5 5 usp[ 7]=0x 0 0 data[ 4]=0x 2ff00 196352 usp[ 8]=0x 2 2 usp[ 9]=0xff00 65280 data[ 5]=0x 50005 327685 usp[ 10]=0x 5 5 usp[ 11]=0x 5 5 data[ 6]=0x 0 0 usp[ 12]=0x 0 0 usp[ 13]=0x 0 0 data[ 7]=0x 0 0 usp[ 14]=0x 0 0 usp[ 15]=0x 0 0 data[ 8]=0x 0 0 usp[ 16]=0x 0 0 usp[ 17]=0x 0 0 data[ 9]=0x 0 0 usp[ 18]=0x 0 0 usp[ 19]=0x 0 0 onl50t[94]% CAMAC device driver V1.4x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at vme0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 ok. デバッグ用の出力文なしに正常実行できた。 ---xxxx ここまでやった(継続中) --- (6). 項目タイトル (6-1). サブ項目タイトル (6-1-1). サブサブ項目タイトル