mac 上でサーバを構築中です。
mac はもともといろんなものが入ってるんですねー。らくちんらくちん。
その時のざっくりメモ。
・Apache
システム環境設定→共有→Web共有をON
・PHP
/etc/apache2/httpd.conf 内でPHPの記述がコメントアウトされているのを外す。
# LoadModule php5_module libexec/apache2/libphp5.so
・MySQL
ここからダウンロードしてインストール。
MySQL.prefPaneをクリックすることで、システム環境設定の項目からMySQLを操作することが可能に。
これで使えるようになるはずなのだけど、パスワードの設定がよく分からなくなってしまったので
もう一度インストールスクリプトを動かしてみた。
コマンドラインから
$sudo /usr/local/mysql/scripts/mysql_install_db
で、パスワードとか設定しておしまい。
・phpMyAdmin
GUIで楽に操作できるようにするためにはブラウザからMySQL操作できるこれが便利だとのことだったので、
ここからダウンロードしてインストール。
で、フォルダ名をphpMyAdminに変えて、フォルダごとまるまる/Library/WebServer/Documents/へ移動。
これで、http://localhost/phpmyadmin/からこのこが見えるようになりました。
のですが、MySQLで設定したユーザ&パスワードで入れない。。。
2002エラーが出ました。
調べてみたら、これはPHPがMySQLのソケットの位置を勘違いしているのが原因だそう。
(参照元:Mac にphpMyAdmin を入れる手順 - Slow Dance)
なので、まずMySQLの設定ファイルでソケットの位置を指定。
$ sudo emacs /etc/my.cnf
以下を記述。
[mysqld]
socket=/tmp/mysql.sock
PHPの設定ファイルを作成。
$ sudo cp /private/etc/php.ini.default /etc/php.ini
この/etc/php.ini内のMySQLソケットの設定を上記の記述と合わせる。
mysql.default_socket = /tmp/mysql.sock
Apacheを再起動して(Web共有のチェックを外して入れ直す)
めでたくログインできました*
やっとスタート地点にたてた(*-*;;;;)
ちなみにばっちり文字化けしました。。w
artful xampp:Mysqlに関するPHPMyAdminの文字化けで解決!
2010年11月9日火曜日
MySQL トラブル
ファイル破壊されまくり…
●テーブルが壊れた
ログインして,
mysql> check table 壊れたテーブル名
で原因が分かる
mysql> repair table 壊れたテーブル名
で直る
…らしいけどこれだと直らないことが多い気がする(^^;)
なので私の場合全部のデータが入っているフォルダ( /usr/local/mysql/var/データベース名 )
のバックアップを取っておいて,
壊れたテーブルの分だけデータを上書きしてやって無理矢理修復しました.
●ログインできなくなった(ユーザテーブルが壊れてた)
とりあえず kill でサーバを一度落として,
--skip-grant-tables オプションを指定して mysqld を再起動.
すると,どんなユーザでもログインできるようになるため,中に入ってから
mysql> select host,user,password from mysql.user;
でログインできるユーザを確認.
すると,ユーザテーブルが壊れてることが発覚したため,上記の repair で修復.
なんだかがっつりユーザが削除されてしまったので,
mysql> GRANT ALL PRIVILEGES ON *.* TO ユーザ名 IDENTIFIED BY 'パスワード' WITH GRANT OPTION;
で権限を持つユーザの追加.
●テーブルが壊れた
ログインして,
mysql> check table 壊れたテーブル名
で原因が分かる
mysql> repair table 壊れたテーブル名
で直る
…らしいけどこれだと直らないことが多い気がする(^^;)
なので私の場合全部のデータが入っているフォルダ( /usr/local/mysql/var/データベース名 )
のバックアップを取っておいて,
壊れたテーブルの分だけデータを上書きしてやって無理矢理修復しました.
●ログインできなくなった(ユーザテーブルが壊れてた)
とりあえず kill でサーバを一度落として,
--skip-grant-tables オプションを指定して mysqld を再起動.
すると,どんなユーザでもログインできるようになるため,中に入ってから
mysql> select host,user,password from mysql.user;
でログインできるユーザを確認.
すると,ユーザテーブルが壊れてることが発覚したため,上記の repair で修復.
なんだかがっつりユーザが削除されてしまったので,
mysql> GRANT ALL PRIVILEGES ON *.* TO ユーザ名 IDENTIFIED BY 'パスワード' WITH GRANT OPTION;
で権限を持つユーザの追加.
2010年10月20日水曜日
OProfile コールグラフの使い方
# opcontrol --start && [filepath]
# opcontrol --stop
# opreport -c [filepath] or # opreport -c | grep [filename]
gcc -g でコンパイルしておけば,opannotate が使えて,プロファイリング後に
# opannotate -s [filepath]
とするとソースコード内で何行目が何回呼ばれたかが分かるっていう優れもの.
こりゃ便利.
しかし全体プロファイリングするんじゃなくてとあるアプリケーションのコールグラフだけ欲しいんだよなー.
とあるアプリケーションだけのプロファイル方法を調べなきゃ.
# opcontrol --stop
# opreport -c [filepath] or # opreport -c | grep [filename]
gcc -g でコンパイルしておけば,opannotate が使えて,プロファイリング後に
# opannotate -s [filepath]
とするとソースコード内で何行目が何回呼ばれたかが分かるっていう優れもの.
こりゃ便利.
しかし全体プロファイリングするんじゃなくてとあるアプリケーションのコールグラフだけ欲しいんだよなー.
とあるアプリケーションだけのプロファイル方法を調べなきゃ.
2010年10月19日火曜日
OProfileインストール
gprof だとマルチスレッドのアプリケーションのプロファイルがとれないという噂だったので,
OProf を使うことになりました.
OProf は gprof 同様,コールグラフもとれるし,マルチスレッドにも対応している優れものらしい.
インストール時のメモ.
まずはDownload OProfileから最新版のソースをダウンロード.
./configure をしたところ,ライブラリがいくつかないと言われた.
①configure: error: popt library not found
なので単純に yum install popt* で,poptライブラリをゲット.
(popt-devel.i386 : Development files for the popt library
popt-static.i386 : Static library for parsing command line parameters)
②configure: error: liberty library not found
yum で liberty を探しても見つからない.
ぐぐってみたら,Installing Oprofile | KernelTrapにいきついた.
そこで,yum install binutils-devel で,libertyライブラリをゲット.
(binutils-devel.i386 : BFD and opcodes static libraries and header files)
これで無事に ./congfigure → make → make install と,インストールを終えられた.
あとは
# opcontrol --start でプロファイル開始
# opcontrol --shutdown でプロファイル終了
# opreport でプロファイル結果の表示
/var/lib/oprofile/samples 内にデータが保存されていくようです.
これを変えたい場合は,--session-dir=で指定すればOK
取り急ぎここまで.
OProf を使うことになりました.
OProf は gprof 同様,コールグラフもとれるし,マルチスレッドにも対応している優れものらしい.
インストール時のメモ.
まずはDownload OProfileから最新版のソースをダウンロード.
./configure をしたところ,ライブラリがいくつかないと言われた.
①configure: error: popt library not found
なので単純に yum install popt* で,poptライブラリをゲット.
(popt-devel.i386 : Development files for the popt library
popt-static.i386 : Static library for parsing command line parameters)
②configure: error: liberty library not found
yum で liberty を探しても見つからない.
ぐぐってみたら,Installing Oprofile | KernelTrapにいきついた.
そこで,yum install binutils-devel で,libertyライブラリをゲット.
(binutils-devel.i386 : BFD and opcodes static libraries and header files)
これで無事に ./congfigure → make → make install と,インストールを終えられた.
あとは
# opcontrol --start でプロファイル開始
# opcontrol --shutdown でプロファイル終了
# opreport でプロファイル結果の表示
/var/lib/oprofile/samples 内にデータが保存されていくようです.
これを変えたい場合は,--session-dir=で指定すればOK
取り急ぎここまで.
2010年8月31日火曜日
2010年8月25日水曜日
iPhoneアプリ開発の際お世話になっているサイト達
・開発を複数台で行う方法
[Mac][iPhone][develop] 1アカウントのみで出来る、iPhoneアプリの開発を複数台のMacで行う方法 - Ni chicha, ni limona -平均から抜けられない僕-
・「設定」の項目でアプリの設定を行う方法
iPhoneアプリ開発、その(44) 過去は捨てたとは言わせない|テン*シー*シー
iPhoneアプリ開発、その(45) シンクロニシティ? |テン*シー*シー
NSUserDefaultsはどこまで保存できるかチェック(1) - iPhoneアプリ開発まっしぐら★ - iPhoneアプリ開発グループ
・アプリの公開方法
目指せ!iPhoneアプリ開発エキスパート:第10回 App Storeでアプリを公開|gihyo.jp … 技術評論社
やっぱりGUIのあるプログラミングは楽しい。
大した物作ってないし、Objective-Cはまだまだ使い慣れないけど大分楽しんで出来てるな〜
それにしても周囲に恵まれているのに自分はまだまだ子供でウンザリです。
精神弱すぎ…( -_-)
[Mac][iPhone][develop] 1アカウントのみで出来る、iPhoneアプリの開発を複数台のMacで行う方法 - Ni chicha, ni limona -平均から抜けられない僕-
・「設定」の項目でアプリの設定を行う方法
iPhoneアプリ開発、その(44) 過去は捨てたとは言わせない|テン*シー*シー
iPhoneアプリ開発、その(45) シンクロニシティ? |テン*シー*シー
NSUserDefaultsはどこまで保存できるかチェック(1) - iPhoneアプリ開発まっしぐら★ - iPhoneアプリ開発グループ
・アプリの公開方法
目指せ!iPhoneアプリ開発エキスパート:第10回 App Storeでアプリを公開|gihyo.jp … 技術評論社
やっぱりGUIのあるプログラミングは楽しい。
大した物作ってないし、Objective-Cはまだまだ使い慣れないけど大分楽しんで出来てるな〜
それにしても周囲に恵まれているのに自分はまだまだ子供でウンザリです。
精神弱すぎ…( -_-)
2010年7月13日火曜日
カーネル内で一定時間ごとの動作を行う
カーネル内ってnanosleepとか使えないんですね(Linux-2.6.25)
関数の定義なかった(*_*)
なので、カーネルタイマーを使って一定時間ごとに動作を行うのが良さそうです。
下のページが詳しく書いてあってすごくわかりやすかった!!
のでとりあえずメモメモ。
カーネルタイマーを使う
jiffiesが単位になるから精度は10msってことかな。(HZによるけど)
関数の定義なかった(*_*)
なので、カーネルタイマーを使って一定時間ごとに動作を行うのが良さそうです。
下のページが詳しく書いてあってすごくわかりやすかった!!
のでとりあえずメモメモ。
カーネルタイマーを使う
jiffiesが単位になるから精度は10msってことかな。(HZによるけど)
2010年7月8日木曜日
MySQLをソースからインストール
めちゃ久々の投稿.
MySQLのインストールでこけたのでメモ.
ソースDLして,./configure をした後の make で2度こけました.
1)../depcomp: line 512: exec: g++: not found
→ yum install gcc-c++ で解決
2)./include/my_global.h:988: error: redeclaration of C++ built-in type ‘bool’
→ make clean
make distclean
した後はじめからやり直して無事 make 通りました.
ソースからインストールした場合ってアンインストールするのってどうするんだろう.
Makefileに特に記述ないぽいから,ディレクトリをがしがし消すのであっているのかな.
相変わらず謎なことだらけだな…
努力しないと.
そして make install したら
/usr/bin/install: memory exhausted
と言われた.
めっちゃメモリ残ってるのに何このエラー!
同じような状況の人が数人いたようなのですが,解決されてないのかな…困ったナ.
http://forums.mysql.com/read.php?11,224710
**7/9 追記**
configureの時にオプションで --with-low-memory をつけると解決するとありましたが,
私の場合ではそれでもだめでした.
selinuxに関するログをはいた後にこのエラーが出たので selinux を止めちゃうという対処法でとりあえずはインストールしてしまいました.
MySQLのインストールでこけたのでメモ.
ソースDLして,./configure をした後の make で2度こけました.
1)../depcomp: line 512: exec: g++: not found
→ yum install gcc-c++ で解決
2)./include/my_global.h:988: error: redeclaration of C++ built-in type ‘bool’
→ make clean
make distclean
した後はじめからやり直して無事 make 通りました.
ソースからインストールした場合ってアンインストールするのってどうするんだろう.
Makefileに特に記述ないぽいから,ディレクトリをがしがし消すのであっているのかな.
相変わらず謎なことだらけだな…
努力しないと.
そして make install したら
/usr/bin/install: memory exhausted
と言われた.
めっちゃメモリ残ってるのに何このエラー!
同じような状況の人が数人いたようなのですが,解決されてないのかな…困ったナ.
http://forums.mysql.com/read.php?11,224710
**7/9 追記**
configureの時にオプションで --with-low-memory をつけると解決するとありましたが,
私の場合ではそれでもだめでした.
selinuxに関するログをはいた後にこのエラーが出たので selinux を止めちゃうという対処法でとりあえずはインストールしてしまいました.
2010年5月13日木曜日
Ruby + R
統計にはRが便利!ということなので、使ってみようと思います。
最近Rubyでスクリプト書いているので、せっかくならそこで使えちゃえば楽かなと。
ということで、Ruby + R | アクトインディ技術部隊報告書を参考に。
・Rインストール
・RSRubyインストール
−RubyからRを呼び出すため
・使い方
require 'rubygems'
require 'rsruby'
r = RSRuby::instance
r.eval_R(<<-RCOMMAND)
# 実行したいコマンド
RCOMMANDS
ちなみにRの使い方に関してはR による統計処理が便利そう。
最近Rubyでスクリプト書いているので、せっかくならそこで使えちゃえば楽かなと。
ということで、Ruby + R | アクトインディ技術部隊報告書を参考に。
・Rインストール
・RSRubyインストール
−RubyからRを呼び出すため
・使い方
require 'rubygems'
require 'rsruby'
r = RSRuby::instance
r.eval_R(<<-RCOMMAND)
# 実行したいコマンド
RCOMMANDS
ちなみにRの使い方に関してはR による統計処理が便利そう。
2010年1月7日木曜日
メモリ関連のメモ
カーネル内でメモリを動的に確保するために使う kmalloc と vmalloc.
あれ,これの違いはなんだろう?と思い調べる.
●kmalloc:確保するメモリをスラブから取得している
-割り当てられたアドレス空間には物理ページがマッピング済みなのでページフォルトは起きない
-アドレス空間にマッピングされているページは連続
●vmalloc:vmalloc用の領域からアドレス空間を割り当て(kmallocの拡張版)
-割り当てられたアドレス空間には物理ページがマッピングされていない場合がある
-アドレス空間にマッピングされるページは非連続
という違いがあるよう.
kmalloc により確保した領域(というかスラブが確保した領域)は /proc/slabinfo で見られるようです.
vmallocの仕組みが未だにしっくりこない…(@_@)
ということで参考ページは以下.メモメモ.
スラブアロケータ - Linuxカーネルメモ
kmalloc,vmalloc - Linuxカーネルメモ
Omicron Linux/vmalloc
あれ,これの違いはなんだろう?と思い調べる.
●kmalloc:確保するメモリをスラブから取得している
-割り当てられたアドレス空間には物理ページがマッピング済みなのでページフォルトは起きない
-アドレス空間にマッピングされているページは連続
●vmalloc:vmalloc用の領域からアドレス空間を割り当て(kmallocの拡張版)
-割り当てられたアドレス空間には物理ページがマッピングされていない場合がある
-アドレス空間にマッピングされるページは非連続
という違いがあるよう.
kmalloc により確保した領域(というかスラブが確保した領域)は /proc/slabinfo で見られるようです.
vmallocの仕組みが未だにしっくりこない…(@_@)
ということで参考ページは以下.メモメモ.
スラブアロケータ - Linuxカーネルメモ
kmalloc,vmalloc - Linuxカーネルメモ
Omicron Linux/vmalloc
2010年1月6日水曜日
メモリの扱いで行き詰まり..
DATA型のbufのメモリを確保し,初期化し,ごにゃごにゃし,解放するという流れを作りたいのですが…
なんかかたまってしまう…(@_@)
#define MAXNUM 10
typedef struct
{
int now_pid;
u64 now_pmc0;
u64 now_tsc;
} DATA;
static DATA *buf;
…
buf = (DATA *)vmalloc(sizeof(DATA) * MAXNUM);
memset(buf, 0, sizeof(DATA) * MAXNUM);
…
vfree(buf);
きっと何かこのへんがおかしいんだろう….
WHERE?!?!
早く抜け出したい(>_<;)
1/7***
ちなみに
memset(buf, 0, sizeof(DATA) * MAXNUM);
の直前に
printk("buf add is 0x%08x\n",(ulong)buf);
をいれると動くっていう…(@_@)
1/8***
vmalloc ではなく kmalloc を用いれば printk を挟まなくてもうまく動きました..
vmalloc 領域の変なとこをさわっていたのかな?原因不明です..
が,とりあえず vmalloc 使うのはこわいんでやめておきます.
なんかかたまってしまう…(@_@)
#define MAXNUM 10
typedef struct
{
int now_pid;
u64 now_pmc0;
u64 now_tsc;
} DATA;
static DATA *buf;
…
buf = (DATA *)vmalloc(sizeof(DATA) * MAXNUM);
memset(buf, 0, sizeof(DATA) * MAXNUM);
…
vfree(buf);
きっと何かこのへんがおかしいんだろう….
WHERE?!?!
早く抜け出したい(>_<;)
1/7***
ちなみに
memset(buf, 0, sizeof(DATA) * MAXNUM);
の直前に
printk("buf add is 0x%08x\n",(ulong)buf);
をいれると動くっていう…(@_@)
1/8***
vmalloc ではなく kmalloc を用いれば printk を挟まなくてもうまく動きました..
vmalloc 領域の変なとこをさわっていたのかな?原因不明です..
が,とりあえず vmalloc 使うのはこわいんでやめておきます.
2009年12月5日土曜日
システム障害
最近よくシステム障害が起きているようなので,書き留めておきたいと思います.
●ロンドン証券取引所
-障害から復旧まで:
2009/11/25(英国時間) 障害発生(接続障害).取引停止.
-参照:
ロンドン証券取引所がシステム障害で取引停止 - ニュース:ITpro
●東京工業品取引所
-障害から復旧まで:
2009/11/27 障害発生.各取引を停止
取引システムの開発・運用保守を担当するNTTデータとともに原因究明
開発元のOMXテクノロジーにソフトの修正を依頼
テストで動作確認
2009/11/30 システム復旧
-原因:
受け付けた注文件数が最多となった際に,潜在バグが表面化したことによる
・メモリリーク
「気配値」の計算に使うプログラムが,使用したメモリ領域を削除していなかったために生じた.
注文を受信するにつれメモリの使用可能領域が減少し,計算が不可能となった.
・フェイルオーバーの際の切り替えシステムのバグ
取引システムは現用系と待機系のホットスタンバイ方式で二重化してある.
メモリ不足を受けた際に,本番処理が待機系に自動で切り替わるはずだったが,バグによりメモリ上の一部データを正常に引き継げなかった.
その結果,待機系システムでも気配値の計算が不可能となった.
-参照:
東工取のシステム障害、原因はナスダックOMX子会社製ソフトのバグ - ニュース:ITpro
●新幹線のエクスプレス予約
-障害から復旧まで:
2009/12/3 10:00 障害発生.
システムのサーバーを再起動し,自動改札機などとのデータの整合性や動作を確認
2009/12/3 13:00 システム復旧
-損害:
この3時間のシステム停止時間中,約1万人がシステムを利用不可能となった
-原因(12/5現在):
不明
-参照:
[続報]3時間後に復旧、新幹線のエクスプレス予約システム障害 - ニュース:ITpro
●その他(オマケ)
-秋はシステム障害の季節か:ITpro
:システム障害の詳細を開示しない企業が多いが,近年は情報公開をすることで高信頼システムを築いていこうとしている動きが多いとのこと.
こういう記事に目を通すことって大切だなぁと改めて思いました.
●ロンドン証券取引所
-障害から復旧まで:
2009/11/25(英国時間) 障害発生(接続障害).取引停止.
-参照:
ロンドン証券取引所がシステム障害で取引停止 - ニュース:ITpro
●東京工業品取引所
-障害から復旧まで:
2009/11/27 障害発生.各取引を停止
取引システムの開発・運用保守を担当するNTTデータとともに原因究明
開発元のOMXテクノロジーにソフトの修正を依頼
テストで動作確認
2009/11/30 システム復旧
-原因:
受け付けた注文件数が最多となった際に,潜在バグが表面化したことによる
・メモリリーク
「気配値」の計算に使うプログラムが,使用したメモリ領域を削除していなかったために生じた.
注文を受信するにつれメモリの使用可能領域が減少し,計算が不可能となった.
・フェイルオーバーの際の切り替えシステムのバグ
取引システムは現用系と待機系のホットスタンバイ方式で二重化してある.
メモリ不足を受けた際に,本番処理が待機系に自動で切り替わるはずだったが,バグによりメモリ上の一部データを正常に引き継げなかった.
その結果,待機系システムでも気配値の計算が不可能となった.
-参照:
東工取のシステム障害、原因はナスダックOMX子会社製ソフトのバグ - ニュース:ITpro
●新幹線のエクスプレス予約
-障害から復旧まで:
2009/12/3 10:00 障害発生.
システムのサーバーを再起動し,自動改札機などとのデータの整合性や動作を確認
2009/12/3 13:00 システム復旧
-損害:
この3時間のシステム停止時間中,約1万人がシステムを利用不可能となった
-原因(12/5現在):
不明
-参照:
[続報]3時間後に復旧、新幹線のエクスプレス予約システム障害 - ニュース:ITpro
●その他(オマケ)
-秋はシステム障害の季節か:ITpro
:システム障害の詳細を開示しない企業が多いが,近年は情報公開をすることで高信頼システムを築いていこうとしている動きが多いとのこと.
こういう記事に目を通すことって大切だなぁと改めて思いました.
2009年11月19日木曜日
システムコールの追加
Linux2.6.25カーネルにシステムコールの追加をするのでメモメモ.
ちなみにその時にx86? bit数?とかかなり初歩的なことが分かっていないことが発覚したので,それについても近いうちにまとめます.
●システムコールの追加のためにすること
1)システムコール番号の登録
2)システムコールテーブルに登録
3)追加するシステムコールのオブジェクトファイル名をMakefileに追記
4)ヘッダファイルの作成
5)システムコール本体の作成
6)カーネルの再構築
以下,詳しくやることを書いていきます.
1)システムコール番号の登録
include/asm/unistd_32.h に
#define __NR_システムコール名 システムコール番号
を追加.
/usr/include/asm/unistd_32.hにも同様に追記する
/*62bitb版OSの場合は,unistd_64.hに追記する*/
/*OSのbit数は$uname -iで調べました*/
2)システムコールテーブルに登録
arch/x86/kernel/syscall_table_32.S に
.long sys_システムコール名
を追加.
3)追加するシステムコールのオブジェクトファイル名をMakefileに追記
arch/x86/kernel/Makefile のobj-yの項目に
システムコール名.o
を追加.
4)ヘッダファイルの作成
4-1)カーネル空間用
include/linux/システムコール名.h を作成
#ifndef NR_システムコール名_H
#define NR_システムコール名_H
#include <linux/unistd.h>
#include <linux/linkage.h>
#define システムコール名(arg1) syscall(__NR_システムコール名, arg1)
#endif
4-2)ユーザ空間用
/usr/include/linux/システムコール名.h を作成
4-1で作成したヘッダファイルの#include <linux/linkage.h>を#include <linux/syscall.h>に変更したものを作成する
5)システムコール本体の作成
システムコール名.cというファイルを以下のように作成し,arch/x86/kernel/以下に保存する.
#include <linux/システムコール名.h>
asmlinkage 関数型 sys_システムコール名 (引数){
/* システムコールの内容を記述 */
}
6)カーネルの再構築
make bzImage && make install をした後に再起動!
システムコールをユーザモードプロセスから利用する場合は,ファイル内に#include <linux/システムコール名.h>を記述して利用する
これでいけるハズ
ちなみにその時にx86? bit数?とかかなり初歩的なことが分かっていないことが発覚したので,それについても近いうちにまとめます.
●システムコールの追加のためにすること
1)システムコール番号の登録
2)システムコールテーブルに登録
3)追加するシステムコールのオブジェクトファイル名をMakefileに追記
4)ヘッダファイルの作成
5)システムコール本体の作成
6)カーネルの再構築
以下,詳しくやることを書いていきます.
1)システムコール番号の登録
include/asm/unistd_32.h に
#define __NR_システムコール名 システムコール番号
を追加.
/usr/include/asm/unistd_32.hにも同様に追記する
/*62bitb版OSの場合は,unistd_64.hに追記する*/
/*OSのbit数は$uname -iで調べました*/
2)システムコールテーブルに登録
arch/x86/kernel/syscall_table_32.S に
.long sys_システムコール名
を追加.
3)追加するシステムコールのオブジェクトファイル名をMakefileに追記
arch/x86/kernel/Makefile のobj-yの項目に
システムコール名.o
を追加.
4)ヘッダファイルの作成
4-1)カーネル空間用
include/linux/システムコール名.h を作成
#ifndef NR_システムコール名_H
#define NR_システムコール名_H
#include <linux/unistd.h>
#include <linux/linkage.h>
#define システムコール名(arg1) syscall(__NR_システムコール名, arg1)
#endif
4-2)ユーザ空間用
/usr/include/linux/システムコール名.h を作成
4-1で作成したヘッダファイルの#include <linux/linkage.h>を#include <linux/syscall.h>に変更したものを作成する
5)システムコール本体の作成
システムコール名.cというファイルを以下のように作成し,arch/x86/kernel/以下に保存する.
#include <linux/システムコール名.h>
asmlinkage 関数型 sys_システムコール名 (引数){
/* システムコールの内容を記述 */
}
6)カーネルの再構築
make bzImage && make install をした後に再起動!
システムコールをユーザモードプロセスから利用する場合は,ファイル内に#include <linux/システムコール名.h>を記述して利用する
これでいけるハズ
2009年10月19日月曜日
kmalloc()/kfree()
カーネル内でメモリを確保/解放するための関数
●使い方
#include <slab.h>
void* kmalloc( size_t size, int flags );
void kfree( void* ptr );
sizeには確保したいバイト数,flagsには以下のどちらかを指定.
GFP_KERNEL:即座にメモリ領域を用意できない場合、メモリ管理機能がスワップアウト 等によって領域を確保するまでスリープする可能性がある
GFP_ATOMIC:スリープせずにメモリ領域を確保しようとする。 必要な領域が確保できない場合は失敗する。 割り込みハンドラやタスクレット、タイムアウトハンドラ等の プロセスコンテキストと無関係に実行される箇所ではこれを使う
●例
u8 *buffer;
buffer = kmalloc(1000, GFP_ATOMIC);
if (!buffer)
return -ENOMEM;
kfree(buffer);
/*u8とは符号なし1バイト整数型(0~255)を表す基本型.
<linux/types.h>をincludeして利用する*/
●参照ページ:
カーネルモジュールを作る
●使い方
#include <slab.h>
void* kmalloc( size_t size, int flags );
void kfree( void* ptr );
sizeには確保したいバイト数,flagsには以下のどちらかを指定.
GFP_KERNEL:即座にメモリ領域を用意できない場合、メモリ管理機能がスワップアウト 等によって領域を確保するまでスリープする可能性がある
GFP_ATOMIC:スリープせずにメモリ領域を確保しようとする。 必要な領域が確保できない場合は失敗する。 割り込みハンドラやタスクレット、タイムアウトハンドラ等の プロセスコンテキストと無関係に実行される箇所ではこれを使う
●例
u8 *buffer;
buffer = kmalloc(1000, GFP_ATOMIC);
if (!buffer)
return -ENOMEM;
kfree(buffer);
/*u8とは符号なし1バイト整数型(0~255)を表す基本型.
<linux/types.h>をincludeして利用する*/
●参照ページ:
カーネルモジュールを作る
2009年9月30日水曜日
RDMSR / WRMSR in C
MSR(Model Specific Register)を読み書きするための命令
どちらも実行できるのは特権モード(ring 0)のみ
これらを C の中で使うには gcc インラインアセンブラを用いればOK
#ちなみにこのへんの記述は perfctr では /usr/include/asm-x86/msr.h にありますね
●インラインアセンブラ表記法
asm volatile ("アセンブラテンプレート"
: "出力オペランド"
: "入力オペランド"
: "アセンブラの実行で変更されてしまうもの");
出力オペランドは "=a" (出力先変数),
入力オペランドは "a" (入力) のように表記する.
ここで,各レジスタは以下のように表記する.
"a" eax
"b" ebx
"c" ecx
"d" edx
"A" edx:eax(上位bitにedx,下位bitにeax)
"g" gccが適当なレジスタに割り当てる
●RDMSR
ecx レジスタに MSR のアドレスを指定すると,edx:eax レジスタに MSR の内容を読み込む(上位 32bit が edx ,下位 32bit が eax に入る)
e.g.
asm volatile("rdmsr" : "=a"(low), "=d"(high) : "c"(msr_addr));
asm volatile("rdmsr" : "=A"(val) : "c"(msr_addr));
●WRMSR
ecx レジスタに指定した MSR のアドレスに,edx:eax レジスタの内容を書き込む(〃)
e.g.
asm volatile("wrmsr" : : "c"(msr_addr), "=a"(low), "=d"(high) : "memory");
asm volatile("wrmsr" : : "c"(msr_addr), "=A"(val) : "memory");
参照ページ:
ほげほげまん: gccインラインアセンブラ
ほげほげまん: RDMSR / WRMSR
ほげほげまんめっちゃ分かりやすい.お世話になってますw
どちらも実行できるのは特権モード(ring 0)のみ
これらを C の中で使うには gcc インラインアセンブラを用いればOK
#ちなみにこのへんの記述は perfctr では /usr/include/asm-x86/msr.h にありますね
●インラインアセンブラ表記法
asm volatile ("アセンブラテンプレート"
: "出力オペランド"
: "入力オペランド"
: "アセンブラの実行で変更されてしまうもの");
出力オペランドは "=a" (出力先変数),
入力オペランドは "a" (入力) のように表記する.
ここで,各レジスタは以下のように表記する.
"a" eax
"b" ebx
"c" ecx
"d" edx
"A" edx:eax(上位bitにedx,下位bitにeax)
"g" gccが適当なレジスタに割り当てる
●RDMSR
ecx レジスタに MSR のアドレスを指定すると,edx:eax レジスタに MSR の内容を読み込む(上位 32bit が edx ,下位 32bit が eax に入る)
e.g.
asm volatile("rdmsr" : "=a"(low), "=d"(high) : "c"(msr_addr));
asm volatile("rdmsr" : "=A"(val) : "c"(msr_addr));
●WRMSR
ecx レジスタに指定した MSR のアドレスに,edx:eax レジスタの内容を書き込む(〃)
e.g.
asm volatile("wrmsr" : : "c"(msr_addr), "=a"(low), "=d"(high) : "memory");
asm volatile("wrmsr" : : "c"(msr_addr), "=A"(val) : "memory");
参照ページ:
ほげほげまん: gccインラインアセンブラ
ほげほげまん: RDMSR / WRMSR
ほげほげまんめっちゃ分かりやすい.お世話になってますw
2009年9月28日月曜日
コンテキストスイッチのソースコード
今後手を加える予定なのでここにメモしときます.
(Linux2.6.25 kernel)
●コンテキストスイッチをしている箇所
kenrel/sched.c 内 context_switch()
switch_mm() によってプロセス空間の切り替え,switch_to() によって各種レジスタの切り替えを行っている.
●コンテキストを切り替える際に保存する情報
task_structに格納している
:定義は include/linux/sched.h l994
更に,CPU依存の低レベルな実行コンテキストは thread_struct に格納している
:定義は include/asm-x86/processor.h l315
以下はソースコードコピペ(長すぎて邪魔だったので消しましたw 09/10/15)
(Linux2.6.25 kernel)
●コンテキストスイッチをしている箇所
kenrel/sched.c 内 context_switch()
switch_mm() によってプロセス空間の切り替え,switch_to() によって各種レジスタの切り替えを行っている.
●コンテキストを切り替える際に保存する情報
task_structに格納している
:定義は include/linux/sched.h l994
更に,CPU依存の低レベルな実行コンテキストは thread_struct に格納している
:定義は include/asm-x86/processor.h l315
以下はソースコードコピペ(長すぎて邪魔だったので消しましたw 09/10/15)
2009年9月23日水曜日
富士登山
やっと念願の富士登山に行ってきました!
友人との予定が合わず,9月下旬の登山になってしまったこと,そして最近運動不足で体力に自信がなかったこともあり,結構不安でした..
が!
ゆっくり休憩をとりながらコツコツ登り続けること計8時間.
天候にも恵まれ,高山病にもならず(若干の頭痛はずーっとありましたが),無事に登頂を果たし,ご来光を見ることができました.
登った日はおじいちゃんの命日だったから,きっとおじいちゃんが見守っていてくれたんだと思う.

