【嵌入式】构建嵌入式Linux系统

知识架构及层次

Linux内核由三部分构成:

  • Bootloader:启动引导系统(可执行文件)
  • Kernel:内核(可执行文件)
  • Root File System:根文件系统
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

嵌入式Linux系统构成及启动略析

在这里插入图片描述
嵌入式 Linux 启动类同4X100 米接力跑,是由多个部分共同完成,包括:

  • 第一棒:bootloader 初始化PC 上则是 BIOS 初始化和 grub 启动两步)。
    首先完成内存初始化、微处理器配置、时钟初始化等基本工作,然后搬运Linux 内核到特定内存,并调用Linux 内核初始化函数(一般是head_armv.s 中的第一条指令),启动内核,把CPU 的控制权交给内核代码。
  • 第二棒:内核代码开始执行,初始化硬件,构建内存管理系统、进程管理系统、模块管理系统、中断管理系统等 Linux 各种重要功能系统,最后创建init 进程,并加载根文件系统,将控制权递交到根文件系统。
    在这里插入图片描述
  • 第三棒:内核挂载根文件系统(相当于将根文件系统内容解压缩)。
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 第四棒,根据 inittab 配置文件,加载应用程序,最后启动 shell 程序,Linux 启动完成。
    在这里插入图片描述

嵌入式Linux三剑客之uboot技术

Bootloader概念

Bootloader 是操作系统内核运行前运行的一段小程序。
功能:

  1. 初始化硬件设备,如对 CPU、SDRAM、Flash、串口等进行初始化;
  2. 加载内核到内存并执行内核代码;
  3. 提供一些命令工具,如操作flash、从PC机搬运内核到开发板等功能。

Bootloader 相当于PC机上 BIOS 和 GRUB 功能集合体。

UBOOT

常见的 Bootloader:
在这里插入图片描述

UBOOT简介

U-Boot 是一个主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机系统结构,包括PPCARM、AVR32、MIPSx8668k、Nios 与 MicroBlaze。这也是一套在GNU通用公共许可证之下发布的自由软件

这个项目起源于 Magnus Damm.在 8xx PowerPC 架构下写的引导加载程序:8xxROM。1999 年十月,Wolfgang Denk 将项目移转到 SourceForge.net,但 SourceForge.net 不允许数字开头的项目名称,所以改名为 PPCBoot。2002年11 月 PPCBoot 改名为 U-Boot。

UBOOT优势

  • 开放源码
  • 支持多种嵌入式操作系统内核,如 Linux、NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS、android
  • 支持多个处理器系列,如 PowerPC、ARM、x86、MIPS
  • 较高的可靠性和稳定性;
  • 高度灵活的功能设置,适合 U-Boot 调试、操作系统不同引导要求、产品发布等;
  • 丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等
  • 较为丰富的开发调试文档与强大的网络技术支持

UBOOT功能

  • 系统引导支持 NFS 挂载、RAMDISK (压缩或非压缩)形式的根文件系统
    支持 NFS 挂载、从 FLASH 中引导压缩或非压缩系统内核;
  • 基本辅助功能强大的操作系统接口功能;
    可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤以Linux支持最为强劲;
    支持目标板环境参数多种存储方式,如 FLASH、NVRAM、EEPROM;
  • CRC32 校验可校验 FLASH 中内核、RAMDISK 镜像文件是否完好
  • 设备驱动串口、SDRAM、FLASH、以太网、LCD、NVRAM、EEPROM、键盘、USB、PCMCIA、PCI、RTC等驱动支持;
  • 上电自检功能 SDRAM、FLASH 大小自动检测;SDRAM 故障检测;CPU型号;
  • 特殊功能 XIP 内核引导;

UBOOT工作模式

  • 启动加载模式是 Bootloader 的正常工作模式,嵌入式产品发布时,Bootloader 必须工作在这种模式下,Bootloader 将嵌入式操作系统从 FLASH 中加载到 SDRAM 中运行,整个过程是自动的。
  • 下载模式就是 Bootloader 通过某些通信手段将内核映像或根文件系统映像等从PC机中下载到目标板的 FLASH 中。

