- 论坛徽章:
- 0
|
怎么没人回复呢,再加上点说明:
电路板肯定是正常的,我在bootloader里面做过eeprom的读写,完全正常,而且,我在drivers/i2c/busses/i2c-s3c2410.c里面的s3c24xx_i2c_probe()函数做过直接读取eeprom的操作,即在return之前添加了如下内容:
{
struct i2c_msg msg;
char * tmp;
int i;
tmp=kmalloc(256,GFP_KERNEL);
msg.addr = 0x50 ;
msg.flags = I2C_M_RD;
msg.len = 256;
msg.buf = tmp;
s3c24xx_i2c_xfer(&i2c->adap, &msg, 1);
for(i=0;i<256;i++)
printk("%02x ",tmp);
printk("\n");
kfree(tmp);
}
并将内容打印了出来,发现读取到的是正确的,现在主要问题就是s3c24xx_i2c_probe()可以完成对寄存器的配置,可是当有数据需要传输的时候,在s3c24xx_i2c_xfer()函数里面就无法访问到全部寄存器了,读取和写入都不行,虚拟地址传进来的也正确,我也试过在该函数里面完成寄存器的初始化,即ioremap等都拿到这个函数里面做,可还是无法正确访问该寄存器,无论写入什么,读到的都是0。
弱问一句,在内核里面由用户态调用的程序有什么访问权限的限制吗?比如寄存器的访问,或者内核可以设定部分核心内存资源受保护吗?显然s3c24xx_i2c_xfer()是有用户态程序调用的,而s3c24xx_i2c_probe()是由内核自己调用的,我觉得就这么点区别了,真是奇怪啊 |
|