ご来光だけでなく,雲海に映る影富士や夕焼けの空,真夜中の満天の星など…
普段見ることのできない幻想的な世界を堪能できました.

それになんだか,元気を貰いました.
コツコツやっていればちゃんと達成できるんだなぁと.
毎日コツコツ,時間を大切にしなくちゃいけないなと改めて感じました.
またこんな晴れ晴れした気持ちを味わえるように!
今日も充実してたなーと毎日思えるように!
毎日を過ごしていきたいと思います.

富士山ありがとう!
/*ここからメモ*/
●登山に持って行って良かったもの
・ヘッドライト
・ゼリー状の飲み物
・帽子,手袋,ホッカイロ
・チョコレート(甘い物は元気が出る!)
●持って行けば更に良かったなぁというもの
・冷えピタ
・マスク
あとやっぱり9月だからか,これでもかってくらい防寒してちょうど良かったです.
私の場合,山頂ではTシャツ+長袖シャツ+ジャージ+フリース+防水ジャケットでもこもこでしたw
あと,山頂の神社に行けなかったのはちょっと残念でした(8月20日までだったみたい)
以上!
せっかくグッズも集めたことだし,また登山に挑戦したいです♪
友人との予定が合わず,9月下旬の登山になってしまったこと,そして最近運動不足で体力に自信がなかったこともあり,結構不安でした..
が!
ゆっくり休憩をとりながらコツコツ登り続けること計8時間.
天候にも恵まれ,高山病にもならず(若干の頭痛はずーっとありましたが),無事に登頂を果たし,ご来光を見ることができました.
登った日はおじいちゃんの命日だったから,きっとおじいちゃんが見守っていてくれたんだと思う.
ご来光だけでなく,雲海に映る影富士や夕焼けの空,真夜中の満天の星など…
普段見ることのできない幻想的な世界を堪能できました.
それになんだか,元気を貰いました.
コツコツやっていればちゃんと達成できるんだなぁと.
毎日コツコツ,時間を大切にしなくちゃいけないなと改めて感じました.
またこんな晴れ晴れした気持ちを味わえるように!
今日も充実してたなーと毎日思えるように!
毎日を過ごしていきたいと思います.
富士山ありがとう!
/*ここからメモ*/
●登山に持って行って良かったもの
・ヘッドライト
・ゼリー状の飲み物
・帽子,手袋,ホッカイロ
・チョコレート(甘い物は元気が出る!)
●持って行けば更に良かったなぁというもの
・冷えピタ
・マスク
あとやっぱり9月だからか,これでもかってくらい防寒してちょうど良かったです.
私の場合,山頂ではTシャツ+長袖シャツ+ジャージ+フリース+防水ジャケットでもこもこでしたw
あと,山頂の神社に行けなかったのはちょっと残念でした(8月20日までだったみたい)
以上!
せっかくグッズも集めたことだし,また登山に挑戦したいです♪
2009年9月17日木曜日
クロスリファレンスLXR
カーネルのソースコードを参照しやすくするために入れました.
入れ方&使い方は全てここに集約されています.
ViVa! Saborigineer. - クロスリファレンス
とりあえず使い方だけメモメモ
1.lxr/sourceにソースファイルを展開
lxr/source/バージョン名/sourceとなるようにして作成
2.genxrefを使って、lxr/source/バージョン名/にデータベース(fileidx,xref)を作成
$ ../../bin/genxref source/
3.fileidx、xrefのアクセス権の変更
$ chmod 644 fileidx xref
4."freetext search"、"file search"用のインデックスを作成
$ cd /var/www/html/lxr/source/バージョン名/
$ glimpseindex -H . source
$ chmod 644 .glimpse_*
5.versionsにバージョン名を追加
デフォルトのバージョン名を変更する場合は、defversionを変更
とり急ぎメモだけ.
入れ方&使い方は全てここに集約されています.
ViVa! Saborigineer. - クロスリファレンス
とりあえず使い方だけメモメモ
1.lxr/sourceにソースファイルを展開
lxr/source/バージョン名/sourceとなるようにして作成
2.genxrefを使って、lxr/source/バージョン名/にデータベース(fileidx,xref)を作成
$ ../../bin/genxref source/
3.fileidx、xrefのアクセス権の変更
$ chmod 644 fileidx xref
4."freetext search"、"file search"用のインデックスを作成
$ cd /var/www/html/lxr/source/バージョン名/
$ glimpseindex -H . source
$ chmod 644 .glimpse_*
5.versionsにバージョン名を追加
デフォルトのバージョン名を変更する場合は、defversionを変更
とり急ぎメモだけ.
2009年6月17日水曜日
PostgreSQL on WindowsXP
再インストール→インストールする際に気をつけること
プログラムの追加と削除からpostgreSQLを削除するだけではアンインストールできたとは言えないようで,他にも色々消さなければいけませんでした.
#インストールの際に"アカウント名とセキュリティ id の間のマッピングは実行されませんでした。"なんていうエラーが出た
・コマンドプロンプトで net user とし,postgresユーザが存在したら削除
# net user postgres /delete
・C:\Program Files内,PostgreSQLフォルダ削除
・Document and Settings内postgresフォルダ削除
あとは,インストールの際に,"ユーザ名"にはpostgresを,"ドメイン"にはインストールしたコンピュータの名前を入れること!
これでちゃんとインストールできた…はずです(@_@;)
めんどくさい課題はさっさと片付けちゃおう...
プログラムの追加と削除からpostgreSQLを削除するだけではアンインストールできたとは言えないようで,他にも色々消さなければいけませんでした.
#インストールの際に"アカウント名とセキュリティ id の間のマッピングは実行されませんでした。"なんていうエラーが出た
・コマンドプロンプトで net user とし,postgresユーザが存在したら削除
# net user postgres /delete
・C:\Program Files内,PostgreSQLフォルダ削除
・Document and Settings内postgresフォルダ削除
あとは,インストールの際に,"ユーザ名"にはpostgresを,"ドメイン"にはインストールしたコンピュータの名前を入れること!
これでちゃんとインストールできた…はずです(@_@;)
めんどくさい課題はさっさと片付けちゃおう...
Project Natal
tex のコマンド検索してたはずが謎にこんなのを発見しましたw
Microsoftが発表したコントローラが必要ないゲームらしいのですが…
これどうなってるんですかね?!
カメラとかセンサとかどのくらい使ってるんだろう…
どのくらい誤検知するのかも気になっちゃいますw
ゲーム得意じゃないのであまりやりませんが,これはぜひ見てみたいです.
Microsoftが発表したコントローラが必要ないゲームらしいのですが…
これどうなってるんですかね?!
カメラとかセンサとかどのくらい使ってるんだろう…
どのくらい誤検知するのかも気になっちゃいますw
ゲーム得意じゃないのであまりやりませんが,これはぜひ見てみたいです.
登録:
投稿 (Atom)