如何从linux内核上预留DDR物理内

如何从linux内核上预留DDR物理内,第1张

luther@gliethttp:~$ vim /proc/iomem

00100000-5bf0ffff : System RAM

00100000-00575553 : Kernel code

00575554-0078d307 : Kernel data

0081a000-008a809f : Kernel bss

可以看到kernel code和data,bss使用的ram就是我们的系统内存,

luther@gliethttp:~$ dmesg也可以看到物理内存的情况

BIOS-provided physical RAM map:

[0.000000] BIOS-e820: 0000000000000000 - 000000000009dc00 (usable)

[0.000000] BIOS-e820: 000000000009dc00 - 00000000000a0000 (reserved)

[0.000000] BIOS-e820: 00000000000d2000 - 0000000000100000 (reserved)

[0.000000] BIOS-e820: 0000000000100000 - 000000005bf10000 (usable)

[0.000000] BIOS-e820: 000000005bf10000 - 000000005bf19000 (ACPI data)

[0.000000] BIOS-e820: 000000005bf19000 - 000000005bf80000 (ACPI NVS)

[0.000000] BIOS-e820: 000000005bf80000 - 0000000060000000 (reserved)

[0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)

[0.000000] BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved)

[0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)

[0.000000] BIOS-e820: 00000000fff80000 - 0000000100000000 (reserved)

luther@gliethttp:~$ vim /proc/meminfo

MemTotal:1478540 kB

MemFree: 868544 kB

Buffers: 31084 kB

Cached: 321672 kB

SwapCached:0 kB

luther@gliethttp:~$ sudo vim /boot/grub/grub.cfg

原来的

linux/boot/vmlinuz-2.6.31-14-generic root=UUID=9a04b75d-22f4-4100-a8b0-a07ef00ead04 ro quiet splash

新改的

linux/boot/vmlinuz-2.6.31-14-generic root=UUID=9a04b75d-22f4-4100-a8b0-a07ef00ead04 ro quiet splash mem=1442M

修改之后dmesg将多出如下一行提示:

[0.000000] user-defined physical RAM map:

[0.000000] user: 0000000000000000 - 000000000009dc00 (usable)

[0.000000] user: 000000000009dc00 - 00000000000a0000 (reserved)

[0.000000] user: 00000000000d2000 - 0000000000100000 (reserved)

[0.000000] user: 0000000000100000 - 000000005a200000 (usable)

[0.000000] user: 000000005bf10000 - 000000005bf19000 (ACPI data)

[0.000000] user: 000000005bf19000 - 000000005bf80000 (ACPI NVS)

[0.000000] user: 000000005bf80000 - 0000000060000000 (reserved)

[0.000000] user: 00000000e0000000 - 00000000f0000000 (reserved)

[0.000000] user: 00000000fec00000 - 00000000fec10000 (reserved)

[0.000000] user: 00000000fee00000 - 00000000fee01000 (reserved)

[0.000000] user: 00000000fff80000 - 0000000100000000 (reserved)

之前

[0.000000] 583MB HIGHMEM available.

之后

[0.000000] 554MB HIGHMEM available.

这样000000005a200000 - 000000005bf10000之间的29M物理内存就被预留出来供我们的DMA使用了[luther.gliethttp]

==================================================

=====第1步=============================================================================

[root@localhost ~]# cat /proc/meminfo

MemTotal: 1026124 kB

[root@localhost ~]# cat /proc/iomem

00000000-0009efff : System RAM

00000000-00000000 : Crash kernel

0009f000-0009ffff : reserved

000a0000-000bffff : Video RAM area

000c0000-000c7fff : Video ROM

000d4000-000d4fff : Adapter ROM

000f0000-000fffff : System ROM

00100000-3f6effff : System RAM // 内存首尾地址,我们将从0x3f6effff结尾开始往前保留300M空间

00400000-006081dd : Kernel code

006081de-006e19bb : Kernel data

3f6f0000-3f6f2fff : ACPI Non-volatile Storage

3f6f3000-3f6fffff : ACPI Tables

40000000-400003ff : 0000:00:1f.1

