一. 系统移植

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
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