Arm Linux如何预留并使用超大内存

Arm Linux如何预留并使用超大内存,第1张

在终端中运行

fdisk -l

查看哪个分区有空,然后运行

sudo mkswap /dev/sda 添加交换分区,

sudo swapon /dev/sda启用分区,

sudo /dev/sda swap swap defaults 0 0写入启动,

如果没有空的分区,那就在较大的分区中设置交换文件

sudo dd if=/dev/zero of=/swapfile1 bs=1024k count=512 创建大小为512M的交换文件(512可以自己定义),

sudo swapon /swapfile1 启用交换文件

sudo /swapfile1 swap swap defaults 0 0写入启动

要想在内核中保留一个块内存,不被系统分配,而是只由自己使用,可以使用以下函数

reserve_bootmem(addr,size,flag)

这个函数的三个参数,addr是你要保留的地址,size就是要保留的大小,flag是标志位,要来确定是否检查你要保留的空间是否已经被保留了,它可以设置为两个值,BOOTMEM_DEFAULT和BOOTMEM_EXCLUSIVE,前者就是总是会返回0(也就是保留成功),而后者则会检查你所要保留的空间是否已经被保留了,若已经被保留了,则它返回失败(负数)

那么这个函数一般放在哪里使用过了,我们建议放到内核init/main.c中,在页表的建立之前进行保留,比如我们下面的代码,放在main中的start_kernel函数中,我们的内核是2.6.32

asmlinkage void __init start_kernel(void)

{

……

……

trap_init()

if(reserve_bootmem(0x41000000,0x100000,BOOTMEM_EXCLUSIVE) != 0){

printk("reserve fail----\n")

}

printk("we reserve boot meme of 0x41000000 for gps---------------------------------\n")

mm_init()

……

……

}

这样就保留了一个起始地址为0x41000000,大小为1M的空间

你是指支持的内存上限么? 际上最大支持多大的内容跟 *** 作系统的种类无关,而是跟 *** 作系统是几位的还有CPU是几位的有关。

DOS是16位的,所以DOS支持的最大内存是64MB(2的16次方字节等于64MB)。

32位的Linux和32位的Windows(XP、Vista...)支持的最大内存是4GB,2的32次方字节=4GB。

64位的Linux和Windows支持的最大内存=16EB。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8311928.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存