[Q]
IRQ の変更をしたいのですが、
/etc/sysconfig/pcmcia の irq_mask の値の計算方法がわかりません。
[A]
irq_mask は割り当て可能な IRQ のビットパターンで、
ビット 0 が IRQ 0,ビット 15 が IRQ 15 に相当し、
irq_mask のビットがたっている IRQ が PCMCIA カードが使用できるものになります。
irq_mask は 16 進数で与えることになっており、
0x0e40 や 0x0c40 のはじめについている 0x が 16 進数であることをあらわしています。
さて具体例をだして説明しますと、
まずどの IRQ を使用できるようにしたいかを決めます。
次に、使用したい IRQ にビットが立っているというのを 2 進数であらわします。
IRQ との対応は、一番左が IRQ=15, 一番右が IRQ=0 というような順になりますので、
IRQ=11,10,9,6 を使用できるようにするにはこれらのビットをたてれば良く、
0000111001000000
となります。
また、IRQ=11,10,6 を使用できるようにする場合には、
0000110001000000
となります。
次に、この 2 進数を irq_mask に代入できるように 16 進数に直します。
ここでは、まずなじみのある 10 進数へ変換し、
そのあと 16 進数に直すという方法をとってみましょう。
IRQ=11,10,9,6 を使用する場合には、
0000111001000000 = 1*2^11 + 1*2^10 + 1*2^9 + 1*2^6 = 2048 + 1024 + 512 + 64 = 3648
IRQ=11,10,6 を使用する場合には
0000110001000000 = 1*2^11 + 1*2^10 + 1*2^6 = 2048 + 1024 + 64 = 3136
となります。
さて、これを 16 進数に直すわけですが、
16^0 = 1
16~1 = 16
16^2 = 256
16^3 = 4096
を使うと、
3648 = 14*16^2 + 4*16^1 = 0x0e40
3136 = 12*16^2 + 4*16^1 = 0x0c40
となります。
結局、IRQ=11,10,9,6 を使用する場合の irq_mask は
irq_mask = 0x0e40
IRQ=11,10,6 の場合は
irq_mask = 0xc40
と与えてやれば良いことになりますがいかがでしょうか?
戻る