Linux驱动与系统移植---系统移植的基本概念以及系统的几种烧录方式简介
一. 系统移植
1.1 什么是系统移植
系统移植简单的说,在开发板上运行linux系统。
驱动, linux系统与硬件设备的适配,内核级别编程。
Linux系统想要移植到开发板上,我们需要移植三部分: U-Boot(bootloader)、zImage(内核镜像)、 rootfs(文件系统),需要将其烧写到开发板的存储器中,这个过程称为系统移植。
U-Boot(Universal Boot Loader)是嵌入式系统中广泛使用的开源引导加载程序,其核心功能是为操作系统内核的启动提供硬件初始化、镜像加载及参数传递等支持。
zImage 是Linux操作系统的内核镜像文件,内核可以理解为一个软件,具备管理处理器、内存管理、硬件设备管理、进程调度、网络通信等功能。
rootfs是Linux系统运行的基础,可以提供管理文件资源,与用户进行操作交互等功能

1.2 为什么要进行系统移植
linux可提供如下功能:
mem管理:malloc,calloc等
进程管理:支持多进程
网络设备:套接字编制
文件系统(交互,数据存储):open,read,write等文件操作
IPC(IPC的实现):进程间通信

1.3 系统移植的四大文件
uboot->dtb、kernal->rootfs
1、bootload 程序
作用:Linux 系统要启动就必须需要一个 bootloader 程序,也就说芯片上电以后先运行一段 bootl oader 程序。这段 bootloader 程序会先初始化 DDR 等外设,然后将 Linux 内核从 flash(NAND, NOR FLASH,SD,MMC 等)拷贝到 DDR 中,最后启动 Linux 内核。bootloader 最主要的工作就是启动 Linux 内核,
bootloader 和 Linux 内核的关系 就跟 PC 上的 BIOS 和 Windows 的关系一样
linux中的 bootload 叫 uboot(Universal Boot Loader)
2、linux的核心部分---内核
作用:包含上面提到过的五大功能:mem管理,进程管理,网络设备,文件系统(交互,数据存储),IPC(IPC的实现)
就是Linux系统本身(经过裁剪)
zImage
3、文件系统
作用:与用户进行交互的,库文件,用户程序等
根文件系统
rootfs.tar
linux中解压命令:tar -xvf 压缩包名字
4、设备树
作用:描述开发板上有哪些设备,描述硬件设备资源信息
imx6ull-alientek-emmc.dtb
二. IMX6ULL
2.1 IMX6ULL 的启动方式
可以通过拨码开关进行选择:
拨码开关的选择
USB启动:芯片级调试
SD卡启动:裸机阶段使用,软件开发阶段
EMMC启动:量产使用
Nand flash启动等
2.2 SD 卡的布局
当使用 NXP 开发的烧写工具向 SD 卡中烧写系统时,SD卡的布局如下,以4G大小为例:
首先,SD 卡被分为了两个区:
第一个区:64M
1M + 63M
1M:存放分区表
63M:uboot
第二个区:剩下的4 G - 64M
kernel + rootfs

SD 卡详细布局图:

三. 虚拟机的配置
3.1 网络部分配置
进行双网卡配置,一个设置为NAT模式,一个设置为桥接模式
3.1.1 NAT模式
Ubuntu虚拟机通过NAT模式工作时, Windows会认为Ubuntu系统是工作在其上的一款软件,因此会为Ubuntu系统虚拟一个不存在的网卡,即192.168.XX.XX(此IP地址可以通过软件配置),如果Windows是能够正常上网的,那么Ubuntu一定也是能够上网的。该模式的主要功能及局限性为:
1、上网方式简单, Windows有网的情况下, Ubuntu想要上网,配置为NAT模式是最简
单快捷的。
2、NAT模式因为Ubuntu地址是虚拟IP地址,所以不能作为服务器IP地址,在网络中也是
无法被找到的。
3、如果只是想Ubuntu上网,而不需要作为服务器被网络终端访问,推荐配置为NAT模
式。

3.1.2 桥接模式
Ubuntu虚拟机通过桥接模式以192.168.1.100作为IP地址来操作网卡, Windows系统则通过192.168.1.200作为IP地址操作网卡,两个IP地址均是存在的,所以Ubuntu可以作为独立的IP地址来进行网络操作。该模式主要功能及局限性为:
1、作为服务器时必须选择桥接模式,因为服务器必须有真实IP地址,这样才能在网络中被
找到
2、Ubuntu与Windows作为独立的IP地址来上网, Ubuntu网络是否正常与Windows是没
有关系的,两者网络连接状态是独立的。

3.1.3 双网卡配置
Ubuntu双网卡配置主要是为了能够让Ubuntu在能够与开发板通过有线网卡连接的情况下,还能够通过无线网卡实现上公网的目的,因为开发板需要 tftp 和 nfs 服务器,所以要求Ubuntu作为服务器工作在桥接模式,同时开发时经常需要下载软件,还要求Ubuntu能够上公网访问软件源,需要工作在NAT模式:
1、网络适配器1:NAT模式,负责Ubuntu上公网的功能。
2、网络适配器2:桥接模式,负责与开发板网络连接,作为开发板的tftp和nfs服务器

四. 常见的三种烧写模式

4.1 烧写到 SD 卡
方便多设备部署及系统的刷机和恢复
示例:

4.2 烧写到 EMMC
产品量产时
4.3 模式三
uboot烧写到SD卡 + zImage通过tftp下载 + rootfs通过nfs挂载
概念:
此方法主要是开发时使用,将 uboot 烧录到SD卡上,并设置为SD卡启动,开发板上电即可启动uboot,然后将 zImage 放入到 tftp 管理目录,通过 tftp 下载 zImage 和设备树文件到 DDR 中,并加载内核,最后将文件系统设置在 nfs 服务器上,内核挂载 nfs 服务器的文件系统,启动Linux系统
这样做的目的在于每次下载的zImage和dts设备树文件都是最新裁剪出来的,减少了烧录固化的时间,并且文件系统也是最新版本的,所以这种模式主要用于开发时使用
使用的 U-Boot 版本:
U-Boot 2016.03

该模式需要使用到的命令:
env default -a #uboot 变量回复默认
saveenv # 保存变量
reset #重启uboot
setenv ipaddr 192.168.1.50 # 设置开发板ip地址
setenv ethaddr 00:04:9f:04:d2:35 #设置开发板网卡mac地址
setenv gatewayip 192.168.1.1 #设置开发板网关
setenv netmask 255.255.255.0 #设置开发板子网掩码
setenv serverip 192.168.1.100 #设置pc段的ip地址
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.100:/home/linux/nfs/rootfs,v3,proto=tcp rw ip=192.168.1.50:192.168.1.100:192.168.1.1:255.255.255.0::eth0:off' #设置根文件系统的位置
setenv bootcmd 'tftp 80800000 zImage;tftp 83000000 imx6ull-alientek-emmc.dtb;bootz 80800000 - 83000000' #设置 下载zImage ,dtb
saveenv #保存变量
reset #重启uboot
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)