我需要在设备驱动程序中使用mmap在内核模块中静态分配内存以执行以下操作 - 1.在内核中写入并在用户空间中读取 2.写入用户空间并读入内核
我可以通过以下链接 - [http://people.ee.ethz.ch/~arkeller/linux/multi/kernel_user_space_howto-8.html]
中给出的动态内存分配来完成刚使用设备驱动程序而不是debugfs。 我怎么能静态地做到这一点?
答案 0 :(得分:0)
您无法静态映射内存。
术语"静态"有点模糊地用来描述内存分配,所以我在这里澄清:
如GNU C Library documentation所述,静态分配是指您使用关键字" static"或创建一个全局变量。当您的程序启动时,这些变量的空间被分配""并且"永远不会被释放。"
术语"静态分配"也被用来描述什么被更恰当地称为"自动分配。"这些是您的局部变量和函数参数,它们在代码执行进入变量的作用域时分配,并在退出该作用域时释放它们。 (人们经常将这种类型的分配描述为"静态"因为他们将其与"动态"内存分配形成对比,例如与malloc
- 但是&#34 ;自动"是正确的术语。)
我不确定"静态"的这些含义中的哪一个?你打算,但它并不重要。您无法在这些分配发生的同时进行映射。
为映射分配内存的过程与普通分配不同 - 您可以为char分配单个字节(忽略架构对齐要求),但内存映射空间的大小必须是页面大小的倍数。使用映射内存就像处理文件一样 - 你明确地读取和写入文件,与普通变量相反,你可以为它们赋值。
整体数据类型和映射内存根本不同,并且不具备相同的功能或用法。