Linux内核概念
从技术上说 linux 是一个内核,而一个内核不是一套完整的操作系统。通常我们使用的 linux 系统是一个集 linux 内核、工具集、各种库、桌面管理器、应用程序等一体的一个发布包 (发行版)。
对于一个嵌入式产品,应用要在系统上运行。小公司看中成本,中小级别公司产品是否可以二次开发,大型公司更看中产品提供的服务是否安全稳定。而Linux内核的免费、开源、高可靠性、支持硬件平台广泛恰好符合都有要求。
linux 各个版本下载地址 https://www.kernel.org/pub/linux/kernel/
Linux内核子系统
- 进程管理
- 内存管理
- 文件系统
- 网络协议
- 设备管理
Linux源码的目录结构
内核编译(使用已经移植好了的内核源码)
分别对内核和设备树进行编译,设备树是描述芯片与外围硬件的配置信息的一类数据结构。
make uImage 编译内核,生成镜像文件uImage
make dtbs 编译设备树,生成.dtb文件
启动流程
在嵌入式系统中,由Bootloader引导加载内核,然后运行内核,挂载根文件系统,运行应用程序。
在开发调试阶段,通过tftp网络引导内核,产品开发成功之后,还需要将uImage ramdisk等放到EMMC上,通过EMMC启动就可以了。
内核启动流程
a. 自解压内核 decompess (arch/arm/boot/compressed/head.S)
b. 运行内核汇编部分 head.S 入口stext (arch/arm/kernel/head.S)
检测合法性(CPU 类型,机器类型)
c. 运行内核C部分 start_kernel (init/main.c)
CPU,机器参数的安装 setup_arch
中断,定时,终端,内存等最基本的初始化
创建核心进程 kernel_init运行,启动多任务调度
d. 挂载rootfs
e. 运行第一个应用程序init (一般是 linuxrc)