当前位置:  技术问答>linux和unix

请问启动时如何预留一段连续的RAM空间?

    来源: 互联网  发布时间:2016-07-22

    本文导语:  我们想开发一个设备驱动,该驱动需要巨大的连续buffer,所以打算在启动的时候就预留一大块连续的空间,由该驱动独占使用。请问linux2.6内核中有没有现成的方式或接口可以实现该目的,还是需要自己用page_alloc预分...

我们想开发一个设备驱动,该驱动需要巨大的连续buffer,所以打算在启动的时候就预留一大块连续的空间,由该驱动独占使用。请问linux2.6内核中有没有现成的方式或接口可以实现该目的,还是需要自己用page_alloc预分配一大块空间(甚至最好是写一个这样的驱动,来管理这块区域)?
谢谢。

|
__get_free_pages(unsigned int __nocast gfp_mask, unsigned int order)
所申请的内存大小由参数order决定,order最大为10,即可以最大申请2的10次方个页面
所以一次可申请到的内存最大为1024*4K,即4M(参见伙伴算法)
若需要大于4M的连续内存,就要申请很多个4M的内存块,这些内存块里面的空间是连续的
但是块与块之间不一定连续,所以要找连在一起的内存块。

我是在系统已经起来了,驱动里面需要很大一块缓冲区时这么做的,不知道是不是符合你的情况

|
你可以通过共享内存申请一个hugetlb页面来实现,接口是
shmget(IPC_PRIVATE, size, SHM_HUGETLB | IPC_CREAT | SHM_R | SHM_W);

你把size参数设为256M,相当于申请了一块连续的256M的共享内存。

SHM_HUGETLB是2.6内核开始支持的hugeTLB功能,可以支持256M的页面。

|
#define alloc_bootmem(x) 
__alloc_bootmem((x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))
#define alloc_bootmem_low(x) 
__alloc_bootmem((x), SMP_CACHE_BYTES, 0)
#define alloc_bootmem_pages(x) 
__alloc_bootmem((x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS))
#define alloc_bootmem_low_pages(x) 
__alloc_bootmem((x), PAGE_SIZE, 0)


|
我们系统里也有类似的用法,实现起来也比较简单。
loader想kernel传递cmdline参数的时候加上一个mem=xxxM的参数。
这样kernel就只会使用你指定的大小做其总共的内存进行管理。
而剩下的部分你就可以自由使用了。我们是用来做Switch上DMA的buffer的。

    
 
 