f0000000-f7ffffff : 0000:00:02.0

f8000000-f8ffffff : PCI Bus #01

f8000000-f87fffff : 0000:01:04.0

f8000000-f87fffff : ceopen_dmp

f8800000-f880ffff : 0000:01:04.0

f8800000-f880ffff : ceopen_dmp

f8810000-f88100ff : 0000:01:03.0

f8810000-f88100ff : 8139too

f8811000-f88111ff : 0000:01:04.0

f8811000-f88111ff : ceopen_dmp

f9000000-f93fffff : 0000:00:00.0

f9400000-f947ffff : 0000:00:02.0

f9480000-f94803ff : 0000:00:1d.7

f9480000-f94803ff : ehci_hcd

f9481000-f94811ff : 0000:00:1f.5

f9481000-f94811ff : Intel ICH5

f9482000-f94820ff : 0000:00:1f.5

f9482000-f94820ff : Intel ICH5

fec00000-ffffffff : reserved

=====第2步=============================================================================

向cmdline加入mem和reserved启动参数

hex(0x3f6f0000-300*1024*1024)等于0x2caf0000,这里表示从0x3f6effff结尾开始往前保留300M空间

hex(300*1024*1024)等于0x12c00000

[root@localhost ~]# vim /boot/grub/menu.lst

kernel /boot/vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet mem=0x2caf0000 reserve=0x2caf0000,0x12c00000

即保留0x2caf0000开始的300*1024*1024字节内存

kernel/resource.c|820| __setup("reserve=", reserve_setup)

2.6.30.4内核cmdline常用命令行参数与相应处理函数

[root@localhost ~]# cat /proc/meminfo

MemTotal: 721324 kB

[root@localhost ~]# cat /proc/iomem

00000000-0009efff : System RAM

00000000-00000000 : Crash kernel

0009f000-0009ffff : reserved

000a0000-000bffff : Video RAM area

000c0000-000c7fff : Video ROM

000d4000-000d4fff : Adapter ROM

000f0000-000fffff : System ROM

00100000-2caeffff : System RAM

00400000-006081dd : Kernel code

006081de-006e19bb : Kernel data

2caf0000-3f6effff : reserved // 这就是我们保留出来的内存了,和上面的内存结构一致[luther.gliethttp]

3f6f0000-3f6f03ff : 0000:00:1f.1

f0000000-f7ffffff : 0000:00:02.0

f8000000-f8ffffff : PCI Bus #01

f8000000-f87fffff : 0000:01:04.0

f8800000-f880ffff : 0000:01:04.0

f8810000-f88100ff : 0000:01:03.0

f8810000-f88100ff : 8139too

f8811000-f88111ff : 0000:01:04.0

f9000000-f93fffff : 0000:00:00.0

f9400000-f947ffff : 0000:00:02.0

f9480000-f94803ff : 0000:00:1d.7

f9480000-f94803ff : ehci_hcd

f9481000-f94811ff : 0000:00:1f.5

f9481000-f94811ff : Intel ICH5

f9482000-f94820ff : 0000:00:1f.5

f9482000-f94820ff : Intel ICH5

=====第3步=============================================================================

虽然预留了300M空间,但是ioremap_nocache不能映射全部的300M空间,不知道为什么,可能和

系统自身有关系,下面是具体的映射代码,因为已经将region做了reserved申请命名,所以

我们也就不需要再使用request_mem_region(pdma, dma_size, "gliethttp_dma_area")来获得region了.

const dma_addr_t pdma = 0x2caf0000

const size_t dma_size = (280*1024*1024)

kdma = ioremap_nocache(pdma, dma_size)

if (kdma == NULL)

return -ENOMEM

其 实2G内存也没有问题,mem=1.6G,然后ko驱动使用mmap将1.6G-2G之间的内存物理地址直接映射给user空间,这样user空间就可以 直接向1.6G-2G物理内存写入数据了,然后PCI直接通过寄存器配置,向1.6G-2G的物理地址读取数据,这样透过ko驱动将user和pci建立 了直连,当然了,因为内核线性地址为3G-4G只有1G的内存可以被映射,所以2G内存的另外1G内存就属于高端内存了,所以内核ko驱动不能映射 1.6G-2G的内存到内核线性地址空间,但是可以通过kmap短暂的映射来使用[luther.gliethttp]

