gpt4 book ai didi

c - Linux Arm中的request_standard_resources()函数

转载 作者:行者123 更新时间:2023-11-30 17:32:15 31 4
gpt4 key购买 nike

我正在阅读 Linux 内核 (2.6.31) 源代码来了解内存映射。

我的问题是/arch/arm/kernel/setup.c中的这个函数:

static void __init request_standard_resources(struct meminfo *mi, struct machine_desc    *mdesc)
{
struct resource *res;
int i;

kernel_code.start = virt_to_phys(_text);
kernel_code.end = virt_to_phys(_etext - 1);
kernel_data.start = virt_to_phys(_data);
kernel_data.end = virt_to_phys(_end - 1);

for (i = 0; i < mi->nr_banks; i++) {
if (mi->bank[i].size == 0)
continue;

res = alloc_bootmem_low(sizeof(*res));
res->name = "System RAM";
res->start = mi->bank[i].start;
res->end = mi->bank[i].start + mi->bank[i].size - 1;
res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;

request_resource(&iomem_resource, res);

if (kernel_code.start >= res->start &&
kernel_code.end <= res->end)
request_resource(res, &kernel_code);
if (kernel_data.start >= res->start &&
kernel_data.end <= res->end)
request_resource(res, &kernel_data);
}

if (mdesc->video_start) {
video_ram.start = mdesc->video_start;
video_ram.end = mdesc->video_end;
request_resource(&iomem_resource, &video_ram);
}

/*
* Some machines don't have the possibility of ever
* possessing lp0, lp1 or lp2
*/
if (mdesc->reserve_lp0)
request_resource(&ioport_resource, &lp0);
if (mdesc->reserve_lp1)
request_resource(&ioport_resource, &lp1);
if (mdesc->reserve_lp2)
request_resource(&ioport_resource, &lp2);
}

我不知道变量的值:_text、_etext、_data、_end。

请帮我获取这些变量的值以及该函数的用途:request_standard_resources()

最佳答案

这些变量实际上是由链接器脚本定义的,该链接器脚本将最终的内核镜像组合在一起。

  • _text 是内核文本(代码)部分的开头地址。
  • _etext 是文本部分的结尾。

  • _data 是数据部分的开头。

  • _end 是内核的结尾。

关于c - Linux Arm中的request_standard_resources()函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24297880/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com