[Suzaku:00775] デバイスアドレスにアクセスする方法
email@hidden
2007年 1月 31日 (水) 15:33:14 JST
お世話になっております。
伊藤と申します。
早速ですが、表題の件...
Free領域に割り当てたデバイスアドレスにアクセスすると実行エラーとなってしまいます。
お手数ですが対処方法を教えてください。
前提:
SUZAKU-V.SZ310のメモリのFree領域 F0F00000h〜をI2C制御用として割り当て、自作のI2C回路と
OPBとの接続を行いました。
但し、I2Cは正規の動作ではなく、単純な入出力回路4つのソフトウェアアクセスレジスタ8Bitを設定し、
内2つはSCL,SDA出力、内2つはSCL,SDA入力用として使うことを想定しています。
・slv_reg0 : SCL出力
・slv_reg1 : SDA出力
・slv_reg_r2 : SCL入力
・slv_reg_r3 : SDA入力
症状:
ベースアドレスF0F00000hのslv_reg0にアクセスするべく、以下のデバイスドライバを試したところ、
inb()の箇所で「アクセス領域が無効」の旨の実行エラーとなってしまいました。
(request_region()でPort領域が割り当てられたことは確認済みです。)
色々調べたところ、request_region()でPort領域を宣言すれば以降inb()又はoutb()でそのデバイス
アドレスにアクセスできると思うのですが、この考え方は間違っているのでしょうか。
以上、毎度毎度大変お手数ですが、ご教示の程よろしくお願いします。
/***** デバイスドライバ(必要箇所だけ抜粋してあります) ↓************************************ */
#define I2C_BASE_ADR 0xf0f00000
int i2c_init( void )
{
unsigned char a=0;
if( NULL == request_region( I2C_BASE_ADR, 16, "i2c" ) ) { /* Port割り当て */
printk( KERN_ERR "\n request_region() failed \n" );
return -EIO;
}
a = inb( I2C_BASE_ADR ); /* <-Error箇所発生 */
printk( KERN_INFO "\n a = %x", a );
return 0;
}
module_init( i2c_init ); //insmodにてCall
/***** デバイスドライバ ↑**************************************************************** */
/***** エラーメッセージ ↓**************************************************************** */
#insmod i2c.o
Oops: kernel access of bad area, sig: 11
NIP: C380197C XER: 00000000 LR: C3801974 SP: C1F1DE60 REGS: c1f1ddb0 TRAP: 0800 Not tainted
MSR: 00008030 EE: 1 PR: 0 FP: 0 ME: 0 IR/DR: 11
DEAR: 90F00000, ESR: 00000000
TASK = c1f1c000[54] 'exe' Last syscall: 128
last math 00000000 last altivec 00000000
GPR00: C3801974 C1F1DE60 C1F1C000 00000017 00000030 00000001 0000096B C0112B63
GPR08: 00000000 90F00000 00000034 C1F1DD70 C0120000 00000000 00000000 00000000
GPR16: 00000000 00000000 00000000 00000000 00008030 10049454 C1EE7000 C1F1DEA0
GPR24: C02B8A40 C3800000 C3800000 FFFFFFEA 00000060 00000003 00000000 C3800000
Call backtrace:
C3801974 C00139CC C00026FC 1000FAF8 10010D10 10002A04 10002648
30025D44 30025D90 00000000
SIGSEGV
/***** エラーメッセージ ↑**************************************************************** */
/***** ポート領域の割り当て ↓**************************************************************** */
# cat proc/ioports
f0000000-f07fffff : flash
f0e00300-f0e0030f : eth0
f0f00000-f0f0000f : i2c
#
/***** ポート領域の割り当て ↑**************************************************************** */
suzaku メーリングリストの案内