static void __init early_mem(char **p)

{

static int usermem __initdata = 0

unsigned long size, start

if (usermem == 0) {

usermem = 1

meminfo.nr_banks = 0

}

start = PHYS_OFFSET

size = memparse(*p, p)

if (**p == '@')

start = memparse(*p + 1, p)

arm_add_memory(start, size)

}

__early_param("mem=", early_mem)

以下转自:http://hi.baidu.com/linuxbestbest/blog/item/9bc8dbdb72127763d0164e9c.html

有时,内核不能识别你的全部内存(RAM)。你可以用 cat /proc/meminfo 命令来校验。

查看一下所显示的数量是否与你所知的系统内存相同。如果不同,在 /boot/grub/grub.conf 文件中添加以下一行:

mem=xxM

把 xx 替换成你拥有的内存数量(以 MB 为单位)。

在 /boot/grub/grub.conf 文件中,以上的例子与下面相似:,

#NOTICE: You have a /boot partition. This means that

# all kernel paths are relative to /boot/

default=0

timeout=30

splashimage=(hd0,0)/grub/splash.xpm.gz

title Red Hat Linux (2.4.20-2.47.1)

root (hd0,0)

kernel /vmlinuz-2.4.20-2.47.1 ro root=/dev/hda3 mem=128M

当你重新引导后,grub.conf 文件中的改变将会反映在你的系统中。

或者,你可以在 /etc/lilo.conf 文件中添加以下一行:

append="mem=xxM"

注意,append 命令在 GRUB 和 LILO 中都可用。

把 xx 替换成你拥有的内存数量(以 MB 为单位)。切记,每映像后补的行会完全覆写全局后补的行。把这行添加到每映像描述中可能值得一试。

在 /etc/lilo.conf 文件中,以上的例子与下面相似:

boot=/dev/sda

map=/boot/map

install=/boot/boot.b

prompt

timeout=50

image=/boot/vmlinuz-2.4.20-2.47.1

label=linux

root=/dev/sda1

initrd=/boot/initrd-2.4.20-2.47.1.img

read-only

append="mem=128M"

记住在改变了 /etc/lilo.conf 文件后运行 /sbin/lilo -v 命令。

请注意,在 GRUB 或 LILO 中指定所用标签(映像)时传递这一选项可以获得同样的效果。

当你已载入 GRUB 引导屏幕后,键入 e 来编辑。你所选定的引导标签的配置文件中的项目列表就会在你面前出现。

选择开头为 kernel 的行,然后键入 e 来编辑这一引导项目。

在 kernel 行的末尾,添加:

mem=xxM

append=xxM

这里的 xx 与你系统的内存数量相同。

按 [Enter] 键来退出编辑模式。

回到 GRUB 屏幕后,键入 b 来用你的新内存指数引导。

在图形化的 LILO 屏幕上,按 [Ctrl]-[x] 退回到 boot: 提示。接下来,在 boot: 提示下输入:

linux mem=xxM

请记住将 xx 替换成你系统的内存数量。按 [Enter] 键来引导。

http://blog.sina.com.cn/s/blog_677570ff0100l1ng.html

http://www.kerneltravel.net/jiaoliu/map.htm

单独运行系统8G内存就可以了。

如果你说的需要多大的空间,那么window10系统100G是比较合理的。

linux的话最好预留200G左右的空间比较好,因为linux的分区机制和windows是不一样的。

.开机启动时自动运行程序Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init。init根据配置文件继续引导过程,启动其它进程。通常情况下,修改放置在 /etc/rc或 /etc/rc.d 或 /etc/rc?.d 目录下的脚本文件,可以使init自动启动其它程序。例如:编辑 /etc/rc.d/rc.local 文件,在文件最末加上一行"xinit"或"startx",可以在开机启动后直接进入X-Window。2.登录时自动运行程序用户登录时,bash首先自动执行系统管理员建立的全局登录script :/ect/profile。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存