*/
set_task_stack_end_magic(&init_task);/* 设置任务栈结束魔术数,
*用于栈溢出检测
*/
smp_setup_processor_id();/* 跟SMP有关(多核处理器),设置处理器ID 。
* 有很多资料说ARM架构下此函数为空函数,那是因
* 为他们用的老版本Linux,而那时候ARM还没有多
*核处理器 。
*/
debug_objects_early_init(); /* 做一些和debug有关的初始化 */
boot_init_stack_canary(); /* 栈溢出检测初始化 */
cgroup_init_early(); /* cgroup初始化,cgroup用于控制Linux系统资源*/
local_irq_disable(); /* 关闭当前CPU中断 */
early_boot_irqs_disabled = true;
/*
* 中断关闭期间做一些重要的操作,然后打开中断
*/
boot_cpu_init(); /* 跟CPU有关的初始化 */
page_address_init(); /* 页地址相关的初始化 */
pr_notice("%s", linux_banner);/* 打印Linux版本号、编译时间等信息 */
setup_arch(&command_line);/* 架构相关的初始化,此函数会解析传递进来的
* ATAGS或者设备树(DTB)文件 。会根据设备树里面
* 的model和compatible这两个属性值来查找
* Linux是否支持这个单板 。此函数也会获取设备树
* 中chosen节点下的bootargs属性值来得到命令
* 行参数,也就是uboot中的bootargs环境变量的
* 值,获取到的命令行参数会保存到
*command_line中 。
*/
mm_init_cpumask(&init_mm); /* 看名字,应该是和内存有关的初始化 */
setup_command_line(command_line);/* 好像是存储命令行参数 */
setup_nr_cpu_ids();/* 如果只是SMP(多核CPU)的话,此函数用于获取
* CPU核心数量,CPU数量保存在变量
* nr_cpu_ids中 。
*/
setup_per_cpu_areas();/* 在SMP系统中有用,设置每个CPU的per-cpu数据 */
smp_prepare_boot_cpu();
build_all_zonelists(NULL,NULL); /* 建立系统内存页区(zone)链表 */
page_alloc_init(); /* 处理用于热插拔CPU的页 */
/* 打印命令行信息 */
pr_notice("Kernel command line: %s\n", boot_command_line);
parse_early_param();/* 解析命令行中的console参数 */
after_dashes = parse_args("Booting kernel",
static_command_line, __start___param,
__stop___param - __start___param,
-1,-1,&unknown_bootoption);
if(!IS_ERR_OR_NULL(after_dashes))
parse_args("Setting init args", after_dashes,NULL,0,-1,-1,
set_init_arg);
jump_label_init();
setup_log_buf(0); /* 设置log使用的缓冲区*/
pidhash_init();/* 构建PID哈希表,Linux中每个进程都有一个ID,
* 这个ID叫做PID 。通过构建哈希表可以快速搜索进程
* 信息结构体 。
*/
vfs_caches_init_early(); /* 预先初始化vfs(虚拟文件系统)的目录项和
*索引节点缓存
*/
sort_main_extable(); /* 定义内核异常列表 */
trap_init(); /* 完成对系统保留中断向量的初始化 */
mm_init(); /* 内存管理初始化 */
sched_init(); /* 初始化调度器,主要是初始化一些结构体 */
preempt_disable(); /* 关闭优先级抢占 */
if(WARN(!irqs_disabled(), /* 检查中断是否关闭,如果没有的话就关闭中断 */
"Interrupts were enabled *very* early, fixing it\n"))
local_irq_disable();
idr_init_cache(); /* IDR初始化,IDR是Linux内核的整数管理机
* 制,也就是将一个整数ID与一个指针关联起来 。
*/
rcu_init(); /* 初始化RCU,RCU全称为Read Copy Update(读-拷贝修改) */
trace_init(); /* 跟踪调试相关初始化 */
context_tracking_init();
radix_tree_init(); /* 基数树相关数据结构初始化 */
early_irq_init(); /* 初始中断相关初始化,主要是注册irq_desc结构体变
- 淘宝直播严选可靠吗?有用吗?
- b站自媒体平台怎么注册?步骤介绍
- 守望先锋在哪个平台买 守望先锋测试服怎么进入
- 2023年京东特价版&京喜平台商家换签续费公告
- 2023年京东特价版&京喜开放平台京喜C店开店管理规则
- 2023年京东开放平台商家换签续费公告
- 2023年京东商家换签续费公告
- 寻宝平台 天天寻宝答案
- 抖音号交易平台有哪些?交易方式有哪些?
- 速卖通靠什么赚钱?速卖通平台怎么样?
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
