Linux内核移植
Linux内核
基本概念
Linux内核特性
- 可移植性,支持的硬件平台广泛
- 超强的网络功能
- 多任务多用户系统
- 模块化的设计
五大子系统
- 进程管理子系统
- 内存管理子系统
- 文件系统子系统
- 网络协议子系统
- 设备管理子系统
目录结构
目录结构的描述:
与平台相关的kernel会和与平台无关的kernel功能相辅相成,无关的会依赖相关代码
平台无关
与平台无关的目录树:
平台有关–arch
arch中与平台相关代码:
命名规律
当内核中头文件重名如何解决?
头文件命名规范:
内核配置
问题
配置步骤:
- 配置仓库选取,即配置单的修改
- 交叉编译器的修改
- 体系结构体的选择
- 增删改查
体系结构选择的配置,交叉编译方式的选择
修改Makefile
各个目录的编译有Makefile进行选择编译。
各个子目录Makefile
- obj-y : 编译进内核
- obj- : 不编译进去
- obj-m: 以模块形式编译
条件编译:
**主目录Makefile的修改: **
修改连接的平台相关代码:【hdr-arch,SRCARCH变量表示平台】
- 修改变量,其中SRCARCH等于ARCH
SUBARCH默认就是X86的,内核默认配置按照X86。所以根据要求进行修好ARCH这个变量为ARM或其它。
- 编译方式修改
确定哪些文件要编译—配置单
文件命名规范:CONFIG_XXXXX
选择配置单并移动到主目录下,将其命名为xxxx.config(其中这个配置单并不满足,所以芯片公司会提供默认配置单defconfig) 。
修改defconfig使其使用开发板
找到系统对应的配置单:
make menuconfig(增删改查)
menuconfig界面:
流程:
通过一个Kconfig构成menuconfig界面的组成,然后通过menuconfig生成.config文件。最后.config文件构成Makefile的链接,进行编译。
Kconfig–>make menuconfig–>.config–>Makefile
内核编译
过程:
- 编译生成vmlinux:OS elf file。(不可被执行的,操作系统可执行文件)
- 将vmlinux copy出来到Image
- Image太大,将其压缩为zImage
- 为了满足uBoot规则,进行封装格式化为uImage
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 吾辈之人,自当自强不息!!
评论