Linux kernel 保留系统内存,ioremap()?

Linux kernel 保留系统内存,ioremap()?,linux-kernel,linux-device-driver,ioremap,Linux Kernel,Linux Device Driver,Ioremap,在系统DRAM上调用ioremap()是否不好。我想在系统DRAM中保留一个不会被任何其他进程使用的空间。这是一种方法吗?我知道DRAM实际上不是IO内存,所以我不确定这是否被认为是不好的做法 在系统DRAM上调用ioremap()是否不好 由内核管理的系统内存也不应使用ioremap()重新映射。这些多重映射可能会导致某些体系结构/处理器上的数据损坏。有关ARM的信息,请参阅此问题的 您可以尝试通过在引导时从内核管理中排除有问题的内存区域来确保单个映射(使用ioremap()) 在ARM上,使

在系统DRAM上调用
ioremap()
是否不好。我想在系统DRAM中保留一个不会被任何其他进程使用的空间。这是一种方法吗?我知道DRAM实际上不是IO内存,所以我不确定这是否被认为是不好的做法

在系统DRAM上调用ioremap()是否不好

由内核管理的系统内存也不应使用ioremap()重新映射。这些多重映射可能会导致某些体系结构/处理器上的数据损坏。有关ARM的信息,请参阅此问题的

您可以尝试通过在引导时从内核管理中排除有问题的内存区域来确保单个映射(使用ioremap()) 在ARM上,使用ATAGs(标签)或设备树(属性)指定减少的物理内存。
否则,在内核命令行中使用memmap=内核参数:

1835         memmap=nn[KMG]$ss[KMG]
1836                         [KNL,ACPI] Mark specific memory as reserved.
1837                         Region of memory to be reserved is from ss to ss+nn.
1838                         Example: Exclude memory from 0x18690000-0x1869ffff
1839                                  memmap=64K$0x18690000
1840                                  or
1841                                  memmap=0x10000$0x18690000
内存区域也应该通过request\u mem\u region()声明,以防止多次请求,并确保/proc/iomem的完整性/准确性

在系统DRAM上调用ioremap()是否不好

由内核管理的系统内存也不应使用ioremap()重新映射。这些多重映射可能会导致某些体系结构/处理器上的数据损坏。有关ARM的信息,请参阅此问题的

您可以尝试通过在引导时从内核管理中排除有问题的内存区域来确保单个映射(使用ioremap()) 在ARM上,使用ATAGs(标签)或设备树(属性)指定减少的物理内存。
否则,在内核命令行中使用memmap=内核参数:

1835         memmap=nn[KMG]$ss[KMG]
1836                         [KNL,ACPI] Mark specific memory as reserved.
1837                         Region of memory to be reserved is from ss to ss+nn.
1838                         Example: Exclude memory from 0x18690000-0x1869ffff
1839                                  memmap=64K$0x18690000
1840                                  or
1841                                  memmap=0x10000$0x18690000
内存区域也应该通过request\u mem\u region()声明,以防止多次请求,并确保/proc/iomem的完整性/准确性

在系统DRAM上调用ioremap()是否不好

由内核管理的系统内存也不应使用ioremap()重新映射。这些多重映射可能会导致某些体系结构/处理器上的数据损坏。有关ARM的信息,请参阅此问题的

您可以尝试通过在引导时从内核管理中排除有问题的内存区域来确保单个映射(使用ioremap()) 在ARM上,使用ATAGs(标签)或设备树(属性)指定减少的物理内存。
否则,在内核命令行中使用memmap=内核参数:

1835         memmap=nn[KMG]$ss[KMG]
1836                         [KNL,ACPI] Mark specific memory as reserved.
1837                         Region of memory to be reserved is from ss to ss+nn.
1838                         Example: Exclude memory from 0x18690000-0x1869ffff
1839                                  memmap=64K$0x18690000
1840                                  or
1841                                  memmap=0x10000$0x18690000
内存区域也应该通过request\u mem\u region()声明,以防止多次请求,并确保/proc/iomem的完整性/准确性

在系统DRAM上调用ioremap()是否不好

由内核管理的系统内存也不应使用ioremap()重新映射。这些多重映射可能会导致某些体系结构/处理器上的数据损坏。有关ARM的信息,请参阅此问题的

您可以尝试通过在引导时从内核管理中排除有问题的内存区域来确保单个映射(使用ioremap()) 在ARM上,使用ATAGs(标签)或设备树(属性)指定减少的物理内存。
否则,在内核命令行中使用memmap=内核参数:

1835         memmap=nn[KMG]$ss[KMG]
1836                         [KNL,ACPI] Mark specific memory as reserved.
1837                         Region of memory to be reserved is from ss to ss+nn.
1838                         Example: Exclude memory from 0x18690000-0x1869ffff
1839                                  memmap=64K$0x18690000
1840                                  or
1841                                  memmap=0x10000$0x18690000

内存区域也应该通过request\u mem\u region()声明,以防止多个请求,并且为了/proc/iomem

的完整性/准确性,可以在系统引导期间通过在内核命令行参数中使用“mem”来保留内存

LDD3 Ch-15第443页

例如,如果您有256MB,那么参数mem=255M将使内核不受影响 使用最高兆字节。您的模块稍后可以使用以下代码访问此类内存:

dmabuf=ioremap(0xFF00000/*255M/,0x100000/1M*/)


但是,这不是一种有效的方法,因为内核不能使用这个保留内存。在我当前工作的SoC上,使用连续内存分配器(CMA)保留内存,当SoC驱动程序不使用该内存时,允许其他进程重用内存。

可以在系统引导期间通过在内核命令行参数中使用“mem”来保留内存

LDD3 Ch-15第443页

例如,如果您有256MB,那么参数mem=255M将使内核不受影响 使用最高兆字节。您的模块稍后可以使用以下代码访问此类内存:

dmabuf=ioremap(0xFF00000/*255M/,0x100000/1M*/)


但是,这不是一种有效的方法,因为内核不能使用这个保留内存。在我当前工作的SoC上,使用连续内存分配器(CMA)保留内存,当SoC驱动程序不使用该内存时,允许其他进程重用内存。

可以在系统引导期间通过在内核命令行参数中使用“mem”来保留内存

LDD3 Ch-15第443页

例如,如果您有256MB,那么参数mem=255M将使内核不受影响 使用最高兆字节。您的模块稍后可以使用以下代码访问此类内存:

dmabuf=ioremap(0xFF00000/*255M/,0x100000/1M*/)


但是,这不是一种有效的方法,因为内核不能使用这个保留内存。在我当前工作的SoC上,使用连续内存分配器(CMA)保留内存,当SoC驱动程序不使用该内存时,允许其他进程重用内存。

可以在系统引导期间通过在内核命令行参数中使用“mem”来保留内存

LDD3C