linux内核——9_操作系统启动初始化程序init2

本文深入探讨Linux内核如何进行多平台适配,通过machine_desc结构体识别不同板子,并详细解析启动流程,包括从链接脚本vmlinux.lds.S中分析init.arch.info,以及如何通过UBOOT参数配置machine_desc。同时,文章介绍了start_kernel函数中的setup_arch和setup_machine_fdt,阐述了如何选择最合适的machine_desc结构体。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:GWD 时间:2019.7.31

一、课程内容
1.内核如何进行多平台的适配,在内核中是如何认识这些板子的?结构体 machine_desc
2.内核启动的整体流程
3.认识一种高效的编程结构(代码段)
二、从链接脚本看一下结构:vmlinux.lds.S
1、分析init.arch.info

.init.arch.info : {
	__arch_info_begin = .;
	*(.arch.info.init)				//  代码段
	__arch_info_end = .;
}

2、这些段有什么作用呢,我们搜索一下会在三个地方引用init.arch.info;
1)、ARCH.H 宏定义	
#define MACHINE_START(_type,_name)			\
static const struct machine_desc __mach_desc_##_type	\
__used							\
__attribute__((__section__(".arch.info.init"))) = {	\
.nr		= MACH_TYPE_##_type,		\
.name		= _name,				
#define MACHINE_END				\
};

2)、多种板子的BSP文件中出现的宏定义调用
MACHINE_START(S3C2440, "SMDK2440")
3、展开2440:
#define MACHINE_START(S3C2440,"SMDK2440")			\
static const struct machine_desc  __mach_desc_S3C2440	\
__us
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值