UBOOT源码目录

  • 源码
  • 配置文件及脚本解释器
  • Makefile文件

在这里插入图片描述

UBOOT编译过程

  1. 解压缩uboot源码到目录下
  2. 根据开发板进行配置
    make smdk2440
  3. 编译uboot
    make
  4. 烧写uboot.bin到开发板(使用仿真器完成)
  5. 启动开发板后,uboot就运行起来
    在这里插入图片描述

典型uboot命令

  • nand分区命令:nand
  • 参数命令:setenv/printenv
  • 传输文件命令:load/tftp
  • 启动命令:bootm
  • 其它命令:nm/cp/date

打印环境变量printenv
功能:打印开发板上的环境变量值
例:

Uboot> printenv
baudrate=115200
ipaddr=192.168.1.1
ethaddr=12:34:56:78:9A:BC
serverip=192.168.1.5
Environment size: 80/8188 bytes

设置环境变量setenv 变量 值
功能:设置开发板上的环境变量值
例:

Uboot> setenv ethaddr 12:34:56:78:9A:BC
Uboot> setenv ipaddr 192.168.1.1
Uboot> setenv serverip 192.168.1.254   
			(tftp服务器的地址)

保存环境变量saveenv
功能:保存开发板上的环境变量值

网络加载内核tftp 待加载到的内存地址 待加载文件名
功能:通过网络将位于PC机上tftp服务器目录(如为/tftpdroot) 下的文件加载到开发板内存地址
例:把 server(IP=环境变量中设置的serverip)中 /tftpdroot/ 下的 vmlinux 通过 TFTP 读入到物理内存 32000000 处。

Uboot> tftp 32000000 vmlinux

启动内核命令bootm 内核内存地址
功能:将位于内核内存地址处的内核启动起来
例:

Uboot> bootm 0x30008000
## Booting image at 30008000 ...
Starting kernel ...
Uncompressing
Linux......................................................................
done.

NandFlash操作命令:nand 命令码 参数
功能:

  • 根据命令码对 nandflash 设备进行相关操作,命令码有以下几种
  • erase
    语法形式:nand erase EraseAddr EraseSize
    功能:擦除 nand 设备从 EraseAddr 地址处 EraseSize 块大小内容
  • write
    语法形式:nand write FromMemAddr ToNandAddr size
    功能:将内存地址为 FromMemAddr 处 size 字节数据写到 nand 设备 ToNandAddr 地址处。
  • Info
    语法形式:nand info
    功能:打印 nand 设备信息
  • read
    语法形式:nand read ToMemAddr FromNandAddr size
    功能:从 Nand 设备地址为 FromNandAddr 处读取 size 字节数据到内存 ToMemAddr 处。

嵌入式Linux三剑客之内核技术

嵌入式Linux三剑客之文件系统技术

课后作业

1.嵌入式Linux操作系统包括(bootloader)、(Linux 内核) 、(根文件系统)三部分组成。
2.在PC机上Linux系统编译使用的编译器名为(gcc) ,ARM处理器嵌入式编译器名为(arm-linux-gcc)。
3.从C语言角度来理解,嵌入式Linux内核仅是众多(函数)的集合体,其有一个类似于main的函数,名称为 (start_kernel)。

4.简述 bootloader 的功能:

  1. 初始化硬件设备,如对 CPU、SDRAM、Flash、串口等进行初始化;
  2. 加载内核到内存并执行内核代码;
  3. 提供一些命令工具,如操作flash、从PC机搬运内核到开发板等功能。

5.在uboot中,打印开发板上环境变量值的命令为(printenv),设置IP地址为192.168.1.1的命令为(setenv ipaddr 192.168.1.1),假如嵌入式内核名为vmlinux,通过tftp加载内核的命令为 (tftp 32000000 vmlinux),启动嵌入式Linux内核的命令为(bootm 0x32000000)。

发布了178 篇原创文章 · 获赞 59 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43734095/article/details/105251245