我正在研究内核代码中的UART驱动程序,想知道,谁首先进入图片,device_register()
或者driver_register()
打电话?
为了区别他们,请遵循此.
在UART探测中,我们打电话
uart_register_driver(struct uart_driver *drv)
Run Code Online (Sandbox Code Playgroud)
成功注册后,
uart_add_one_port(struct uart_driver *drv, struct uart_port *uport)
Run Code Online (Sandbox Code Playgroud)
请详细解释一下.
我试图了解arch/arm启动时的内核内存预留.
有一个调用paging_init()用于设置页表,初始化区域内存映射等setup_arch()
.它还zero page
在分配实际值之前分配一个mem_map
.
void __init paging_init(const struct machine_desc *mdesc)
{
void *zero_page;
---
zero_page = early_alloc(PAGE_SIZE);
---
empty_zero_page = virt_to_page(zero_page);
__flush_dcache_page(NULL, empty_zero_page);
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下这个角色zero page
吗?
这个问题的一部分,这个.
有人可以解释一下内核页表中的宏吗?
#define pgd_bad(pgd) (!(pgd_val(pgd) & 2))
#define pmd_bad(pmd) (!(pmd_val(pmd) & 2))
#define pud_bad(pud) (!(pud_val(pud) & 2))
Run Code Online (Sandbox Code Playgroud)