第二阶段的初始化 : 系统的 各种资源的初始化
第二阶段的初始化 仅由 主cpu 进行 (cpu0)
cpu1 ... 等 cpu 只负责
1. cpu1 ... 上的 idle 进程的创建 (smp_init -> idle_threads_init -> idle_init 是不是就完成了idle进程的创建)
2. 进入idle
CPU0
start_kernel
...
cpu_startup_entry(CPUHP_ONLINE);
do_idle
参考 链接 中的 start_kernel -> rest_init
参考 链接 中的 rest_init->cpu_startup_entry
kernel_init 和 kthreadd 的执行 不在 第二阶段内,此时不用分析
初始化了什么系统资源
分析了 atags
初始化了 内存 (内存虚拟化)
建立了 进程 ,初始化了调度 (进程是对的CPU虚拟化)
建立了 文件系统的根 (文件对存储地址空间的抽象)
vfs_caches_init_early
vfs_caches_init
初始化了 中断(硬件和软件)
CPU1 …
secondary_start_kernel
pr_debug("CPU%u: Booted secondary processorn", cpu);
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
do_idle
初始化了什么系统资源
初始化了 cpu1
cpu_init
ipi_setup
关键字:OK6410A 开发板 11 第二阶段
引用地址:
OK6410A 开发板 (八) 23 linux-5.11 OK6410A start_kernel 功能角度 第二阶段
推荐阅读最新更新时间:2024-10-18 09:55
OK6410A 开发板 (八) 23 linux-5.11 OK6410A start_kernel 功能角度 第二阶段
第二阶段的初始化 : 系统的 各种资源的初始化 第二阶段的初始化 仅由 主cpu 进行 (cpu0) cpu1 ... 等 cpu 只负责 1. cpu1 ... 上的 idle 进程的创建 (smp_init - idle_threads_init - idle_init 是不是就完成了idle进程的创建) 2. 进入idle CPU0 start_kernel ... cpu_startup_entry(CPUHP_ONLINE); do_idle 参考 链接 中的 start_kernel - rest_init 参考 链接 中的 rest_init- cpu_startup_en
[单片机]
OK6410A 开发板 (八) 15 linux-5.11 OK6410A start_kernel 打印角度 第二阶段 概览
do_initcalls 的打印信息 VFS: Mounted root (nfs filesystem) on device 0:10. Freeing unused kernel memory: 1024K 函数分类 arch_call_rest_init rest_init pid = kernel_thread(kernel_init, NULL, CLONE_FS); kernel_init_freeable smp_init do_basic_setup driver_init do_initcalls for (level = 0; level ARRAY_SI
[单片机]
OK6410A 开发板 (八) 16 linux-5.11 OK6410A start_kernel 打印角度 第二阶段 do_initcalls
log // init_jiffies_clocksource- ... - __clocksource_register_scale clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns // futex_init futex hash table entries: 256 (order: -1, 3072 bytes, linear) // netlink_proto_init NET: Registered protocol family 16 // atomic_pool_
[单片机]
OK6410A 开发板 (八) 18 linux-5.11 OK6410A start_kernel 功能角度 第二阶段之idle进程
idle 进程 相关的打印: 无 idle 进程相关的 函数 __mmap_switched 中的 ARM( ldmia r4!, {r0, r1, sp} ) sched_init idle 相关函数 start_kernel sched_init // 因为 1.__mmap_switched 中的 ARM( ldmia r4!, {r0, r1, sp} ) // 因为 2.__mmap_switched_data 中的 .long init_thread_union + THREAD_START_SP @ sp /* include/asm-generic/curre
[单片机]
OK6410A 开发板 (八) 34 linux-5.11 OK6410A 内存管理第二阶段
B __turn_mmu_on符号 - setup_arch- paging_init- bootmem_init- memblock_allow_resize返回 ----此时memblock初始化完成,开启了基于虚拟内时代的 memblock内存管理器时代 流程 __turn_mmu_on mcr p15, 0, r0, c1, c0, 0 @ write control reg // 内存管理相关1 // 上句执行之后,mmu开启 ret r3 // 调用到 __mmap_switched __mmap_switched adr r4, __mmap_switched_data /
[单片机]
OK6410A 开发板 (八) 123 linux-5.11 OK6410A rootfs中留给开发者的内存访问接口
与内存相关的文件系统 我们如果想用rootfs中的文件来观测内存或更改内存行为 则需要观测的文件所属的文件系统 为 内核文件系统 // https://blog.csdn.net/u011011827/article/details/119322870 中的 linux 真实文件系统分类 相关的文件系统有以下几种 sysfs,procfs,rootfs,devtmpfs,debugfs 可以从 /proc/filesystems中查看 当前的linux系统中注册了哪些 系统,在从中根据经验挑选出 内核文件系统 可以 利用 mount 来查看 这些文件系统挂载到哪个目录(挂载点)了 如果没有挂载,可以尝试用mount 命令挂载
[单片机]
OK6410A 开发板 (三) 23 u-boot-2021.01 boot 解析 U-boot 镜像运行部分 DM 的一次实例分析 - 串口
串口相关的 UCLASS DRIVER DEVICE UCLASS ./drivers/serial/serial-uclass.c L504 504 UCLASS_DRIVER(serial) = { 505 .id = UCLASS_SERIAL, 506 .name = serial , 507 .flags = DM_UC_FLAG_SEQ_ALIAS, 508 .post_prob
[单片机]
OK6410A 开发板 (六) 2 OK6410A linux-5.11 移植
$ arm-linux-gnueabi-gcc --version arm-linux-gnueabi-gcc (Linaro GCC 7.4-2019.02) 7.4.1 20181213 Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. arch/arm/configs/s3
[单片机]