系统移植 简单的说,在开发板上运行linux系统。
驱动, linux系统与硬件设备的适配,内核级别编程。
Linux提供的功能图:

移植过程需要的文件:
- bootload ,初始化硬件设备,引导内核启动,为kernal加载做准备工作 u-boot.imx
- 内核镜像 ,就是linux本身了。包含上面介绍的5大功能。 zImage
- 设备树文件(> kernel 3.0 ) 描述硬件设备资源信息 imx6ull-alientek-emmc.dtb
- 文件系统 与用户进行交互的,库文件,用户程序, rootfs.tar
开发板上的重要资源:


启动方式通过拨码开关选择:
- usb启动 (芯片级调试)
- sd卡启动 (前面裸机阶段使用,软件开发阶段)
- EMMC启动 (量产使用)
- Nand flash启动(无)
系统移植的概念:
Linux系统想要移植到开发板上,我们需要移植三部分: U-Boot(bootloader)、 zImage(内核镜像)、 rootfs(文件系统),我们需要将其烧写到开发板的存储器中,这个过程称为系统移植。
U-Boot(Universal Boot Loader)是嵌入式系统中广泛使用的开源引导加载程序,其核心功能是为操作系统内核的启动提供硬件初始化、镜像加载及参数传递等支持。
zImage 是Linux操作系统的内核镜像文件,内核可以理解为一个软件,具备管理处理器、内存管理、硬件设备管理、进程调度、网络通信等功能。 rootfs是Linux系统运行的基础,可以提供管理文件资源,与用户进行操作交互等功能。
|--------|----------------------------------|
| 名称 | 需要烧写的文件名 |
| U-Boot | u-boot.imx |
| 内核 | zImage、imx6ull-alientek-emmc。dtb |
| 文件系统 | rootfs.tar.bz2 |
常见的几种烧写模式:
|----------------------------------------------------|--------------------|
| 模式 | 应用场景 |
| 模式一:烧写到SD卡 | 方便多设备部署及系统的刷 机 和恢复 |
| 模式二:烧写到EMMC | 开发结束,产品量产 |
| 模式三: uboot烧写到SD卡 + zImage通过tftp下载 + rootfs通 过nfs挂载 | 方便开发 |
sd分区布局:
cpp
+------------------+ <- 0 字节 (第 0 扇区)
| MBR 分区表 | (存储分区定义, 占用 512 字节)
+------------------+ <- 512 字节 (第 1 扇区)
| 保留区域 |
| (U-Boot 存放处) | <- 脚本从 1KB (1024字节) 处开始写入 u-boot.imx
| ... | (占用空间约 300KB~800KB, 取决于 uboot 大小)
| 最大至 1MB |
+------------------+ <- 1MB 边界 (扇区 2048, 即第一个分区起始点)
| 分区 1 (FAT32) |
| 容量: 64 MB | 包含文件:
| (挂载为 /boot) | ├── zImage
| | └── xxx-emmc.dtb (或 nand.dtb)
+------------------+ <- 1MB + 64MB 边界
| 分区 2 (EXT3) |
| 容量: 剩余空间 | 包含文件:
| (挂载为 /) | ├── bin/
| | ├── etc/
| | ├── lib/
| | │ └── modules/ (解压了驱动模块)
| | └── usr/
+------------------+ <- SD 卡末端
环境的搭建:
在嵌入式开发中, Ubuntu需要一个网卡与开发板连接,用来实现基于网络的tftp(文件传输)及nfs(目录共享)服务功能。如果Ubuntu想使用apt-get工具访问软件源下载软件,或想访问百度时就会非常不方便,此时我们可以通过设置双网卡来实现既能上网又能与开发板通信的效果。
配置步骤:
-
添加双网卡
-
配置双网卡:
将网络适配器1设置为NAT模式,将网络适配器2设置为桥接模式。
1.将网络适配器配置为NAT模式。
2.将网络适配器3配置为桥接模式(可能名字不一定为"网络适配3")。
- 配置桥接网卡的具体信息:
桥接模式的网络适配器必须桥接到有线网卡,开发板通过网线与电脑有线网卡连接,通过桥接模式到Ubuntu虚拟机中,实现网络通信。
将桥接模式的网卡桥接到有线网卡上
- 配置NAT网卡的具体信息:
NAT网卡的IP地址网段一般都是虚拟的,为了方便管理,我们统一配置为192.168.78.0这个网段,后续命令方便统一设置。
将NAT模式的网卡网段设置为192.168.78.0网段
- 配置Ubuntu网络配置文件
我们需要将Ubuntu中的两个网卡设置为正确的IP地址。
使用ifconfig查看两个网卡的名字, ens33和ens36(每个电脑可能不一样)
tftp服务器配置:
tftp是基于TCP/IP网络协议的一个应用层协议,主要用来实现简单文本的传输,在嵌入式开发中,一般用于开发板和电脑间文件的传输。比如:开发板需要内核镜像文件,就可以使用tftp从服务器下载,并在开发板中运行。
nfs服务器配置:
nfs是基于网络的一种分布式文件系统协议,允许主机利用网络来实现目录的挂载。在嵌入式开发中,我们通常将开发板的文件系统挂载到Ubuntu的指定目录下,形成共享文件,这样我们在Ubuntu下编写软件,编译软件,将可执行程序放到共享目录下,开发板即可拿到代码,并执行代码。有了nfs,我们就不需要手动拷贝代码到开发板中,提高了开发效率。
交叉开发工具链配置:
我们之前编写的程序都是通过gcc编译的, gcc可以将代码编译成x86平台支持的汇编指令集,但是我们现在使用ARM平台,所以需要更换为能够编译成ARM精简汇编指令集的编译工具,所以这种在x86平台通过工具链编译成能在ARM平台运行代码的工具称为,交叉开发工具链。
vim配置:
驱动中我们需要使用vim搭配ctags工具来完成对代码的追踪,所以vim必须配置才能实现对代码的搜索。