您可能感兴趣的文章:

  • 各位大虾,请问怎样在启动菜单中指定由硬盘启动(象EASYBOOT,JO.SYS..启动时指定由硬盘启动)?
  • 请问我的linux在启动时突然说不能启动xwindows了,请教原因?
  • 我的系统硬盘有一个block坏了,系统不能正常启动,请问如何能启动设备?
  • 再线送分:我的硬盘装了REDHAT LINUX,但不启动,软盘启动盘也没了,请问怎样能再次启动?
  • 大家好!请问怎么才能在机器开机启动时,named服务就跟着启动????谢谢!!!
  • 我在安装 redhat7.2 的时候选择了 GNOME 界面,启动的时候选择了图形界面启动,请问如何更改?
  • 请问如何在单步启动(interactive startup)时,取消启动xwindows的那个服务?
  • 我装redhat9.0选的是启动就进入图形,请问怎么改回启动进入文本?
  • 装好linux后每次启动都自动进入字符界面,请问在哪里可以修改启动后进入图形界面?
  • 我的SCO UNIX一起动就自动启动x-window(用tty02). 请问如何直接启动到字符界面。
  • 我现在装的Linux是从文本模式启动,请问如何才能改为从图形模式启动?
  • Ubuntu在自启动中我设置了一项,但系统启动时,因为此卡住了,请问我如何杀掉这个进程?因为按ctrl+c也不管用.
  • 请问:如何让tomcat在win2000启动的时候自动启动
  • 请问Linux如何象Windows 那样把我的程序放到启动里面,登录后启动我的程序
  • 下来了FREE BSD的镜像 请问,是直接刻录就可以光盘启动进行安装吗?还是有特殊的要求(我想用光盘启动进行安装)
  • 我装完linux后启动进入黑屏,是无法识别显卡,请问在启动的时候怎么默认进入文本模式进行配置
  • 请问如何让一个程序在系统启动的时候自动启动
  • 我机器上装了两个系统,win2000,Linux,现在我机器启动后进入grub命令行,请问我有没有办法恢复Linux或Win2000启动
  • 请问玩过SOLARIS的高手门,在不正常关机后,就不能启动到windows公用桌面了,只能在命令提示模式下了,请问怎么解决这个问题啊?急~!~!
  • 请问如何屏蔽掉启动中的sendMail?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问内核空间和用户空间有什么区别,是怎么划分的.谢谢
  • 请问:如何得到硬盘的剩余空间 比如/home的剩余空间
  • 发现/分区的空间被占满,请问如何查出空间是被那些大文件所占满
  • 请问:我的eclipse已关掉了,但它的工作空间还在被占用着,这样我的eclipse无法在这里打开了,怎样关掉这个工作空间呀
  • 请问Linux下用什么命令来查看硬盘的剩余空间呢(用字节表示)?
  • 请问如何增加栈(stack)空间的大小
  • 请问哪里可以申请到支持JSP的空间?
  • 请问需要多大的硬盘空间
  • 请问如何用C得知某个目录所占用的磁盘空间?
  • 请问有没有jsp的免费空间,谁知道!
  • 请问如何在C程序中获取linux系统的磁盘剩余空间
  • 请问如何看当前目录的剩余空间,谢谢!
  • 请问何处有jsp空间提供??
  • 请问如何查看一个进程中 brk和mmap各自分配的内存空间的大小
  • 请问溢出mmap()分配的共享空间要怎么办??
  • 请问一下如何在linux7.0下知道某个目录下的所有文件共占多少空间
  • 请问如何获得磁盘分区的可用空间大小?
  • 请问UNIX下如何获得某个目录所在分区的剩余空间
  • 请问linux进程的哪些信息保存在内核里?哪些信息又保存在进程空间里?谢谢
  • 请问怎样改变/root的空间大小?谢谢!
  • 请问:我知道路由器的telnet密码,但忘记了enable 密码,请问如何是好?
  • 请问那里有SYBASE的jbdb 2.0下载;jspsmartupload可以直接将文件上传到数据库,请问如何使用
  • 请问最新的reahat9.0是基于什么核心的?2.4?2.6?请问那里能下载?
  • 请问:请问哪里有关于linux基本操作命令讲解的资料下载,最好是幻灯片格式的.
  • 请问,我试图用#admintool&图形工具命令来安装sun workshop5.0,为什么进入的却是用户管理界面?请问具体该如何在solaris下安装应用软件
  • 请问在Redhat 9里,我从登录就是图形介面,请问如何在图形介面内进入命令行方式呢,谢谢
  • 请问:我在redhat下装了bochs-2.2.1-1.rpm,.装了后,想设置一下,但找不到bochsrc.fda.bxrc,请问这个文件在哪个曰录下啊。
  • 请问:在配置Qt时,很多文档都说在.profile,.login里加东西,但是我好像没有发现有这两个文件上,请问这些文件在哪个目录下啊
  • 请问:在GCC里的C程序里的变量的声明是不是只能在前面,而且相同类型的变量的声明只能放在一起?如果不是,请问怎么样可以解决这个问题.
  • 请问各位大虾,小弟今天开始学jsp了,这学期我们有java课,所以已经下载了jdk(好象是1.2),请问我的98环境怎么配置jsp环境呀?我的jdk可以运行.java程序,别的我就不知道了....谢谢!
  • 主机是WIN2000,我用的是LUNIX,请问是否可以共享上网? 如果可以请问如何设置? 500分答谢,龟儿食言!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3