
              TOPPERS/JSPͥ 桼ޥ˥奢 
                    (Linux ߥ졼Ķ)

             Release 1.4бǽ: 1-Dec-2003

------------------------------------------------------------------------ 
 TOPPERS/JSP Kernel
     Toyohashi Open Platform for Embedded Real-Time Systems/
     Just Standard Profile Kernel

 Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
                             Toyohashi Univ. of Technology, JAPAN

 嵭Ԥϡʲ (1)(4) ξ狼Free Software Foundation 
 ˤäƸɽƤ GNU General Public License  Version 2 ˵
 ҤƤ˸¤ꡤܥեȥܥեȥ
 ѤΤޤࡥʲƱˤѡʣѡۡʰʲ
 ѤȸƤ֡ˤ뤳Ȥ̵ǵ롥
 (1) ܥեȥ򥽡ɤηѤˤϡ嵭
     ɽѾ浪Ӳ̵ݾڵ꤬Τޤޤηǥ
     ˴ޤޤƤ뤳ȡ
 (2) ܥեȥ򡤥饤֥ʤɡ¾Υեȥȯ˻
     ѤǤǺۤˤϡۤȼɥȡ
     ԥޥ˥奢ʤɡˤˡ嵭ɽѾ浪Ӳ
     ̵ݾڵǺܤ뤳ȡ
 (3) ܥեȥ򡤵Ȥ߹ʤɡ¾Υեȥȯ˻
     ѤǤʤǺۤˤϡΤ줫ξ
     ȡ
   (a) ۤȼɥȡѼԥޥ˥奢ʤɡˤˡ嵭
       ɽѾ浪Ӳ̵ݾڵǺܤ뤳ȡ
   (b) ۤη֤̤ˡˤäơTOPPERSץȤ
       𤹤뤳ȡ
 (4) ܥեȥѤˤľŪޤϴŪ뤤ʤ»
     ⡤嵭ԤTOPPERSץȤդ뤳ȡ

 ܥեȥϡ̵ݾڤ󶡤ƤΤǤ롥嵭Ԥ
 TOPPERSץȤϡܥեȥ˴ؤơŬѲǽ
 ޤơʤݾڤԤʤޤܥեȥѤˤľ
 ŪޤϴŪʤ»˴ؤƤ⡤Ǥʤ

 @(#) $Id: linux.txt,v 1.12 2003/12/11 09:57:01 honda Exp $
------------------------------------------------------------------------


1Linux ǤưĶγ

TOPPERS/JSP Υߥ졼ĶȤơLinux ưѰ
Ƥ롣Υߥ졼ĶϡLinux  1ĤΥץʣ
Υڤؤư롣


1.1. ݡȤƤʤǽ

Linux Υߥ졼ĶǤϡTOPPERS/JSP äƤ뵡ǽ⡢
ʲεǽϥݡȤƤʤ

CPU㳰ϥɥ
def_int ƥॳ
ǽɾѥƥﻲȵǽ

CPU㳰ϥɥˤĤƤϡCPU㳰ϥɥ鼫ΤϿϲǽǤ뤬
CPU㳰ϥɥǡCPU㳰ȯȥȤ֤򻲾ȤǤ
vxsns_XXX CPU㳰ϥɥ˥åѡ򤫤֤뤳ȤǼ¸ǤȻפ
뤬ߤΤȤϥݡȤƤʤ


1.2. ưĶ

TOPPERS/JSP Linux Υߥ졼Ķϡʥ륹åεǽ
Ѥ뤿ᡢΥС Linux ͥglibcɬפȤʤ롥

           ͥ :  2.2 ʾ
           glibc    :  2.1 ʾ          

Υǥȥӥ塼ǤưǧƤ롥
            
            Vine Linux 2.5,2.6
            Debian GNU/Linux 3.0



1.3. 

Linux Υߥ졼ĶǤϡʥ뤬ߤб롥
ϥɥϳߥϥɥȤư졢ʥޥߥޥ
б롣桼ʥϥɥ뤳ȤǽǤ뤬
롼˽ȤɬפǤ롣

Linux Υʥ⡢SIGUSR1 ưǥѥåΤ
ѤƤ뤿ᡢ桼Ѥ뤳ȤϤǤʤޤSIGALRM ϥ
ͥΥ޳ߤȤѤƤ롥ˤäƤϡSIGIO Υϥɥ
⥫ͥSIGIO ΰˤĤƤϣϤ򻲾ȡˡ



1.4. ִ

ߤδֳ֤ 10ߥäɸȤƤ뤬åȰ¸Υ
⥸塼ΤߤνѹǤ롣ߥ졼ĶΤ 1ĤΥץ
ȤƼ¹Ԥ뤿ᡤߥ졼ĶΤ˳Ƥ CPU
֤ UNIX Υ塼ˤäƷ롣Τᡢ⤤٤
Ԥ뤳ȤϤǤʤ




ƥॳͤΰ㤤

ʲǤϡBSD UNIXǤΥߥ졼ĶǤΡƥƥॳλ
ͤΰ㤤ˤĤƽҤ٤롥

(1) loc_cpu             ߤȥǥѥåζػ

loc_cpu ϡ٤ƤΥʥޥ֤ꤹ롥

(2) unl_cpu             ߤȥǥѥåε

unl_cpu ϡ٤ƤΥʥޥ֤ꤹ롥

(3) chg_iXX             ߥޥѹ

̾Τ chg_ims ȤƤ롣chg_ims 򥵥ݡȤ뤫ɤ
SUPPRT_CHG_IMS 뤫ɤѹǤ롣chg_ims ϡʥ
ꤷͤꤹ롣ƥȤǤϡǥѥå
ӽФ SIGUSR1 ʥΥޥꤹ뤳ȤϤǤʤ(ꤷ褦
 E_PAR 顼ˤʤ)ޤ󥿥ƥȤǤ SIGUSR1 
뤳ȤϤǤʤ(褦Ȥ E_PAR 顼ˤʤ)
ƥȤchg_ims ˤꤷͤϥǥѥåȯƤ¾
˰Ѥ롣󥿥ƥȤꤷϡ󥿥
ƥȤǤΤͭǤ롣

(4) get_iXX             ߥޥ

̾Τ get_ims ȤƤ롣ref_ims ϡʥޥθͤɤ
ФƥॳǤ롣


(5) vget_tim            ǽɾѥƥﻲ

ݡȤƤʤ



3Υ֥åI/O

3.1. Υ֥åI/O ɬ

TOPPERS/JSP Υߥ졼ĶΤ 1ĤΥץȤưƤ
뤿ᡢTOPPERS/JSP Υ UNIX ͥǥ֥å륷ƥ
ƤӽФ硢ߥ졼ĶΤ֥å졢¾Υ
¹Ԥ뤳ȤǤʤʤʸ̩ˤϡ֥å˥ʥ
äˤϡ֥åƼ¹Ԥ³ǤˡΤᡤUNIX 
ͥǤΥ֥åʤ褦ˡ® I/OϡΥ
å󥰥⡼ɤǹԤɬפ롣

Linux ΥΥ֥åI/O⡼ɤǤϡ̾ǤХͥǥ֥
褦 read/writeƥॳ뤫⤹˥꥿󤷤Ƥ 
ʤλΥƥॳ EWOULDBLOCK 顼𤹤ˡ
ƱI/O⡼ɤʻѤȡΥƥॳƤӽФƤ
֥åʤˤʤäˡUNIXͥ SIGIO ʥȤ
ƤΤȤץΤ餻롣


3.2. TOPPERS/JSP ˤ륵ݡ

Linux ΥΥ֥åI/O  TOPPERS/JSP ΥѤ뤿
ϡSIGIO ޤ륷ʥϥɥޤʥ򲿤餫
ηǥΤɬפ롣ΤμʤȤơTOPPERS/JSP 
ϡSIGIO ʥȯˤƤӽФ륳ХåؿϿ뵡
ǽѰդƤ롣

ŪˤϡSIGIO ʥˤꥳХåؿ¹Ԥˤϡ
SIGIO Υ٥ȥ֥åSIGIOEBˤѰդ callback ե
ɤ˥ХåؿؤΥݥ󥿡arg եɤ˥Хåؿ
ꤷeneuque_sigioeb Ѥ SIGIO Υ٥ȥ塼
Ͽ롣SIGIO ʥ뤬ȯȡϿХåؿ٤Ƹ
ӽФ롣Хåؿ 0 ֤ȡϢ SIGIO Υ٥
֥åϥ塼Ͽ줿ޤޤȤʤꡢ³ SIGIO ʥǺƤƱ
ХåؿƤӽФ롣Хåؿ 0 ʳ֤ȡ
SIGIO Υ٥ȥ֥åϥ塼졢ХåؿϤ
ʹ߸ƤӽФʤʤinclude/linux_sigio.h,systask/linux_sigio.cˡ
ʤSIGIO Υ٥ȥ塼Ͽ eneuque_sigioeb ϥޥե
Ѥ뤿ˡ󥿥ƥȤƤ٤ʤᡢƥ൯ư
롼ϡenqueue_sigioeb_initialize Ѥ롣

Υ֥åI/O ݡȥ⥸塼ϡХåؿƤӽФ
ˡǥ 1ġtskid = TSK_LINUX_SIGIOˤȡSIGIO Υ
ȥ塼Ф¾Τ˥ޥե 1ġsemid =
SEM_LINUX_SIGIOˤѤƤ롣Υ֥åI/O ݡȥ⥸塼
Ѥ뤿ˤϡƥ๽եǡѤ륿
ޥեȤ褦ꤷʤФʤʤ


3.5. ꥢɥ饤

Linux Υߥ졼Ķ򡢥ͥƥִĶȤʤ٤ᤤΤȤ
뤿ˡͥƥִĶΥꥢ륤󥿥եɥ饤ФƱεǽ
ĵꥢɥ饤ФѰդƤsystask/linux_serial.cˡ
ꥢɥ饤ФϡǽҤ٤Υ֥åI/O εǽѤơ
ݡȤФϤɸϤФƹԤΤǤ롣


󥹥ȡ롦¾

4.1. 󥹥ȡ

Linux Υߥ졼Ķ򥤥󥹥ȡ뤹ˤϡTOPPERS/JSP ɸ
꡼˴ޤޤʳˡʲΥġ뤬ɬפǤ롣

    GNU Cѥ
    BINUTILS ֥顤󥫤ʤ
    perl 5ưǧ 5.005_03
    GNU Makeưǧ 3.78.1


4.2. ꥢɥ饤лѾ

ꥢɥ饤ФϡɸϤΥ֥å󥰤 RAW⡼ɤꤹ
롣ɸϤΥ֥å󥰤 RAW⡼ɤꤷޤޤξ֤ǥץ
λȡ뤬ưʤʤ롣ΤᡤTOPPERS/JSP 
λɬɸϤ򸵤ξ֤᤹ɬפ뤬ץλ
륷ʥϿ¿ꡢΤ٤Ƥˤн褷Ƥʤޤ桼
ץޤ뤳ȤΤǤʤʥ⤢ꡢн褹뤳Ȥ
ԲǽǤ롣


4.3. ǥХåѾΥҥ

LinuxΥߥ졼ĶϡUNIXΥܥåǥХåȤ߹
碌ƻȤȤǡTOPPERS/JSP ѤƥΥǥХåϤȯ
櫓ǥХåȤ߹碌ƻȤǡTOPPERS/JSP ڤؤ
 SIGUSR1ʥȤäƤ뤿ˡڤؤ٤˥ǥХå
椬äƤޤȤ꤬롣GNU ܥåǥХåGDBˤξ
ˤϡΥޥɤˤǥХå SIGUSR1 ޤʤ褦ꤹ
뤳ȤǤ롣

    (gdb) handle SIGUSR1 nostop noprint

Υޥɤ.gdbinit ꤷƤǤ롣

ޤե֥졼ݥȤ򥵥ݡȤƤǥХåξϡ
Υɥ쥹¹Ԥ˸¤äƼ¹Ԥߤ뤳ȤǤ
ߤΤϡƥΤǡΥǤϤʤˡ㤨С
GDB ξˤϡΥޥɤˤꡢID  TSKID Υؿ FUNC 
ƤӽФˤΤ߼¹Ԥߤ뤳ȤǤʸ̩ˤϡλ
ˡǤϡID  TSKID Υ¹˵ư줿ߥϥɥ餬 FUNC 
ƤӽФˤߤˡ

    (gdb) break FUNC if _kernel_runtsk == &_kernel_tcb_table[TSKID-1]






