Linux的request_region函数和inb,outb的用法

twn_fly 2017-01-16 03:13:04
unsigned long kern_num0 = 0;
unsigned char kern_num1 = 0;
unsigned long *address0;
unsigned char *address1;
unsigned long addr0_t = 0xe0200280;
unsigned long addr1_t = 0xe0200284;

printk(KERN_INFO "2222222\n");

gpj2con = request_region(addr0_t,4,"GPJ2CON");
gpj2dat = request_region(addr1_t,1,"GPJ2DAT");

printk(KERN_INFO "3333333\n");

if(IS_ERR(gpj2con) && IS_ERR(gpj2dat))
{
printk(KERN_ERR "register IO is error\n");

return ;
}

printk(KERN_INFO "aaaaaaaa\n");

address0 = phys_to_virt(addr0_t);
address1 = phys_to_virt(addr1_t);

kern_num0 = inl(address0);
kern_num0 |= 0x1111;
outl(kern_num0,address0); //写进去控制语句

printk(KERN_INFO "uuuuuuu\n");

kern_num1 = inb(address1);
kern_num1 |= 0xf;
outb(kern_num1,address1); //将LED的灯一开始是熄灭的




这里出现段错误是我的调用的指针出现错误了吗 还是物理地址转换虚拟地址出现问题了呢 ?
...全文
858 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