以下是led实验的初始化函数,在加载时,报错“unable to handle kernel",如果我把对红色标注的那块有关硬件读写操作的代码注释掉,则通过insmod命令加载模块,可以成功加载。大家帮忙分析一下是什么原因呢?难道要将寄存器物理地址先映射成虚拟地址,再对虚拟地址操作吗?
static int dev_init(void)
{
int ret;
unsigned tmp;
printk("misc device init 0\n");
/*set GPKCON GPK4~GPK7 output */
tmp = readl(GPKCON0);
tmp = (tmp & ~(0xffffU << 16)) | (0x1111U << 16);
writel(tmp, GPKCON0);
tmp = readl(GPKDAT0);
tmp |= (0xf << 4);
writel(tmp, GPKDAT0); ret = misc_register(&misc);
printk(" misc device initialized\n");
return ret;
}
[ 此帖被80后公民在2012-08-22 19:49重新编辑 ]