当前位置: 技术问答>linux和unix
2.4驱动程序转成2.6遇到的问题
来源: 互联网 发布时间:2016-08-10
本文导语: 原先在linux 2.4内核下的 驱动程序,现在要移植到2.6.遇到以下问题: 地址 #define STATUS 0xd3100379 2.4下 用 unsigned char sta = inb(STATUS); 可以读出状态值status 2.6 下 用 unsigned char sta = inb(STATUS);则会造成...
原先在linux 2.4内核下的 驱动程序,现在要移植到2.6.遇到以下问题:
地址 #define STATUS 0xd3100379
2.4下 用 unsigned char sta = inb(STATUS); 可以读出状态值status
2.6 下 用 unsigned char sta = inb(STATUS);则会造成内存错误(unable to handle page request)
于是就用IO内存映射 static int lpbase = (int)ioremap(0xd3100000,1024);
原先的宏改成 #define STATUS ( unsigned int *)(lpbase +0x379);
在读 sta = ioread8(STATUS);可读出的老是0;
请教下这是什么原因啊
地址 #define STATUS 0xd3100379
2.4下 用 unsigned char sta = inb(STATUS); 可以读出状态值status
2.6 下 用 unsigned char sta = inb(STATUS);则会造成内存错误(unable to handle page request)
于是就用IO内存映射 static int lpbase = (int)ioremap(0xd3100000,1024);
原先的宏改成 #define STATUS ( unsigned int *)(lpbase +0x379);
在读 sta = ioread8(STATUS);可读出的老是0;
请教下这是什么原因啊
|
你确定d3100000是物理地址?
|
建议使用readl readb readw 等替代ioread8 ioread32等
|
能把具体unable to handle page request的相关内容贴一下?
|
static int lpbase = (int)ioremap(0xd3100000,1024);
这个映射肯定不对,才导致后面读错了地址。
这个映射肯定不对,才导致后面读错了地址。
|
用__raw_readl(..)读。。。。