作者: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