跳转至

Chapter3 Linux系统移植

移植Linux

在进行 Linux 驱动开发之前肯定需要先将 Linux 系统移植到开发板上去。但和 MCU 上移植 RTOS 不同,Linux 的移植要复杂一些。

在移植 Linux 之前我们需要先移植一个 bootloader 代码,这个 bootloader 代码用于启动 Linux 内核,bootloader有很多,常用的就是 U-Boot。移植好 U-Boot 以后再移植 Linux 内核,移植完 Linux 内核以后 Linux 还不能正常启动,还需要再移植一个根文件系统(rootfs),根文件系统里面包含了一些最常用的命令和文件。

所以 U-Boot、Linux kernel 和 rootfs 这三者一起构成了一个完整的 Linux 系统,一个可以正常使用、功能完善的 Linux 系统。

1. U-Boot介绍

U-Boot 深度解析:从原理到实践

U-Boot(Universal Boot Loader)是嵌入式系统领域中最流行、功能最完善的 BootLoader 软件之一. 作为嵌入式 Linux 系统的"引导者", U-Boot 负责在操作系统运行之前完成关键的硬件初始化和系统引导工作. 其名称"Universal"体现了它的设计目标——支持多种架构、多种平台和多种操作系统

从历史角度看, U-Boot 起源于 2000 年的 PPCBoot 项目, 由德国 DENX 软件工程中心的 Wolfgang Denk 主导开发. 它后来融合了 8xxROM 和 FADSROM 的功能, 逐步发展成为今天支持 ARM、PowerPC、MIPS、x86、RISC-V 等多种处理器架构的"通用"BootLoader. 根据 2023 年嵌入式开源峰会上的数据, U-Boot 项目每年有约 6000 次提交, 拥有约 300 万行 C 代码, 支持超过 21 种 RISC-V 开发板以及大量的 ARM 平台

在嵌入式系统中, U-Boot 的地位相当于 PC 系统中的 BIOS 或 UEFI. 如同 PC 启动时首先运行 BIOS 一样, 嵌入式系统上电后首先执行 U-Boot. U-Boot 负责初始化处理器、设置时钟、配置内存控制器、检测 DRAM, 然后初始化必要的硬件设备如串口、网络、存储设备等, 最后加载操作系统内核并将控制权转交给内核

对于一块开发板而言,通常有3种uboot。1 uboot 官方的 uboot 代码:由 uboot 官方维护开发的 uboot 版本,版本更新快,基本包含所有常用的芯片。2 半导体厂商的 uboot 代码:半导体厂商维护的一个 uboot,专门针对自家的芯片,在对自家芯片支持上要比 uboot 官方的好。 3开发板厂商的 uboot 代码:开发板厂商在半导体厂商提供的 uboot 基础上加入了对自家开发板的支持。

uboot 官方的基本是不会用的,因为支持太弱了。最常用的就是半导体厂商或者开发板厂商的 uboot,如果你用的半导体厂商的评估板,那么就使用半导体厂商的 uboot,如果你是购买的第三方开发板,比如正点原子的 I.MX6ULL 开发板,那么就使用正点原子提供的 uboot 源码(也是在半导体厂商的 uboot 上修改的)。当然了,你也可以在购买了第三方开发板以后使用半导体厂商提供的 uboot,只不过有些外设驱动可能不支持,需要自己移植,这个就是我们常说的 uboot 移植。

环境变量命令

  • 查看支持的命令 help / ?
  • 打印环境变量 print
  • 修改(包括新建与删除)环境变量 setenv
  • 保存环境变量 saveenv

内存操作命令

  • 查看内存地址值 md[.b, .w, .l] address [# of objects]
  • 修改内存地址值 nm [.b, .w, .l] address
  • 拷贝数据值 cp [.b, .w, .l] source target count
  • 比较内存数据是否相等 cmp [.b, .w, .l] addr1 addr2 count

网络操作命令

  • 查看是否与ip地址建立连接 ping ip_address
  • 从路由器获取ip地址 dhcp
  • 通过nfs传输 nfs [loadAddress] [[hostIPaddr:]filename]
  • 通过tftp传输 tftp [loadAddress] [filename]

MMC设备操作命令

  • 输出当前选中的mmc设备的信息 mmc info
  • 扫描当前开发板上所有的MMC 设备 mmc rescan
  • 来查看当前开发板一共有几个MMC设备 mmc list
  • 切换当前选中的mmc设备 mmc dev
  • 查看mmc设备分区 mmc part
  • 写MMC设备 mmc write
  • 擦除MMC设备 mmc erase

FAT/EXT 格式文件系统操作命令

  • 查看MMC设备某个分区的文件系统格式 fstype
  • 查询FAT/EXT格式设备的目录和文件信息 fatls ext2ls ext4ls
  • 将指定的文件读取到DRAM fatload ext2load ext4load

boot操作命令

  • 启动zImage镜像文件 bootz
  • 启动uImage镜像文件 bootm
  • 读取环境变量bootcm来启动(运行bootcm脚本启动) boot

其他命令

  • 可复位重启 reset
  • 跳到指定的地址处执行应用 go addr [arg ...]
  • 于运行环境变量中定义的命令(运行自定义脚本) run

2. U-Boot顶层Makefile