wenshengking 发表于 2012-12-27 14:58:27

ubuntu预留内存,并写一个驱动将预的内存做为一个块设备

ubuntu12.04 在虚VMware上安装的,在VMware中分配给ubuntu的是2G内存 ,通过在ubuntu的grub.cfg文件中设置mem=1536M实现预留512M的内存,然后要写一个块设备驱动程序,来管理预留512M的内存,

问题(1)
   没有设置mem之前
root@wensheng-virtual-machine:ram#free
             total       used       free   shared    buffers   cached
Mem:       2048120    1303512   744608          0      57440   668940
-/+ buffers/cache:   577132    1470988
Swap:      2094076          0    2094076
root@wensheng-virtual-machine:ram#
设置mem=1536M之后
wensheng@wensheng-virtual-machine:~$free
             total       used       free   shared    buffers   cached
Mem:       1532152   435564    1096588          0      45852   179284
-/+ buffers/cache:   210428    1321724
Swap:      2094076          0    2094076
wensheng@wensheng-virtual-machine:~$
为什么不标准的2G(2097152KB)或1.5G(1572864KB)而是2048120KB和1532152KB,(这个是不重点,但个人不解)
问题(2)(这个是重点求解)预留的512M内存的物理地址是多少 ,是0x60000000(1.5G)到0x80000000(2G)吗,我的PC机是4G内存win7系统,分配给ubuntu的是2G,
问题(3) 关于这个驱动程序(这方面没经验),通过ioremap()映射内存, 出错,不能申0x60000000-0x80000000,要求0x10到0x0,(好像是这个意思),什么原因。
问题(4)编译时经有时候出现下面问题
。。。。。
make: *** No rule to make target `kernel/bounds.c', needed by `kernel/bounds.s'.Stop.
make: *** Error 2
make: Leaving directory `/usr/src/linux-headers-3.2.0-23-generic'
make: *** Error 2
什么原因,没怎么搞清楚,在网上查了一下有说是差头文件,有说内核源码不配套,求解

最后,就是关那这个驱动程序 ,因为没有这方面的经验,所以没有很好的思路那位大能指点一下,想找一些源代码参考,但是不知道参考那些那,drivers及block目录下太多,求推荐(涉及到内存映射的)

新人,新手,求大侠们指点,谢谢!

wenshengking 发表于 2012-12-27 15:10:53

问题(3)错误如下

ioremap error for 0x60000000-0x80000000, requested 0x10, got 0x0

:(
跪求大神指点

wenshengking 发表于 2012-12-28 14:41:32

不给力,没有人回,自己已解决

物理内存有误,不是0x60000000-0x80000000,在dmesg中查看后改正,已成功申请内存映射,驱动程序已写好,可以成功挂载,通过fdisk -l 能查看模块信息

sejishikong 发表于 2012-12-28 15:11:03

hoho,不懂内核开发,基本不懂C,没办法。

wenshengking 发表于 2012-12-28 16:22:07

8O,不会吧,难到是我发贴发错区域了,汗!

sejishikong 发表于 2012-12-28 17:10:48

原帖由 wenshengking 于 2012-12-28 16:22 发表 http://forum.linuxfans.org/images/common/back.gif
8O,不会吧,难到是我发贴发错区域了,汗!
制作发行版和做内核开发是不一样的.
内核开发有单独的版块,不过那个人气不行.

jiangtao9999 发表于 2012-12-28 17:54:51

给我感觉,你让内核只用 1.5G 内存,那么你就不能用驱动实现读取剩下的那 512M 内存了。

wenshengking 发表于 2012-12-31 11:24:54

原帖由 jiangtao9999 于 2012-12-28 17:54 发表 http://forum.linuxfans.org/images/common/back.gif
给我感觉,你让内核只用 1.5G 内存,那么你就不能用驱动实现读取剩下的那 512M 内存了。


呵呵---
       这个是可以的,通过ioremap()将512M的物理地址映射到内核虚拟地址,然后在上面写个块设备驱动就行了,之前一直把512M的物理地址搞错了,所以不成功。现在已经解决了,发贴时没仔细看,贴子发错区了,:lol: 。

zy_sunshine 发表于 2013-1-1 00:38:00

呃,这种使用内存方法好像共享显存上有用到这种方法.

内存作为硬件是被初始化的,内存空间也是自动检测的,最后kernel的setup.c 里面会parse cmdline 参数根据mem参数重置可用内存大小.
ioremap 应该可以,直接v2p 访问内存也可以吧.

free 显示的内存少一块一直也是迷惑,我总是假设linux内核会用掉一部分,内核地址空间里面的就被扣除了?
页: [1]
查看完整版本: ubuntu预留内存,并写一个驱动将预的内存做为一个块设备