SH-Linux Kernel Switcher (v1.2)
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
*はじめに [#fc80b841]
本ソフトウェアはKernelの切り替えを動的に行うプログラムで...
~
最近、2.6カーネルが動き出したり、SH-Linuxのホームページに...
SH版 Fedora Core 2 互換パッケージ等が公開されてたりして、~
SH-Linux周辺に新たな動きがあります。~
~
それらを見て、私もカーネルを変更したくなりまして。。。~
しかし、LANDISKの箱を開けたくなかったのと、システムを壊し...
本プログラムの作成を思い立った次第です。~
なお、本ソフトウェアは、mipsマシンに実装されているakmemや~
2.6カーネルで実装されるといわれるkexec等の思想をそっくり...
*ソフトウェアの構成と動作概略 [#df70989c]
-''概略''~
本ソフトウェアは次の2つのパーツから構成されています。~
kernelsw.pl ・・・ フロントエンドスクリプト~
kernelsw.o ・・・ デバイスドライバモジュール~
~
kernelsw.plは、kernelsw.oへ、Kernel起動パラメータとKernel...
kernelsw.oは上記スクリプトから送られてくるパラメータとイ...
再配置して、新Kernelの起動を行うプログラムです。~
~
-''kerneksw.o(ver1.2)の状態遷移図''~
~
~
&ref(kernelsw_state.png,nolink);~
~
*使用方法 [#f05044cf]
-''デバイスファイル/dev/kernelsw(c,52,0)の作成''~
本デバイスドライバモジュールはキャラクタ型デバイスとして...
/dev/kernelsw(c,52,0)を経由して情報のやりとりを行います。~
~
次のコマンドで/dev/kernelsw(c,52,0)の作成を行います。~
# mount -o rw,remount / # RWでリマウント
# mknod /dev/kernelsw c 52 0 # デバイスファイルの作成
# chmod 600 /dev/kernelsw
# mount -o ro,remount / # Read-onlyに戻す
-''起動するカーネルイメージなどの設定''~
kernelsw.plはperlスクリプトです。~
スクリプトの9〜12行目に必要なパラメータをセットします。~
--$image: 圧縮されたカーネルイメージを指定します。~
--$root: rootファイルシステムを指定します。~
--$readonly: rootファイルシステムを書き込み不可でマウント...
--$append: カーネルに渡すパラメータを指定します。~
--@stop_command: 新カーネルへスイッチする直前に実行させた...
-
以下はLANDISKのオリジナルカーネルの設定です。
########################################
$image ="/boot/zImage";
$root ="/dev/hda1";
$readonly = 1;
$append ="mem=64M console=ttySC1,9600";
以下は、deamon類を停止するコマンド群です。~
@stop_command=(
'/mnt/hda3/debian_stop >& /dev/null',
'/etc/rc.d/init.d/S99shutdown stop >& /dev/null',
'/etc/rc.d/init.d/S99reset_daemon stop >& /dev/null',
'/etc/rc.d/init.d/S98UPnPResponder stop >& /dev/null',
'/etc/rc.d/init.d/S95httpd stop >& /dev/null',
'/etc/rc.d/init.d/S92netatalk stop >& /dev/null',
'/etc/rc.d/init.d/S91samba stop >& /dev/null',
'/etc/rc.d/init.d/S60lpd stop >& /dev/null',
'/etc/rc.d/init.d/S40cron stop >& /dev/null',
'/bin/umount -r /dev/hda3 >& /dev/null',
#'/etc/rc.d/init.d/S20network stop >& /dev/null',
#'/etc/rc.d/init.d/S15inet stop >& /dev/null',
);
#########################################
-''新カーネルの起動(ソフトウェアの実行)''~
本プログラムを実行すると実行中の旧カーネルは破壊されます。~
その状態を例えると、&color(red){''プログラム実行中に、電...
~
従って、プログラムを実行する前に、実行中のプロセスを可能...
さらに、ファイルシステムを可能な限りアンマウント、もしく...
(この辺も自動化したかったのですが、やり方がわからなかっ...
~
まず、本ソフトウェアを実行する前に、新カーネルとルートフ...
次に、kernelsw.plへカーネルの指定や起動パラメータの設定を...
最後に、kernelsw.oとkernelsw.plが置かれた場所で、以下のコ...
新カーネルへのスイッチ動作が開始されます。
# ./kernelsw.pl
=========================================
SH-Linux Kernel Switcher V1.2
-----------------------------------------
image = /boot/zImage (size:978185)
root = /dev/hda1 (read only)
append = "mem=64M console=ttySC1,9600"
=========================================
Loading ....
~
5秒くらいたつとLANDISKのLEDが全て消えます。
これはカーネルの転送が終了したことを示しています。~
その後、赤いLEDが点灯します。この間、本プログラムは、カー...
再配置が完了すると、赤と緑の両方のLEDが点灯して、新カーネ...
~
ここからは、本プログラムの動作を離れ、カーネル自身のコー...
カーネルは、通常圧縮された状態にあるので、自らその圧縮を...
カーネルは初期化後、ルートファイルシステムをマウントして...
そして、そのinitから、芋ズル式に各プログラムが起動され、...
~
-''制限事項''~
--カーネルサイズの上限は、2MB(2,097,152バイト)です。~
--SH4アーキテクチャのみ対応しています。(LANDISKアーキテク...
*参考文献 [#lf315461]
-[[LinuxSH:http://linuxsh.sourceforge.net/docs.php3]]~
SH-IPL Sequence,LILO Sequence,LinuxSH Kernel Boot Sequenc...
SH-Linuxの起動のシーケンスが非常に参考になりました。
-[[SH Linux TIPS:http://www.si-linux.com/labo/shlinux/]]~
デバイスドライバの書き方を参考にさせて頂きました。~
-[[LANDISK - mizore Wiki:http://www.mizore.jp/wiki/index....
唯一のデバッグ手段がLEDでしたので、その解析ネタが非常に参...
-[[プロジェクトiohack:http://sourceforge.jp/projects/ioha...
LANDISKのKernelを含むソースコード一式いただきました。~
-SH4のプログラミングマニュアル~
*人柱になっても良いという方へ [#scd63895]
非常に危険なプログラムですが、使ってみたいという方はどう...
次の場所へソースを含め、一式置いておきます。~
http://eggplant.ddo.jp/www/download/SH-Linux_Kernel_Switc...
~
*今後の方針 [#x3891917]
&color(red){''「プログラム実行中に、電源が突然落ちたに等...
の問題を解決したいと考えています。~
~
シャットダウンの最終フェーズでは、必ず/sbin/rebootか/sbin...
該コマンドが実行される時、メモリ上に新カーネルが格納され...
そうでないなら従来のコマンドを実行するような仕組みをreboo...
~
問題は、メモリ内に確保してあるカーネルイメージが、デバイ...
スワップアウトされる可能性があるため、一筋縄ではいきそう...
~
この辺のメカニズムについて、詳しい方がいらっしゃいました...
-追記:自己解決~
デバイスをcloseするとき自分でメモリを開放していました。汗~
Ver2.0で本問題を解決しました。~
~
#counter
終了行:
*はじめに [#fc80b841]
本ソフトウェアはKernelの切り替えを動的に行うプログラムで...
~
最近、2.6カーネルが動き出したり、SH-Linuxのホームページに...
SH版 Fedora Core 2 互換パッケージ等が公開されてたりして、~
SH-Linux周辺に新たな動きがあります。~
~
それらを見て、私もカーネルを変更したくなりまして。。。~
しかし、LANDISKの箱を開けたくなかったのと、システムを壊し...
本プログラムの作成を思い立った次第です。~
なお、本ソフトウェアは、mipsマシンに実装されているakmemや~
2.6カーネルで実装されるといわれるkexec等の思想をそっくり...
*ソフトウェアの構成と動作概略 [#df70989c]
-''概略''~
本ソフトウェアは次の2つのパーツから構成されています。~
kernelsw.pl ・・・ フロントエンドスクリプト~
kernelsw.o ・・・ デバイスドライバモジュール~
~
kernelsw.plは、kernelsw.oへ、Kernel起動パラメータとKernel...
kernelsw.oは上記スクリプトから送られてくるパラメータとイ...
再配置して、新Kernelの起動を行うプログラムです。~
~
-''kerneksw.o(ver1.2)の状態遷移図''~
~
~
&ref(kernelsw_state.png,nolink);~
~
*使用方法 [#f05044cf]
-''デバイスファイル/dev/kernelsw(c,52,0)の作成''~
本デバイスドライバモジュールはキャラクタ型デバイスとして...
/dev/kernelsw(c,52,0)を経由して情報のやりとりを行います。~
~
次のコマンドで/dev/kernelsw(c,52,0)の作成を行います。~
# mount -o rw,remount / # RWでリマウント
# mknod /dev/kernelsw c 52 0 # デバイスファイルの作成
# chmod 600 /dev/kernelsw
# mount -o ro,remount / # Read-onlyに戻す
-''起動するカーネルイメージなどの設定''~
kernelsw.plはperlスクリプトです。~
スクリプトの9〜12行目に必要なパラメータをセットします。~
--$image: 圧縮されたカーネルイメージを指定します。~
--$root: rootファイルシステムを指定します。~
--$readonly: rootファイルシステムを書き込み不可でマウント...
--$append: カーネルに渡すパラメータを指定します。~
--@stop_command: 新カーネルへスイッチする直前に実行させた...
-
以下はLANDISKのオリジナルカーネルの設定です。
########################################
$image ="/boot/zImage";
$root ="/dev/hda1";
$readonly = 1;
$append ="mem=64M console=ttySC1,9600";
以下は、deamon類を停止するコマンド群です。~
@stop_command=(
'/mnt/hda3/debian_stop >& /dev/null',
'/etc/rc.d/init.d/S99shutdown stop >& /dev/null',
'/etc/rc.d/init.d/S99reset_daemon stop >& /dev/null',
'/etc/rc.d/init.d/S98UPnPResponder stop >& /dev/null',
'/etc/rc.d/init.d/S95httpd stop >& /dev/null',
'/etc/rc.d/init.d/S92netatalk stop >& /dev/null',
'/etc/rc.d/init.d/S91samba stop >& /dev/null',
'/etc/rc.d/init.d/S60lpd stop >& /dev/null',
'/etc/rc.d/init.d/S40cron stop >& /dev/null',
'/bin/umount -r /dev/hda3 >& /dev/null',
#'/etc/rc.d/init.d/S20network stop >& /dev/null',
#'/etc/rc.d/init.d/S15inet stop >& /dev/null',
);
#########################################
-''新カーネルの起動(ソフトウェアの実行)''~
本プログラムを実行すると実行中の旧カーネルは破壊されます。~
その状態を例えると、&color(red){''プログラム実行中に、電...
~
従って、プログラムを実行する前に、実行中のプロセスを可能...
さらに、ファイルシステムを可能な限りアンマウント、もしく...
(この辺も自動化したかったのですが、やり方がわからなかっ...
~
まず、本ソフトウェアを実行する前に、新カーネルとルートフ...
次に、kernelsw.plへカーネルの指定や起動パラメータの設定を...
最後に、kernelsw.oとkernelsw.plが置かれた場所で、以下のコ...
新カーネルへのスイッチ動作が開始されます。
# ./kernelsw.pl
=========================================
SH-Linux Kernel Switcher V1.2
-----------------------------------------
image = /boot/zImage (size:978185)
root = /dev/hda1 (read only)
append = "mem=64M console=ttySC1,9600"
=========================================
Loading ....
~
5秒くらいたつとLANDISKのLEDが全て消えます。
これはカーネルの転送が終了したことを示しています。~
その後、赤いLEDが点灯します。この間、本プログラムは、カー...
再配置が完了すると、赤と緑の両方のLEDが点灯して、新カーネ...
~
ここからは、本プログラムの動作を離れ、カーネル自身のコー...
カーネルは、通常圧縮された状態にあるので、自らその圧縮を...
カーネルは初期化後、ルートファイルシステムをマウントして...
そして、そのinitから、芋ズル式に各プログラムが起動され、...
~
-''制限事項''~
--カーネルサイズの上限は、2MB(2,097,152バイト)です。~
--SH4アーキテクチャのみ対応しています。(LANDISKアーキテク...
*参考文献 [#lf315461]
-[[LinuxSH:http://linuxsh.sourceforge.net/docs.php3]]~
SH-IPL Sequence,LILO Sequence,LinuxSH Kernel Boot Sequenc...
SH-Linuxの起動のシーケンスが非常に参考になりました。
-[[SH Linux TIPS:http://www.si-linux.com/labo/shlinux/]]~
デバイスドライバの書き方を参考にさせて頂きました。~
-[[LANDISK - mizore Wiki:http://www.mizore.jp/wiki/index....
唯一のデバッグ手段がLEDでしたので、その解析ネタが非常に参...
-[[プロジェクトiohack:http://sourceforge.jp/projects/ioha...
LANDISKのKernelを含むソースコード一式いただきました。~
-SH4のプログラミングマニュアル~
*人柱になっても良いという方へ [#scd63895]
非常に危険なプログラムですが、使ってみたいという方はどう...
次の場所へソースを含め、一式置いておきます。~
http://eggplant.ddo.jp/www/download/SH-Linux_Kernel_Switc...
~
*今後の方針 [#x3891917]
&color(red){''「プログラム実行中に、電源が突然落ちたに等...
の問題を解決したいと考えています。~
~
シャットダウンの最終フェーズでは、必ず/sbin/rebootか/sbin...
該コマンドが実行される時、メモリ上に新カーネルが格納され...
そうでないなら従来のコマンドを実行するような仕組みをreboo...
~
問題は、メモリ内に確保してあるカーネルイメージが、デバイ...
スワップアウトされる可能性があるため、一筋縄ではいきそう...
~
この辺のメカニズムについて、詳しい方がいらっしゃいました...
-追記:自己解決~
デバイスをcloseするとき自分でメモリを開放していました。汗~
Ver2.0で本問題を解決しました。~
~
#counter
ページ名: