2011年2月11日

GRUBが立ち上がらなくなったときの対応(Gentoo Linux インストールCD)

現在、Windows 7/Gentoo Linux/NetBSDという3つのOSをPCにインストールしていて、ブートローダにGRUBを利用しています。OSの再インストール等を実施していると稀にMBRが書き換えられてGRUBが立ち上がらないあるいはOSが何も立ち上がらないという状況になります。そんなときの対処方法に関して記載します。

僕はいつも、Gentoo Linuxをインストールした際に利用したインストールCDを利用してます。基本的な流れとしては、

  • インストールCDから起動
  • Gentoo Linuxのパーティションをマウント、chroot
  • GRUBの再設定

という流れです。以下がインストールCD起動からGRUB再設定までに必要なコマンドです。

    # swapon  /dev/sda2
    # mount /dev/sda3 /mnt/gentoo
    # mount /dev/sda1 /mnt/gentoo/boot
    # cd /mnt/gentoo
    # mount -t proc none /mnt/gentoo/proc
    # mount -o bind /dev /mnt/gentoo/dev
    # chroot /mnt/gentoo /bin/bash
    # grub


    grub>  root (hd0, 0)
    grub>  setup (hd0)

以上でMBRへのGRUB最設定が完了です。上記の方法はKnoppix等のLiveCDでもつかえるはずです。

2011年1月19日

とある場所で行われた会話

某メーカー新入社員 : 『いったい僕は、誰にために仕事をしているんだろう』

評論家 : 『お客様のためさ。それがメーカーが追及すべき唯一のことだから』
経営学者 : 『上司のために仕事するんだ。組織として機能するために必要だ』
哲学者気取り : 『自分のためにやりなよ。幸せを追及しないと、人生は無意味だよ』

某メーカー新入社員 : 『あぁ…、いったい僕はどうすればいいんだ』

通りすがりの英国人 : 『Take it easy. Que sera sera』

USB3.0ホストチップ(xHCI)の調査

USB3.0ホスト(xHCI)のチップってどんなのが市場に出ているのだろう?
ってことで、調べてみた。(2010/01/18時点の情報)

ルネサスエレクトロニクス
μPD720200  : PCIe Gen2 x 1、2ポート、
μPD720200A  : μPD720200に対して消費電力低減

FLESCO LOGIC
FL1009 : PCIe Gen1 x 1、2ポート
FL1010 : PCIe Gen2 x 1、2ポート

VIA Labs
VL800 : 4ポート

チップだと、これだけ。IPだとどうなんだろう。
PLDA : ホスト、デバイス両方のIP
Arasan : 同じくホスト、デバイス両方のIP

なお、ルネサスエレクトロニクスもIPを持っているらしい。
個人でこんなこと調べてどうなるわけでもないけど、念のため。

2011年1月9日

OProfileで取得可能なイベント

先日OProfileを初めて触ったが、どのようなイベントを取得できるのか調べてみた。OProfileで取得できるイベント種別は利用しているCPUにより異なる。
詳細はOProfileのドキュメントに記載されている『Event type reference』に記載されている。また、opcontrol コマンドの --list-events オプションで確認可能(あるいは ophelp コマンドでも確認できる)。私の環境だと以下のようになった。



% opcontrol --list-events
oprofile: available events for CPU type "Intel Architectural Perfmon"

See Intel 64 and IA-32 Architectures Software Developer's Manual
Volume 3B (Document 253669) Chapter 18 for architectural perfmon events
This is a limited set of fallback events because oprofile doesn't know your CPU
CPU_CLK_UNHALTED: (counter: all)
        Clock cycles when not halted (min count: 6000)
INST_RETIRED: (counter: all)
        number of instructions retired (min count: 6000)
LLC_MISSES: (counter: all)
        Last level cache demand requests from this core that missed the LLC (min count: 6000)
        Unit masks (default 0x41)
        ----------
        0x41: No unit mask
LLC_REFS: (counter: all)
        Last level cache demand requests from this core (min count: 6000)
        Unit masks (default 0x4f)
        ----------
        0x4f: No unit mask
BR_INST_RETIRED: (counter: all)
        number of branch instructions retired (min count: 500)
BR_MISS_PRED_RETIRED: (counter: all)
        number of mispredicted branches retired (precise) (min count: 500)



私が使っているCPU(Intel Core i5-560M)の場合だと、他のCPUに比べて取得できるイベント種別が少ない模様。

2011年1月3日

OProfileを使ってみる

LinuxカーネルのプロファイラであるOProfileを使ってみることにする。
始めて利用するので、今回はセットアップと超簡単な使い方のみ試してみる。

今回試した環境は、

  • システムは Gentoo Linux。カーネルバージョンは 2.6.36-gentoo-r6(Linux-2.6.36にGentoo向けパッチが当たっている)
  • PCは、ThinkPad X201を利用。CPUはIntel Core i5-540M


まずは環境のセットアップ。OProfileを利用するためにはLinuxカーネルでのサポートと専用ユーザランドのインストールが必要。Linuxカーネルのサポートは、CONFIG_OPROFILECONFIG_HAVE_OPROFILE のサポートがあれば最低限OKらしい。続いてユーザランドのインストール。Portageを使ってインストールする


  $ emerge  dev-util/oprofile


インストールしたらOProfileで簡単なプロファイルを行ってみる。


  $ sudo opcontrol  --vmlinux=/usr/src/linux/vmlinux
  $ sudo opcontrol  --start
  # プロファイルをとる任意のプログラムを実行
  $ sudo opcontrol --stop


以上でプログラムのトレース取得は成功。
なお、opcontrolで各種処理を行うにはroot権限が必要な模様。そのため、sudoコマンドを用いて行っている。

続いてプロファイル結果の表示


  $ opreport    # 全体の結果を表示
  $ opreport  (プログラム名)    #  該当するプログラムのみ
  $ opreport  -l  (プログラム名)  # ??
  $ opreport  -c (プログラム名)  # ??



opreportでの各種コマンドラインオプションの詳細は今回は未確認。今日のところはこれで終了。もっと詳細を後日見ていきたいと思う。

参考ページ
OProfile : http://oprofile.sourceforge.net/news/
OProfile Documents : http://oprofile.sourceforge.net/docs/

備考
OProfileのサポートCPUを見るとCore-i5は十分なサポートされていないのか??この点も後日確認したいと思う。
またOProfileの実行に伴い、/root/.oprofile/ ディレクトリが作成されて設定が保持される。
さらに実行時の各種詳細情報は /var/lib/oprofile/ ディレクトリ配下に記憶さえる模様。

2010年6月17日

Gentoo Linux の world を調べる方法

Gentoo Linux で portage を使用していると、依存するパッケージ等を自動で解決・インストールしてくれます。では、インストールしているパッケージで「自身で指定したパッケージ」と「依存しているためにインストールされたパッケージ」を調べたい場合にはどうするか?という話。
自身で指定したパッケージは、"world" に指定されます。この world はファイルとして保持されていて、/var/lib/portage/world のファイルを確認すれば分かります。

2010年5月9日

Androidアプリのメニューに標準アイコンを指定する方法(xml編)

Androidアプリを作成するにあたって、アプリのメニューで利用するアイコンを他のアプリと共通にする目的でAndroidの標準アイコンを使いたいことがあると思います。(アイコンを作るのが大変というケースもあるかと思いますが…)

xmlでアイコン指定をする方法は、iconとして"android:drawable/アイコン名" を指定します。
例えば、以下のような形で res/menu/menu.xmlファイルを指定します。
  android:icon="@android:drawable/ic_meu_info_details"


指定可能なアイコン名については、タオソフトウェアさんのブログが参考になります。
  参考リンク:Android メニューアイコンタオソフトウェアさんブログ

2010年5月5日

NetBSD5.0のBluetoothをデバッグする方法

最近、NetBSD5.0でBluetoothを利用して色々と試しています。

カーネルのBluetoothスタック関連でのデバッグを行う方法をメモ代わりに書いておきます。
デバッグの種類としては、"Bluetoothスタックのデバッグ"と"ドングルのデバッグ"の2種類があります。
ここでは、ドングルとしてはUSBタイプのドングルを利用するものとして記載します。(ちなみに私が使用しているのは、PlanexのBT-MicroEDR2です)

まずはカーネルでデバッグオプションを有効にしてカーネルをビルドします。設定するオプションは、BLUETOOTH_DEBUG と UBT_DEBUG の2種類。カーネルのコンフィグファイル(e.g. /usr/src/sys/arch/i386/conf/GENERIC)に以下のように追記します。
   options BLUETOOTH_DEBUG
   options UBT_DEBUG

この設定でカーネルをビルドし、ビルドしたカーネルにて起動します。ただ、これだけではデバッグ文は出てきません。デバッグ文を表示するには、sysctlコマンドにてデバッグレベルの設定を行います。例えば、以下のような形式です。
  # sysctl -w net.bluetooth.debug=11
  # sysctl -w hw.ubt_debug=51

これでデバッグ文が出力されるようになります。ちなみにsysctlで設定する値(上記の例では"11"とか"51")はデバッグレベルで値が大きいほどより詳細なデバッグ文が出力されます(その文、デバッグ文の量が増えます)。このあたりは、NetBSDでの他のドライバのデバッグと同じところですね。上記設定を行うと全てのデバッグ文が有効になります。デバッグ文を減らしたい場合は、値を小さく設定すればよいかと思います。

2010年5月3日

Javaの命名規則に関して…

元々Javaはほとんどやったことがない(Cばかり)だったんですが、最近Javaのコードをよく読んでます。
Javaのコードを読んでいて、"mなんちゃら"とプレフィックスに"m"がつく変数がよくでてくるのですが、この意味が分からなかった…。Sun(Oracle)が出しているコーディング規約にも、言及されている部分は見つからず。

Webで色々と調べてみたところ、変数のスコープを明示するために付けているスコープ接頭辞とのこと。
"m"が付いているのは、その変数がメンバー変数であることを表している模様。

なるほどー。

2010年1月11日

Androidアプリのパーミッション設定

Androidアプリケーションを作成するにあたって、例えばネットワーク接続等を行なうアプリケーションはパーミッションの設定を行なう必要があります。
それに関して、簡単な覚書。

パーミッションの設定を行なうためには、アプリケーションのAndroidManifest.xmlに設定を記述必要がある。これについては、以下のドキュメントが参考になります。


Manifest.permissionクラスのjavadoc