当前位置: 技术问答>linux和unix
驱动中如何将用户空间内存映射到内核空间使用?
来源: 互联网 发布时间:2016-12-26
本文导语: 在网上看到的资料全都是将内核空间内存映射到用户空间使用的,但是我需要的应用是 需要用户空间使用的内存映射到内核空间使用, 哪位用这样使用的例子没有? | 应当采用内核空间映射到...
在网上看到的资料全都是将内核空间内存映射到用户空间使用的,但是我需要的应用是
需要用户空间使用的内存映射到内核空间使用,
哪位用这样使用的例子没有?
需要用户空间使用的内存映射到内核空间使用,
哪位用这样使用的例子没有?
|
应当采用内核空间映射到用户空间的策略.
采用用户空间到内核空间的映射, 需要将用户空间锁定, 不允许换出, 这个方法的代价超出前者. 不是应当考虑的方法. 如果真需要, 应当参考mlock相关.
采用用户空间到内核空间的映射, 需要将用户空间锁定, 不允许换出, 这个方法的代价超出前者. 不是应当考虑的方法. 如果真需要, 应当参考mlock相关.
|
你完全不用考虑这个吧,难道你内核空间会有碎片,用户空间就不会? 内核内核分配器比你认为的高级的多吧。 要是坚持这么认为的,你可以自己预先申请几块空间循环利用啊。 我怀疑你是不是其他原因导致的问题。
|
很奇怪的说法,内核空间和用户空间的内存是绝对分开,不可能映射的。
如果想交换数据,楼主可以查一下这个函数copy_from_user,copy_to_user,利用字符设备,加上这两个函数,能实现两个空间的交互的。
至于你说的利用用户空间的内存来做缓存来提高效率,你考虑过在两个空间来回拷贝的时间成本没?
如果想交换数据,楼主可以查一下这个函数copy_from_user,copy_to_user,利用字符设备,加上这两个函数,能实现两个空间的交互的。
至于你说的利用用户空间的内存来做缓存来提高效率,你考虑过在两个空间来回拷贝的时间成本没?
|
参见视频采集驱动V4L,无论是内核空间内存映射到用户空间,还是用户空间内存映射到内核空间,基本原理一模一样。因为内核空间只是用户空间的一段,内存终究只是物理地址。所以这里仅仅涉及到两个问题:
1)根据虚地址,获取内存物理地址;
2)将内存重新映射到一段虚地址上。
1)根据虚地址,获取内存物理地址;
2)将内存重新映射到一段虚地址上。
|
有mmap这么一个system call ,可以自己在文操作上实现,应该可以把指定的物理页共享给用户吧。 V4L 好像就是这么用的,可以去看一下到底怎么做的,
|
不知道你为什么有这样的想法,用户空间和内核空间它们的区别主要在于权限上的问题,而实际操作的仍然是物理地址空间,你所说的碎片问题它们都可能遇到。
其次你并不需要仿佛申请内存啊,可以申请一系列存储区域反复使用啊
其次你并不需要仿佛申请内存啊,可以申请一系列存储区域反复使用啊