moz*_*ors 1 linux-kernel device-tree
我想为 Linux 初始化建立一个里程碑式的路线图,以便于我轻松理解。(对于嵌入式系统)这是我得到的:
我不知道这里究竟什么时候处理devicetree。是在处理 do_initcall() 函数时还是在处理之前?一般来说,何时解析 devicetree,何时处理树节点?预先非常感谢您。
非常感谢对我的想法的任何纠正。
这是个好问题。
\n首先,我想你已经知道内核会使用DT中的数据来识别具体的机器,在一般跨平台或硬件使用的情况下,我们需要它在启动初期建立起来,以便它有机会运行特定于机器的修复。
\n以下是我从Linux 内核文档中摘录的一些信息。
\n\n\n在大多数情况下,机器身份无关紧要,内核将根据机器\xe2\x80\x99s 核心 CPU 或 SoC 选择设置代码。例如,在 ARM 上,arch/arm/kernel/setup.c 中的 setup_arch() 将调用 arch/arm/kernel/devtree.c 中的 setup_machine_fdt(),该函数会搜索 machine_desc 表并选择与设备树数据最匹配的 machine_desc 。它通过查看根设备树节点中的 \xe2\x80\x98兼容\xe2\x80\x99 属性,并将其与 struct machine_desc 中的 dt_compat 列表(在 arch/arm/include/ 中定义)进行比较来确定最佳匹配。 asm/mach/arch.h(如果你\xe2\x80\x99 好奇的话)。
\n
至于Linux初始化,我认为我们可以在列表中添加一些内容。
\n放上START按钮,复位信号触发
\nCS:IP 修复至 BIOS 0XFFFF0 地址
\n跳转到BIOS的开始处
\n自检、键盘等硬件设备启动、实模式IDT、GDT
\n加载 Bootloader,如 grub2 或 syslinux。
\n引导加载程序将内核加载到 RAM 并启动它(boot.img->core.img)。
\nA20 打开,调用setup.s,切换到保护模式
\nLinux内核进入head.o,IDT&GDT刷新,decompress_kernel(),启动start_kernel()
\nINIT_TASK(init_task) 创建
\ntrap_init()
\nCPU 架构找到,MMU 启动(mmu_init())。
\nsetup_arch() 被调用,设置 CPU。
\n内核子系统已加载。
\ndo_initcalls() 被调用,并且带有 *_initcall() 和 module_init() 函数的模块被启动。
\nrest_init() 将创建进程 1 和 2,换句话说,/sbin/init(或类似进程)并且运行 kthreadd。
\n| 归档时间: |
|
| 查看次数: |
741 次 |
| 最近记录: |