arm32的linux中初始化内核地址的函数
时间: 2024-02-12 20:05:02 浏览: 40
在ARM32的Linux中,初始化内核地址的函数是`start_kernel()`,定义在`init/main.c`文件中。在该函数中,会调用`setup_arch()`函数进行体系结构相关的初始化工作,其中包括初始化内核的虚拟地址空间并建立内核页表。
`start_kernel()`函数的部分代码如下:
```c
asmlinkage void __init start_kernel(void)
{
// ...
/* setup_arch() performs the bulk of the architectural setup */
setup_arch(&command_line);
// ...
}
```
`setup_arch()`函数的部分代码如下:
```c
void __init setup_arch(char **cmdline_p)
{
// ...
/* Set up the kernel virtual memory mapping */
paging_init();
setup_mm_for_reboot(three_level_pgd);
// ...
}
```
`paging_init()`函数用于初始化内核页表,其中会调用`prepare_page_table()`函数生成内核的二级页表并建立映射关系。`setup_mm_for_reboot()`函数用于设置内核的内存管理上下文,并将一级页表的地址设置为`three_level_pgd`。
因此,可以说是在`start_kernel()`函数中调用了`setup_arch()`函数来初始化内核地址,并在其中调用了`paging_init()`函数建立内核页表。