ARM嵌入式开发——基础概念

自作多情 提交于 2020-01-11 01:19:54


嵌入式Linux系统组成

嵌入式Linux系统软件由三部分组成:

  • BootLoader(uboot)裸板软件,初始化硬件+从闪存加载内核到内存并且启动内核+给内核传递启动参数,告诉内核根文件系统rootfs在什么地方。(上电运行,内核启动后结束)
  • Linux内核(kernel):Linux系统7大功能,管理进程、管理内存、文件系统、设备控制、网络管理。掉电结束。
  • 根文件系统(rootfs):
    • bin:各种命令。
    • sbin:各种超级用户的命令。
    • lib:标准系统库。
    • etc:各种服务的配置(tftpd-hpa,nfs)
    • dev:存放设备文件
    • sys:存放虚拟文件系统sysfs相关内容
    • proc:存放虚拟文件系统procfs相关内容
    • usr:存放其他命令

嵌入式Linux系统的启动流程

  1. 上电CPU运行uboot
  2. uboot根据bootcmd加载启动内核并且通过bootargs给系统传递参数。
  3. 内核启动,完成7大功能。
  4. 内核最后根据uboot传递的bootargs到某个地方找到根文件系统rootfs
  5. 一旦找到根文件系统rootfs,控制权交给根文件系统。
  6. 内核会运行第一号进程/sbin/init
  7. /sbin/init穿件子进程,子进程执行/bin/sh
  8. shell程序启动,用户即可输入各种Linux命令。

uboot制作

uboot特点

uboot是一款著名的开源软件,德国的denx开发小组维护。
uboot支持多种处理器架构(x86、ARM、PowerPC、MIPS、FPGA、dsp)
uboot支持多种多样的硬件开发板
uboot支持引导多种操作系统(Linux、VxWorks)
uboot支持多种多样的文件系统格式(ext4、ext2、fat32)
uboot支持多种多样的硬件外设的设备驱动(应哦按驱动,SD卡驱动等)
uboot本质就是一个裸板程序,知识这个裸板程序很复杂。
uboot上电执行,内核启动结束uboot运行。

uboot三大功能

硬件初始化功能

必要的硬件初始化

  • 初始化CPU的cache(缓存)
  • 初始化始终(CPU主频,UART时钟等等)
  • 初始化内存
  • 初始化闪存
  • 初始化UART(调试串口)
  • 初始化网卡(下载使用)
  • 关闭中断(避免嵌入式Linux系统启动时被打断,造成系统启动时间加长,等系统正式启动完毕再处理中断)
  • 关闭看门狗(避免嵌入式Linux系统启动时看门狗给CPU发送复位信号,等待系统正式启动完毕再开启看门狗)

可选硬件初始化:

  • 由于内核启动,uboot的生命周期就要结束,并且uboot之前所做的硬件初始化工作无效(内核重新硬件初始化),没有必要在uboot中做大量的硬件初始化代码,如果做了会影响系统的启动时间,所以uboot有些外设是否初始化完全根据用户需求来定。

引导加载内核

setenv bootcmd mmc read A B C\; bootm A

从EMMC的B开始读C这么多的数据到内存的A,并且从A启动内核。

setenv bootcmd tftp A uImage \; bootm A

从上位机下载内核到内存的A,并且从A启动内核

为内核传递启动参数

setenv bootargs root=/dev/mmcblk0p2 ....

告诉内核rootfs在EMMC的第三个分区。

setenv bootargs root=/dev/nfs ...

告诉内核rootfs在上位机,利用NFS网络服务找到文件系统启动。

uboot源码操作

  • uboot.bin二进制文件肯定是由uboot源码编译生成。
  • uboot源码一定要从芯片厂家或者开发板的厂家来获取,由于每板子的外围布线不一样,所以虽然很多板子使用的CPU芯片一直,但是外围设备不一样,所以官方的uboot源码仅仅支持官方的参考板子,并不会每种板子都支持。所以如果将来出现硬件差异,需要对官方的uboot源码进行针对性修改。当然,板子如果是从厂家购买的,那么厂家肯定有针对的uboot修改好的源码。
  • 获取正确的交叉编译器,交叉编译器的版本要和uboot源码的版本相配合,如果不匹配则会发生编译报错。
  • 验证官方uboot源码的正确性。
    • uboot源码操作三部曲:
    • make distclean
    • make ABC_config
    • make
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!