📄 linux.txt
字号:
♂ TOPPERS/JSPカ〖ネル ユ〖ザズマニュアル ♂ (Linux シュミレ〖ション茨董) ∈Release 1.3滦炳·呵姜构糠: 11-Apr-2001∷------------------------------------------------------------------------ TOPPERS/JSP Kernel Toyohashi Open Platform for Embedded Real-Time Systems/ Just Standard Profile Kernel Copyright (C) 2000,2001 by Embedded and Real-Time Systems Laboratory Toyohashi Univ. of Technology, JAPAN 惧淡螟侯涪荚は·Free Software Foundation によって给山されている GNU General Public License の Version 2 に淡揭されている掘凤か·笆 布の(1)×(4)の掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェ アを猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· 网脱と钙ぶ∷することを痰浸で钓满するˉ (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 スコ〖ド面に崔まれていることˉ (2) 塑ソフトウェアを浩网脱材墙なバイナリコ〖ド∈リロケ〖タブルオブ ジェクトファイルやライブラリなど∷の妨で网脱する眷圭には·网脱 に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯涪山绩· この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ (3) 塑ソフトウェアを浩网脱稍材墙なバイナリコ〖ドの妨または怠达に寥 み哈んだ妨で网脱する眷圭には·肌のいずれかの掘凤を塔たすことˉ (a) 网脱に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ (b) 网脱の妨轮を·侍に年める数恕によって·惧淡螟侯涪荚に鼠桂する ことˉ (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 巢からも·惧淡螟侯涪荚を倘勒することˉ 塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚は· 塑ソフトウェアに簇して·その努脱材墙拉も崔めて·いかなる瘦沮も乖わ ないˉまた·塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じたい かなる禄巢に簇しても·その勒扦を砷わないˉ @(#) $Id: linux.txt,v 1.10 2002/04/11 04:18:21 honda Exp $------------------------------------------------------------------------1ˉLinux 惧での瓢侯茨董の车妥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.0,2.1,2.1.5 ˇDebian GNU/Linux 2.1,2.2なお·Debian GNU/Linux では·binutils-dev パッケ〖ジがインスト〖ルされている涩妥があるˉ1.3. 充哈みLinux 惧のシミュレ〖ション茨董では、シグナルが充哈みに滦炳するˉシグナルハンドラは充哈みハンドラとして胺われ、シグナルマスクが充哈みマスクに滦炳する。ユ〖ザがシグナルハンドラを年盗することも材墙であるが、办年のル〖ルに骄うことが涩妥である。Linux のシグナルの柒、SIGUSR1 弹瓢箕借妄、タスクディスパッチ借妄のために脱いているため、ユ〖ザが网脱することはできない。また、SIGALRM はカ〖ネル柒のタイマ充哈みとして脱いているˉ肋年によっては·SIGIO のハンドラもカ〖ネル柒で年盗される∈SIGIO の胺いについては3鞠を徊救∷。1.4. 箕粗瓷妄件袋充哈みの粗持は 10ミリ擅を筛洁としているが、タ〖ゲット巴赂のタイマモジュ〖ルのみの饯赖で恃构できる。シミュレ〖ション茨董链挛が 1つのプロセスとして悸乖されるため·シミュレ〖ション茨董链挛に充り碰てられる CPU箕粗が UNIX のスケジュ〖ラによって疯められる。そのため、光い箕粗篮刨を袋略することはできない。2ˉシステムコ〖ル慌屯の般い笆布では·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/O3.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ˉインスト〖ルˇその戮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]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -