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目录下太多,求推荐(涉及到内存映射的)
新人,新手,求大侠们指点,谢谢!
问题(3)错误如下
ioremap error for 0x60000000-0x80000000, requested 0x10, got 0x0:(
跪求大神指点
不给力,没有人回,自己已解决
物理内存有误,不是0x60000000-0x80000000,在dmesg中查看后改正,已成功申请内存映射,驱动程序已写好,可以成功挂载,通过fdisk -l 能查看模块信息 hoho,不懂内核开发,基本不懂C,没办法。 8O,不会吧,难到是我发贴发错区域了,汗! 原帖由 wenshengking 于 2012-12-28 16:22 发表 http://forum.linuxfans.org/images/common/back.gif8O,不会吧,难到是我发贴发错区域了,汗!
制作发行版和做内核开发是不一样的.
内核开发有单独的版块,不过那个人气不行. 给我感觉,你让内核只用 1.5G 内存,那么你就不能用驱动实现读取剩下的那 512M 内存了。 原帖由 jiangtao9999 于 2012-12-28 17:54 发表 http://forum.linuxfans.org/images/common/back.gif
给我感觉,你让内核只用 1.5G 内存,那么你就不能用驱动实现读取剩下的那 512M 内存了。
呵呵---
这个是可以的,通过ioremap()将512M的物理地址映射到内核虚拟地址,然后在上面写个块设备驱动就行了,之前一直把512M的物理地址搞错了,所以不成功。现在已经解决了,发贴时没仔细看,贴子发错区了,:lol: 。 呃,这种使用内存方法好像共享显存上有用到这种方法.
内存作为硬件是被初始化的,内存空间也是自动检测的,最后kernel的setup.c 里面会parse cmdline 参数根据mem参数重置可用内存大小.
ioremap 应该可以,直接v2p 访问内存也可以吧.
free 显示的内存少一块一直也是迷惑,我总是假设linux内核会用掉一部分,内核地址空间里面的就被扣除了?
页:
[1]