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)