me main - osaka city universitytakiyama/... · 2013-09-03 · power.mech.eng.ocu init module p q r...
TRANSCRIPT
POWER.mech.eng.OCU
� � � � � � � � �
(Linux
� � � � � � � � �
!!)– 1 / 38
� � � � � � � � �(Linux
� � ! " # $ % & '!!)( ) * + , - . / 0 1 2
2009.09.29
POWER.mech.eng.OCU
3 4 5 6
� � � � � � � � �
(Linux
� � � � � � � � �
!!)– 2 / 38
7 8 9 : ; < = > ; ? @ A
?* B C D E B?n
< = A F GH @ I J K L M N @ O 8 K P Q R S : ; ? @ T A K U V A W X YZ [ @ \ R
(JIS) ]
n
< = A ^ _
u
F ` < =
(
a b c a B d):
e f S 7 g h ) i j ( N @ A Y k lF ` K m n N @ ]u
o p < =
(
E B q):
h ) A I r ` i j s > k t u K l v w x @< = ]
u
* B C D + < =:
y z k { | K } ~ ; W X ]
n
< = A � �I J K } ~ � k w � � � S < = � � ]
POWER.mech.eng.OCU
� � � � � � � � � �
?
� � � � � � � � �
(Linux
� � � � � � � � �
!!)– 3 / 38
n 2000
� � � �
:: PC98::BIOS,
� � � B � , � � � � �(C-BUS)
MS-DOS
g �
IO
� � a + k � � d Y � � �
outp(
� � ¡,
� �¢
),
� � ¢
=inp(
� � ¡
),peek,poke,(BASIC)
£ ¤ ¥ ¦ §I/F
¨I/O-port
© ª « ¬ ¡ � � � ¢ ® ¯ ° ± ² ³ ´I/F
µ � ¶ · ²n 2000
¸ ¹ º »
::DOS/V(AT
¼ ½ ¾
)
¨ ¿ À ¥C
Á ¡ Â Ã,ISA
Ä ÂÃ
,32bit
Å
(
ª ¶ ¡
?) Æ BIOS
Ç È Å(
É ° £ �?) ²
OPEN BIOS:Free BIOS by Richard Stallman(FSF)Ê Ë ¨
OS(Lin,Xp..)
¥ Ì ³ Í ¥ Î Ï � Ð � � Á Ñ ¡ Ò Ó ²Ê Ë ¨ Á ¡ Ì
PCI
© £ Ô Æ Õ Ö,
× Ø Ù Ú ² ³ ´ Û Ü ² ¤ ¨ Ý Þ © ± ß Æ PC
à
PCI
Á ¡ Ú ¨I/F
µ á ¶ â ã ¥ ä á ¢ ® ¯ ° å æ
?
u I/F
ç á è é ê ¨ ë ì í ® î ° ï ¥ ð å ñ ¤ Æ ò ó à ô õ ö æß £ � ²
u
Ê Ë ¨
OS:
÷ ¡ ø ù ú û ü ý á þ á ú û © ÿ � � � ²
I/O
Ì ÷ � ø ù ú û � ¯ � � � å Ý Þ � ñ
...
É ° �
...ç è í � � ÷ � ø ù � � ¨ � � � �
POWER.mech.eng.OCU
� � � � � � � �
(mechatronics system)
� � � � ! " # $ % &
(Linux
' ( ) * + , - . / 0
!!)– 4 / 38
mechanics + electronics
ç è 1 « �
(
¾ 2
)+
3 4 « í � 1 « �(
5 6)¨ 7 8 ²9 á ¶ : ; ª ü ë ì í : ; ª < = 8 > ? @ A B C D E F G � H � IJ K L M N 9 O P : ; Q R S G : ; QE F 1 T U V W XY Z [
(
\)
] ^ _ ` aQ T b c d O ef g [d h T G i j T U k l m n o pE q r s t u v m u w x v
OSy ? z {
(
| }
)~ � � � � ? @
POWER.mech.eng.OCU
� � � � � � �
(
�
)
�� � � � � � � � � � �
(Linux
� � � � � � � � �
!!)– 5 / 38
¡ ¢ £ ¤ ¥ ¦ § ¨ © ª «
:
¬ ® ¯ ° ± ² ³ ´ µ § ¨ © ª «: ® ¯ ° ¶ · ´ ¸ ¹ º ¯ » ¼ ½ ¾¿ À Á ~ Â Ã Ä Å Æ Â Ç È Å Æ É Ê Ë Â Ì Í � W X Î f Ï [ Ð Ñ Ò ÓÔ Õ Ö × Ø Ù Ú Û r Ü c Ý e Þß à Ò á â ^ Û ã →
Û ä ^ å Ú e ãæ ç è é ê ë ì íî ï ð ñ ò ó ô õ ö Ý ( ÷ í ø
) →
ù õ ú û ü ý þ ÿ �þ ÿ è é � þ ÿ � ê ë � í
� � � � � ý � � � ý
MT →� � � � � � ö
,AT,CVT� � � � � � è é � � � � �� è é � � ! ê ë � í" # $ % ê ë � í& ' ( ) * � � + � ô õ � ò , - . /
(ABS,ALB)� , 0 � � � � + � � , - . /
(TRC)(
� � 1,
2 � 1 3 ö û 4 5 6 7 8
)ë 9 3 � � , - . /:Advanced Safty Vehicle, Interigent Traffic System: ; < ; = > ? ; @
(
A B C D)
E F,
G ; H I J ; K L M N O D P Q R S T G ; U V W E F
,
X Y Z [ M\ ] ^ _ Q ` a b c d,
G e f ] ^ _ Q < ; M g h i j,
POWER.mech.eng.OCU
k l m n o p q r s
e G = ? K t u v W w x
(Linux
y z { | } ~ � � � �
!!)– 6 / 38
� 3 � � � � � ü � � *
(
� � � � * � � � � � � CPU)� � � 3 �� � ù � � � � *
(OS,
* � � � � /
)
� 3 � � � 3 � � � � � � � �� � � � �� � ü � � * ù � � � � *� ¡ - ¢ £ ¤� � ¥
(
¦
)
� � � § ¨* © ª � � « �¬ ¥®¯ ®� ° © ± ²¡ © ³ ´ µ ¶ · ¸ ¹º » ¼ ½ ¾ ¿ À ¶ ¿ Á  À
OSÃ Ä Å Æ
(
Ç È
)É Ê Ë Ì Í Î Ï Ð © ª Ñ Ò « Ó Ô Õ Ö × Ø
..
POWER.mech.eng.OCU
Ù Ú Û Ü
Ý Þ ß à á â ã ä å æ ç
(Linux
è é ê ë ì í î ï ð ñ
!!)– 7 / 38
ò ó ¾ ô ¬ õ Á ö ÷ ø ùò ó ¾ Ì Í Î Ô ú û ü õ Á öý · þ Ê ÿ � � �� � �� � � � ü ý Ë � � � � Ô Ì Í Î� � Ò Í � � � � � �� � � � � Ó ¼ Ò Í � � �� � � �
(
� � � �)
MEMS
Ì Í Î� ¼ � Í ¹ ÷ ! " �Ì Í Î ô # $ ü ý% � Ë & � � ' � ( ) CCD,CMOS
* º + , -
POWER.mech.eng.OCU
. / 0 1 2 3 4
Ý Þ ß à á â ã ä å æ ç
(Linux
è é ê ë ì í î ï ð ñ
!!)– 8 / 38
ü õ " � Á ö 5 Ë ! ô 6 %ü õ Á ö 7 ó 89 : � ; ü ý < = 8
(
> + � ?
)� @ Ô A B� � � C D E F G � H I J(PWM)
K � L M � N� � � = O P Q � > R S TU V W X W H Y Z [ \ M ] N
ON/OFF High/Low,
^/
_ W ` Y a,
b Y c F ] N
POWER.mech.eng.OCU
d e f g h i g j k
CPU
l m n o p q r s t u v
(Linux
w x y z { | } ~ � �
!!)– 9 / 38
� [ K � � � a G � ] N E � � � � \ � � E U V W � � � � E � � � �` [ N ] � � ] W � �� � U V W� [ K
A/D
� � U V W � � [ c� � X/
� � � �� � a G � ] N
D/A
� � U V W � � � ¡ ] ¢ £ ¤(ITU)
A/D
� �
,D/A
� �
,
¥ ` ¦ � � [ ¥ � § ¨ © ] ¥(
ª « ¬
)
� ¥ V
(CPU)
® � � � � � ¯ ° ± ² � ³ ´ µ �¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À:
Á Â Ã Ä Å Æ Ç È É ¼ ¸ Ê Ë Ì OS(
Í Î Ï Î Ð
)
Ñ Ò
POWER.mech.eng.OCU
A/D
Ó Ô
,D/A
Ó Ô
,
Õ Ö × Ø Ù Ú Õ Û Ü Ý Þ ß à ál m n o p q r s t u v
(Linux
w x y z { | } ~ � �
!!)– 10 / 38
n
â ã ¦ ` ä [ å æ ç µ � (
] ¥ � è é å ê ë ì í î å ï ð ñ)
n
¦ ` ä ò ® ó ô õ ¥
(
ö ÷
)
ø
PC
å ù ú í µ ûLAN(UDP,TCP/IP),USB,COM(232C)
ø ü ý ô þ ÿ ûn PC
î � � å � ò ¥ õ � � õ � � õ � ø � � ã PC
� ê ë � û
CPU
� ò � õ � � õ � � �/
� �� � � ò
A/D,D/A,ITU� � � � � ý � � ý� õ � � �� � ! õ � � � " # $ � õ � ø % & ' ( )
ITU:Integrated Timer Unit:
* + , - . / 0 1
PWM
2 3 4 5
POWER.mech.eng.OCU
6 7 8 9 : ; < = > 7 ? @ A B C ; < A @ D
E F G H I J K L M N O
(Linux
P Q R S T U V W X Y
!!)– 11 / 38
I Z [ \
8001 9801 VX RA2 21AP H8 SH2 SH4CPU z80 V30(86) 286 386 486DX2 3048 7145 7764clk
(MHz) 2.5(4) 5 10 16 66 25 50 320
ROM 24 128 192 128k 2M 16MRAM 16 640 640 1.6M 3.6M 4K 1M 64M] ^ _
1979 1982 1986 1988 1993 ` a bARM9
c d e f g
H8-3048Fone MS104-SH2
h i
/
j k l 2 m n o p q
POWER.mech.eng.OCU
B C ; < @
E F G H I J K L M N O
(Linux
P Q R S T U V W X Y
!!)– 12 / 38
r s t u v w xu y � z { | } } � ~ � � � �
SH4(
� � � � �)
SH2(
� � �)
HORP3(2
� � �
)
� � �
SH4� � | � � � � � � � �
SH2(
� � �)+PC(
� � �)� { � �� � y � � ' � �
H8� { � � � � ¡
n OS:
¢ £
,Linux,ITRON
¢ ¤n
¥ ¦
:
§ z ¨ © � ¥ ¦ ª C¥ ¦ ª (Java?)
¢ ¤
n TOPPERS(µITRON):RISC CHIP
� « � ¬ s ® � ¯ ª ° ±
JOB² ³ ´ µ ¶
POWER.mech.eng.OCU
· ¸ ¹ º » ¼ ½ ¾
¿ À Á Â Ã Ä Å Æ Ç È É
(Linux
Ê Ë Ì Í Î Ï Ð Ñ Ò Ó
!!)– 13 / 38
PC
Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ßÛ à á â ¡ ã ¨ ä å æ ç å Ý(
è æ Ú
)
ã ¨ ä å æ ç å Ý(
é å ¯)
GUI
MATLABsimulink
RealTimeWorkshop(MathWorks)
ControlDesk(dSPACE)
Autobox(dSPACE)
LabView(NI) ê ë
PCI
ì å ¯
Kylix(glibc)/Qt,gtk+CUI gcc(glibc)
AutoBox(dSPACE):68
íCPU
î ï ð ñ ò ó ô õ ö ÷ ø ò
glibc
ù ú û ü ý þ
glibc ÿ free
POWER.mech.eng.OCU�
I/F � � � � � � � �¿ À Á Â Ã Ä Å Æ Ç È É
(Linux
Ê Ë Ì Í Î Ï Ð Ñ Ò Ó
!!)– 14 / 38
Ü Ý Þ ß
(
Ù å �
:
)
� � � � � ² � � � � � ã Ý � � ã � � �� � � �
Windows
� � � ! " � # $ % & ' ( Ö ) * + , � � - Ö � . /0 1 2 3 ( Ö �
windows
Ç 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H ? I J Ç K L M N O P Q R S T U V WX
(usb
Y Ã Â
)
Linux
� � Z [ \ - ] + � ^ _ è å Ý 0 1 3 * . / 0 ` Ö �Ý â � á a & ' * b c d e Ü Ý Þ ß f g h [ � i � * b c d e� j 3 k * � � Z # $ % & � � lLinux I/F m n o p mq
POWER.mech.eng.OCU
r s t u r
v w x y z { | } ~ � �
(Linux
� � � � Î Ï Ð � � �
!!)– 15 / 38
n Linux
�
I/F
� � � � � � � �
(
� �
)
� � � � � � � � � � � f �� � � � � � � � � � � � � � � ¡ ¢ � £ ¤n
� � � � � � � � � � OS
¥ ¦ § ¨ � � � ©I/F
� � � ªI/O
« �¬ � ® § � ¯ � ° ± �
I/F
� � � ¥ « ² ³ � � � � � ´ µ¶ · £ ¤� � � � � � � � ª ¸ ¹
n
º » � ² ´ � � � �¼
(
½
)
� � ¾ ¿ À ª � � ´ ª j § Á § ¤n
 � à ² � � � � � à ² Ä Å � � � ´ ª j § Á § ¤HDD
Æ Ç
n
È Ã ¾ É � ² � � � �Ê Ë Ã ¾ � Ì ´ � Í Î � � Æ Ç ° ± � Ï Ð � Ñ £ � � � � ¤Ò � � � Ó © Æ ± ¤
POWER.mech.eng.OCU
Ô Õ Ö × Ø Ù
Ú Û Ü Ý Þ ß à á â ã ä
(Linux
å æ ç è é Ï Ð ê ë ì
!!)– 16 / 38
デバイスドライバ
カーネル
アプリケーション
ハードウェア
ローダブルモジュール
カーネル
アプリケーション
ハードウェア
スタティックリンクのドライバ ローダブルモジュールのドライバ
ダイナミックロードIF
í î ï ð ñ(
ò
)
ó ô õ ß ö ÷ õ ô ø ù ú
Linux Kernel Conference 2004
û ü ý þ
insmod
ÿ � � � Â � � � � � � � � � � � £
POWER.mech.eng.OCU
kernel
Ù � �
..PC
� � �
..
Ú Û Ü Ý Þ ß à á â ã ä
(Linux
å æ ç è é Ï Ð ê ë ì
!!)– 17 / 38
less /proc/bus/pci/devices� �0118 114718b2 a fe5ff000 fe5fec00 00000000 00000000 00000000
00000000 00000000 00001000 00000040 00000000 00000000 00000000
00000000� �� � �
ID
� � � � � � �
8086:
� � � � � � � �
ID1147:
� � � � ! � � � � � �
ID,18b2(h)=6322:
" � � # $ � �(PCI-632206)
less /proc/pci� �Bus 1, device 3, function 0:
Class ff00: PCI device 1147:18b2 (Interface Corp) (rev 1).
IRQ 10.
Master Capable. Latency=64. Min Gnt=64.Max Lat=176.
Non-prefetchable 32 bit memory at 0xfe5ff000 [0xfe5fffff].
Non-prefetchable 32 bit memory at 0xfe5fec00 [0xfe5fec3f].� �% � & ' ( ) �fe5ff000,fe5fec00
* + , - . / 0 1 2 3 4
POWER.mech.eng.OCU
PCI I/F Ö 5 6 7 8
Ú Û Ü Ý Þ ß à á â ã ä
(Linux
å æ ç è é 9 Ð ê ë ì
!!)– 18 / 38
PCI
: � ; < ) � = > �
31 24 23 16 15 8 7 0� � � �
ID
� � �ID 00h� � � � � � � � � : ? � (
04h@ A � : � ( B C D > �ID 08hE � � � & F G � � � H I õ à J Þ K õ L M N O Þ P ÷ õ J Q õù 0ch� � � ' ( ) � ) D � �
10h...� � � ' ( ) � ) D � �
24hR S = � � T
IDR S = � � T � � �
ID 2chU V
ROM
� � � ' ( ) �30h+ , W X Y � + , W X A � �
3ch
PCI� � � � Z [ \ ]
fchPCI
^ � ( _ `PCI
a G H b c � � �ID
� � � � �
ID
d e * f g W h 0 1 2 3 4
POWER.mech.eng.OCU
i j k l m n 5 j m 6 op q r s t u v w x y z
(Linux
å { | } ~ 9 � � � �
!!)– 19 / 38
insmod
� � � � � � � � � � � � � � � � � �� � � � � � � �
(init module)
� � � � � � � � � � � �insmod hoge
ノード(/dev/hoge)がなければ メジャー番号,マイナー番号 を指定して作成
init_module()
モジュールコマンド
カーネル
venderID,deviceIDから、該当のPCIインターフェースを探す
割付られているアドレスを探す
デバイス登録:メジャー番号 デバイス名 ファイルオペレーション
hoge.o(hoge.c)
ベンダID=venderIDデバイスID=deviceID
init_module が成功すれば lsmodで、デバイス名が現れる
¡ ¢ £ ¤ ¥ ¦ §kernel
¨ © ª « ¬ ® (
¯ ° ± ² ³ ¬ ´
...)
POWER.mech.eng.OCU
init module
p q r s t u v w x y z
(Linux
å { | } ~ µ � � � �
!!)– 20 / 38
less /proc/devices¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç ÈÉ Ê · Ë Ì Í Î » ¼ ½ ¾ Ï Â Ð Ñ Ò Ó Ô Õ� �Character devices:
1 mem
2 pty
3 ttyp
4 ttyS
180 usb
250 pci6202
251 pci6105
252 pci3310
253 pci2512
254 adm681
Block devices:
1 ramdisk
2 fd
3 ide0
9 md
� �
less /proc/ioportsÖ × Ë ¾ Â Ø Ù Ô Õ� �0000-001f : dma1
0020-003f : pic1
0040-005f : timer
1000-107f : eth0
2400-2413 : usb-uhci
2c00-2c1e : pci7404v
3000-300e : pci6202
f400-f41f : adm681� �
POWER.mech.eng.OCU
Ú l Û Ü
/dev/hoge
p q r s t u v w x y z
(Linux
Ý { | } ~ µ � � � �
!!)– 21 / 38
» Ë º ¿ Þ ß à
:node(
Þ ß à á â
)
ã É Ê · Ë Ì Í á ä ½ å Ë Ì Í Î æ ç Ò è Å é êë Ô Õ
ls /dev/pci*� �crw-rw-rw- 1 root root 253, 0 Sep 1 17:17 /dev/pci2512
crw-rw-rw- 1 root root 252, 0 Sep 1 17:17 /dev/pci3310
crw-rw-rw- 1 root root 251, 0 Sep 1 17:17 /dev/pci6105
crw-rw-rw- 1 root root 250, 0 Sep 1 17:17 /dev/pci6202
crw-rw-rw- 1 root root 249, 0 Sep 1 17:17 /dev/pci7404v� �
n /dev/hoge
Â Þ ß à
(
ì é ê) Õ
n
É Ê · Ë Ì Í í » ¼ ½ ¾ î ¸ ½ ¼ ã ï ð ë Ô Ç ñ ò ó ì Õ
kernel
Â Ì Í ã ô ß õ ö Ô Õn c:
¶ · ¸ ¹ º ÷ ã Ñ ë Õ/dev/ttyS0(
ø Ö ù ú û Ë ü),/dev/lp0(
ý Ö þ º)
 ÿ � � È Ó Å Æ Ô Õ
POWER.mech.eng.OCU
� � � � � Ú �
� � � � w � � �
(Linux
Ý � � � � µ � � � �
!!)– 22 / 38
insmod
ê � Ã » ¼ ½ ¾ î ¸ ½ ¼ Î � Ó Ô � � ò � � Ç ¿ Ã á Ë î ! " ù(I/F# Ë î
)
Î $ � Ó Ô Õ
デバイス入出力システムコール処理の流れ
ユーザ空間
システム空間
トラップ
システムコール・インターフェイス
デバイスドライバ モジュール
カーネル
ハードウェア
アプリケーション
システムコール・ライブラリ
ユーザ・ライブラリ
% & ' ( )
(
*
)
+ , - . / - , 0 1 2
Linux Kernel Conference 2004
3 4 5 6
POWER.mech.eng.OCU
7 8 9 : ; � < 8 ; Û =
(2)
� � � � w � � �
(Linux
Ý � � � � µ � � � �
!!)– 23 / 38
> ? @ A B C
(I/F
D ? @
)
E F G H I J K Lrmmod hoge cleanup_module()
モジュール
デバイス登録抹消
hoge.o(hoge.c)
プログラム
fdev=open(/dev/hoge,mode)
close(fdev) hoge_close()
hoge_open()
ioctl(fdev, func, arg) ioctl(node,file,func,arg) func_fuga() outb(データ,アドレス) inw(アドレス) copy_from_user(*arg,data.sizeof(data)) copy_to_user(*arg,data.sizeof(data)) etc..... (ファイルオペレーション)
インターフェースボードとおしゃべり
M N O P Q
open,read,write,ioctl
R Sfops(
T U V W X Y Z ? [ \ ]
)
^_ ` ` a L b c Gioctl
F d e(func)
^ f g h i j k l N L
POWER.mech.eng.OCU
m : n o p p
( )(2)
� � � � q � � �
(Linux
r � � � � s � � � �
!!)– 24 / 38
デバイス入出力システムコール処理の流れ(推測)
ユーザ空間
システム空間
トラップ
システムコール・インターフェイス
デバイスドライバ モジュール
カーネル
ハードウェア
アプリケーション
システムコール・ライブラリ
ユーザ・ライブラリ
open,ioctl
/dev/hoge
open,ioctl(fops)
copy_{to|from}_user
inw,outb
ioctl
^ t u v w x y z x f copy {to|from} user
^ { ? | } ~
(
� �
) L� � w Qfile
E � � � z L
POWER.mech.eng.OCU
� m � n � � � � �� � � � � � � q � � �
(Linux
r � � � � s � � � �
!!)– 25 / 38
Linux
� � W ¡ � ¢ \ ] £ ¤ i ¥ ¦ § ¨ © ª « ¬ N Lkernel 2.2 2.4 2.6® ¯ ° ±² ³ ´ µ pci find device pci find device pci register driver¶ · � ¸ ¹ º �» ¼ ´ µ pdev
½ ¾ ¿ À Á Â Ã
pci read config dword pci resource startÄ Å Æ �Ç È ´ µ register chrdev devfs regiter chrdev cdev add(
É Ê
)
n fops
k
init module
R S Ë © Ì Í Î ¬ Ï Ðn kernel2.6
Ñ Ò
udev
Ó Ô Î Õ Ö Ð(/dev/*
« × Ø Ù Ú Û Û Ü,devfs
Òudev
Ý Þ Ì ß Ø à á x z § á âã â Ï
)n
ä à Ý å | æ ç æ è ¢ é � ê ë ì í î Ø Ï Õ ï « ð Ï Ð
POWER.mech.eng.OCU
ñ ò ó ô õ
� � � � � � � ö � � �
(Linux
÷ � � � � ø � � � �
!!)– 26 / 38
ù ú û ü ý þ ÿ � � � Ñ å � ë � � � � í � ë � � å ç é � �� í � Ù Ï Ð� � � � � ÿ �
(realtime)
Ñ � � � ì � � � �(
� ) Ð
1.
� ë � é � � � � � ç � � ç í � � Ï(
� � ë) !
2. REAL-TIME
" � ð #
OS
í � � # !(a) Linux: RT-Linux,ART-Linux(b) µITRON(TOPPERS)� � ë $ % � � &(c)
' � (
POWER.mech.eng.OCU
Real Time Linux
) * + , - . / ö 0 1 2
(Linux
÷ 3 4 5 6 ø 7 8 9 :
!!)– 27 / 38
n RT-Linux:
; � < � = � % >
::GNU
� ? @ A B C � D � E F GH C � I J K L M
HDD
F N � � O P Q # C R..,non-free?
n Advanced Real Time Linux(ART Linux):
S T U V W X ý Y Z [ \L ] ^
(source-forge)
u 2009.3.16:kernel-2.6
_ ` a Z b c d ] !debian-4.0(etch,kernel-2.6.24.6),Ubuntu8.04
L _ Q #PATCH
ef g h i !
2.4→2.6
% j k l P � �(
m J n o) I � p j � q � C R rs t !
u 2.4
u M ; � < � v � j L _ Q # w � e f g h i !x y
:
J z {
M/B(chipsetp965
| })
Mkernel2.4
u % M ~ � C�
–2.6
_ ` F � � �SMP
L M � _ ` �
POWER.mech.eng.OCU
ART-Linux
) * + , - . / � 0 1 2
(Linux
� 3 4 5 6 � 7 8 9 :
!!)– 28 / 38
kernel
L
PATCH
Z � g � e I 3
@ { � � � � � � � � � � �� �#include <linux/art_task.h>
art_enter(ART_PRIO_MAX, ART_TASK_PERIODIC,1000);
/*
� � � � � � � � � � � � � � � � � � � � � ¡ ¢ £ ¤ ¥ ¦ �§ ¨ � � � § ¨
(usec) © */
for(;;){
art_weight(); /*
§ ¨ � ª « ¬ £ ® � ¯ ° ± ²*/
/*
³ ´ ¡ � µ ¶ ·*/
}
art_exit();
� �for
¸ ¹ º » b ¼ ½ ¾ � ¿ À � Á Â � Ã Ä ¼ � Å � { Æ Ç È É » Ê Ë �
jiffles
Ì Í Î Ï Ð Ñ Ò � Ó Î � Ô »....(
Õ Ö × Ø Ù × Ú Û Ü
) �
POWER.mech.eng.OCU
Ý Þ ß à
á â ã ä å æ ç è é ê ë
(Linux
ì í î ï ð ñ ò ó ô õ
!!)– 29 / 38
ö ÷ ø ù ú û
(
ü ý ø þ ü ÿ � ø þ ú û
)� � � � � � � � � � à � � Ì � � �� � � � � à � � � � � � � � �� ÷ ø ù ú û
(
ü ý ø þ � � � ú û
)� � � ! � � " � � � � # $ % & �1. PID
' (
(
) * + , -
) �2.
) * + # . / 0 ) * + 1 2 � ' ( 3 # 4 5 �6 7 ' ( 8 9 # : ; < = & � > : ? @ A B C ? : � D E �
POWER.mech.eng.OCU
PID
F G H I J K L M N O P
(Linux
Q R S T U V W X Y Z
!!)– 30 / 38
[ \ @ ]
PID
' ( ^ _ ` < a b c d & �
Gc(s) =U(s)
E(s)= kc{1 +
1
Tis+ Tds}
E(s) = R(s) − Y (s)
R(s)
� � �
Y (s)
e f 3 ! �
U(s)
' ( 3 ! �(
e f 3 g � � �)
kc
h i jTi I
k l m nTdD
k l m nτ
' ( o p(s)
k
q r s t
KP
u v h i j
KI
w x h i j
KD
y x h i jh i j z $ % { | 8 9 ^ } ~ ? � � � � < � � d � � & �
POWER.mech.eng.OCU
PID
� � � �
F G H I J K L M N O P
(Linux
Q R S T U V W X Y Z
!!)– 31 / 38
� � } { �
(It works!!)
� � � � � ] � � � � � � z { � � CHR
z {� � � � d � � � �
�X�e�b�v�����Å�å�ù�z
1
Ky
time sL
kc Ti Td
P
� � 1
KL- -
PI
� � 0.9
KL3.3L -
PID� � 1.2
KL2L 0.5L� ¡ ¢ } £ ¤ � � � ¥ ¦ � § ¨ � © �
PID
ª ¤ « ¬ �
u(k) = KP{r(k) − y(k)} + KI
k∑
i=0
{r(i) − y(i)} + KD{y(k − 1) − y(k)}
KP = kc −1
2KI , KI = kc
τ
Ti
, KD = kc
Td
τ
POWER.mech.eng.OCU
® ¯ ° ±
² ³ ´ µ ¶ · ¸ ¹ º » ¼
(Linux
½ ¾ ¿ À Á Â Ã Ä Å Æ
!!)– 32 / 38
Ç | È É � Ê Ë Ì Í Î
(
Ï Ð Í
) Ñ
1.
Ò ¨ � Ó Ô Õ Ö �
(a)
× Ø � Ù Ì £ Ú Û Ü Ý
F = mα = mv = mx
(b)
Þ ß à á ¤ â Ú ¡ ¢
:: ã ä å æ+
ç è é ê 1
1 + Tse−Ls
2.
Ò ¨ � ¤ � � Ú � ë � ì í î ï(a)
ð ñ ò ó ô õ ö î ÷ ø ù ú � Ñ →
� � û ü ý þ
(b)
ÿ � � � Ø � ø � � ù ú � Ñ →
� � û ü ý þ
n
� � � �:LQ
n
� � � � �::H
� � �,µ
� �,
� � � � � � � � � �
n
� ! " � # � �::STR(
$ % & ' ( � ) � � * + ( * � ,
),MRACS(
� � % - . / � 0 )1 2 ü 3 4 Ô Õ ü 3 5 6 Ï 7 8 � ø 4 9 2 : Ó ; û ü < 4ÿ � = ò ï > ? @ A B C ù D E ø F G H I
POWER.mech.eng.OCU
J K L
:
M N O O P J K QR S T U V W X Y Z [ \
(Linux
] ^ _ ` a b c d e f
!!)– 33 / 38
FuelInjectorThrottle
Valve
TWC
吸気質量 燃料質量
混合爆発
排気Ignite
Pi
Te
TeTe=f(θ,ne)
Te
ne
Te =
Pi
CA
TVO(θ)
ne
θ
time
time
K1+Tsθ
g h i j 4 k l m n o p(Te = f(θ, ne))
7 q l r s 1
1 + Ts
t 4 ? uv u w x y A z { 5 | } x < I
POWER.mech.eng.OCUL
:GUI
~ �R S T U V W X Y Z [ \
(Linux
] ^ _ ` a b c d e f
!!)– 34 / 38
� = � u � � � � � w � � u � � � � � �
GUI(Kylix)
POWER.mech.eng.OCUM
R S T U V W X Y Z [ \
(Linux
] ^ _ ` a b c d e f
!!)– 35 / 38
Image
SteeringMotor DrivingMotor
SpeedSensor
YawrateSensor1394 ART-Linux
P-M 2.0GHzA/D
A/D
PWM
PulseCount
FB target
θ LLx
FFtarget
50pixel
FBtarget
FFtarget
Ly
POWER.mech.eng.OCU
� L � � L ~ P � � �R S T U V W X Y Z [ \
(Linux
] ^ _ ` a b c d e f
!!)– 36 / 38
Modelcar
Monitoring Camera PCCable
Wireless LAN
PC
WiPort
CPUボード(H8/3048F)
モータドライブ基盤
モータサーボ
ロータリエンコーダヨーレートセンサ
無線LANボード
模型車両
CPU
モニタ
駆動系電源制御系電源
WiPort用電源
カメラ画像データ
カメラ
画像センサデータ
制御命令センサデータ
センサデータ
センサデータ
センサデータ
制御命令
制御命令
制御命令
5V
3.3V
5V
運動制御
POWER.mech.eng.OCU
� L � � L ~ P � � �R S T U V W X Y Z [ \
(Linux
] ^ _ ` a b c d e f
!!)– 37 / 38
0(x0,y0) 2(x2,y2)
8(x8,y8)5(x5,y5)
4(x4,y4)
6(x6,y6)
3(x3,y3)
7(x7,y7)
R2
R140pixel
① ①②
Θ'
(1)Θ'>=0°かつΘ'<=90°のとき 減速
(2)Θ'>90°のとき
Θ' 停止または旋回して回避
(3)衝突しないとき
そのまま走行
POWER.mech.eng.OCU
� � �
R S T U V W X Y Z [ \
(Linux
] ^ _ ` a b c d e f
!!)– 38 / 38
Linux&GNU free !!