QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1185|回复: 0

问下下面几个驱动开发碰到的问题

[复制链接]
发表于 2006-8-16 16:10:01 | 显示全部楼层 |阅读模式
1)phys_to_virt(),ioreamp(),iomap(linux2.6没有了),IO_ADDRESS(),这几个咚咚都是用来把物理地址转换成虚拟地址的,有什么区别呢?
同一个物理地址通过以上方法转换后的地址不一样,转换后的地址有的能不读写,有的不能读写。ARM下访问一个硬件里的寄存器(告诉了其物理地址0x00214000),该用哪个函数转化成虚拟地址后访问呢。


2)linux2.4下,devfs_register()用来注册一个设备,可以在/dev目录下看到注册的设备名,
然后通过 mount 就可以读取设备了。linux 2.6 没有了这个函数,只能mknod 在/dev建一个,可是mount 显示没有改设备,有没有其他的函数能取代devfs_register的功能。

3)中断号(如:12)在linux2.4用request_irq下能申请,在linux2.6下却申请不到,可能的原因有哪些呢?

4)怎样把io端口直接映射到linux内核空间?
linux2.4下通过以下方式可以把物理地址0x0020000开始的连续256k的空间映射到0xf0000000的虚拟空间;
static struct map_desc mx1ads_io_desc[] __initdata = {
  { IO_ADDRESS(0x0020000),      0x0020000,        SZ_256K   , DOMAIN_IO, 0, 1},
};
以上的IO_ADDRESS(X) 为( (x)|0xf0000000).
在linux2.6下:
static struct map_desc imx_io_desc[] __initdata = {
        {
                .virtual        = IO_ADDRESS(0x0020000),//IO_ADDRESS(X) 为((x)|0xe0000000
                .pfn                = __phys_to_pfn(0x0020000),
                .length                = SZ_256K,
                .type                = MT_DEVICE
        }
};
出现的问题是,
在linux2.4下printk("the regiest value=%0x\n",((*volatile unsigned long*)0xf0200000));没有问题
在linux2.6下printk("the regiest value=%0x\n",((*volatile unsigned long*)0xe0200000));出错。
难道上面的映射的有问题吗?

5)linux2.4下有request_dma(),free_dma(),enable_dma(),来操作DMA,在linux2.6确没有了这些函数,该怎样移植这些函数呢?

6)lwn.net上的driver-transport实在是不能解决上面的问题,有没有其他资料来源?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 12:34 , Processed in 0.037434 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表