ARM《5》_系统移植(在开发板上运行linux程序)

0、前言:

这是一篇以问题为导向,的技术贴!讲的是,通过 “Linux 虚拟机 + 网络服务(TFTP/NFS)” 调试开发板的经典流程;这样做的好处是:无需将根文件系统烧录到开发板的 eMMC 或 SD 卡,修改根文件系统时(如添加程序、修改配置),只需在虚拟机中操作,开发板重启后即可生效,极大提高调试效率;Linux 系统对交叉编译、内核开发、网络服务的支持更友好;在现代嵌入式 Linux 系统中(尤其是支持设备树的架构,如 Exynos4412 所在的 ARM 架构),最小 Linux 系统运行必须依赖 “内核”“设备树”;同时,还需要 “根文件系统” 才能构成可交互的完整系统。


基础概念库:

1、ADD_基础概念

1、嵌入式系统:嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。2、嵌入式系统组成部分:微控制器、晶振(通过对石英进行切割,切割成非常薄的石英片,然后施加一定的电压,石英晶体就产生一定频率的振动,接入电路后就会输出脉冲信号。)、内存(如:SRAM,SDRAM)、存储器(如:ROM,FLASH,SD,微硬盘)、其他外围设备接口;3、eMMC(Embedded MultiMediaCard)和 SD(Secure Digital)卡都是基于闪存(NAND Flash)的存储介质,核心功能都是存储数据,简单说:SD 卡是 “可插拔的外置存储”,eMMC 是 “焊接在主板上的内置存储”,二者的设计目标完全不同。

iTOP-4412 支持通过拨码开关选择 “SD 卡启动” 或 “eMMC 启动”:
1、调试阶段:用 SD 卡启动(方便修改镜像,无需拆板焊接);
2、最终交付:将调试好的系统固化到 eMMC,切换为 eMMC 启动(稳定、无需插卡)。

2、实现系统移植的基础环境

开发板,用的是迅为的itop4412,使用的芯片三星的exynos4412,CPU四核,每核频率1GHz,内存共2G,emmc硬盘16G。需将虚拟机网络模式设为 “桥接模式”(确保开发板、虚拟机、主机在同一局域网,能互相 ping 通)。【虚拟机设置和虚拟机网络编辑器都得改】配置开发板环境主要配置两个程序,一个是uboot,另一个是linux。最终就是让开发板能够正常运行linux系统。硬件与工具:iTop4412 开发板、串口工具(如 SecureCRT、MobaXterm):用于查看开发板启动日志和交互(我选择的是SecureCRT)U-Boot 源码:用于引导内核启动,要选择适配好的版本。作用是通过ping命令检测网络是否连通。可通过tftp(网络协议)下载文件,还可以通过nfs(网络文件系统)来下载文件,挂载一个远端设备上的目录。(已经安装在SD卡中)根文件系统(rootfs)是 Linux 系统的 “骨架”,包含操作系统运行所需的所有文件Linux 内核镜像 zImage、设备树文件 .dtb交叉编译工具链:需使用 ARM 交叉编译器(如 arm-linux-gnueabihf-gcc),迅为资料中通常会提供配套工具链。(已经安装在linux中)

3、嵌入式 Linux 移植流程:

1、在 Linux 虚拟机中安装 TFTP 文件服务器:通过局域网向开发板传输小型文件(如 Linux 内核镜像 zImage、设备树文件 .dtb)。开发板的 U-Boot 支持通过 TFTP 协议从服务器下载文件到内存,避免每次修改内核后都要烧录 SD 卡,适合频繁调试内核。【TFTP(Trivial File Transfer Protocol,简单文件传输协议),在局域网内提供“极简、无认证、体积小”的文件上/下载服务】2、在 Linux 虚拟机中安装 NFS 网络文件系统:让开发板通过网络挂载虚拟机中的根文件系统(rootfs),无需将根文件系统烧录到开发板的存储介质(eMMC/SD 卡)。根文件系统调试频繁(如修改配置、添加程序),通过 NFS 挂载可实时生效,无需反复烧录。【NFS(Network File System)网络文件系统,把远程服务器上的目录“挂”到本地,像用本地磁盘一样读写,省得拷来拷去,多台 Linux/Unix 机器共享数据、做集群、做虚拟化存储都靠它。】(记得:关闭虚拟机Ubuntu的防火墙)3、在 iTOP-4412 开发板中设置网络参数(IP、服务器 IP、网关、子网掩码)4、下载 kernel 到内存:通过 TFTP 将虚拟机中的内核镜像下载到开发板的物理内存(准备启动)。【zImage:编译好的 Linux 内核镜像(存放于虚拟机的 TFTP 根目录)】5、切换到 U-Boot 运行环境下,配置为自动启动 Linux:设置 U-Boot 启动参数(如内核地址、根文件系统路径),让开发板上电后自动加载内核并启动 Linux,无需手动输入命令。说明:首先在linux中,安装配置好tftp和nfs,tftp的作用是为了把linux内核镜像 zImage,设备树exnos4412-itop-elite.dtb下载到开发板上,linux内核最后要通过网络加载rootfs,为了linux运行起来之后挂载根文件系统,要安装nfs(在 Linux 虚拟机中搭建了一个 NFS 服务器,并将根文件系统 rootfs 共享出去。后续开发板启动时,U-Boot 会通过网络连接到该 NFS 服务器,将 /home/[用户名]/nfs/rootfs 挂载为开发板的根文件系统),rootfs其实就是“一个最小 Linux 的根目录”;配置完虚拟环境linux之后,就要配置开发板,开发板的SD卡中已经拷入了uboot,在uboot下设置网络初始化环境(主板ip,(服务端)虚拟机ip,等),从linux虚拟机中下载uImage,下载设备树dtb,uboot启动linux内核,linux内核运行后,加载roofs;

4、一些重要操作

在主板上设置ip配置信息后,要命令保存信息,否则无法生效;在bootcmd中配置好之后,每次启动主板,就会自动启动linux系统:setenv bootcmd tftpboot 40008000 uImage;tftpboot 42000000 exynos4412-itop-elite.dtb;bootm 40008000 – 42000000(下载kernel到内存,并启动kernel)

5、uboot加载linux内核、硬件树、根目录的过程

可以把 U-Boot 理解成开发板的 “开机管家”,Linux 内核是 “操作系统管家”,设备树是 “开发板硬件说明书”,根目录(根文件系统)是 “操作系统的家”。第一步:开发板上电,“管家” U-Boot 先上班,
检查硬件:比如摸一摸 “内存有没有问题”“串口能不能用”“网卡通不通”(对应初始化内存、串口、网卡),确保后续步骤能正常走;
第二步:“管家” 找 “硬件说明书”(设备树)和 “操作系统安装包”(内核)
拿 “硬件说明书”(设备树 .dtb):设备树里记着开发板的所有硬件细节 ——“哪个引脚接了 LED”“网卡型号是什么”“内存多大、地址在哪”。U-Boot 会把这个 “说明书” 从 TFTP 服务器(你的虚拟机)下载到开发板内存里,等着给 Linux 用;拿 “操作系统安装包”(Linux 内核 uImage):内核是 Linux 系统的核心(相当于 “操作系统管家” 的本体),U-Boot 同样从 TFTP 服务器把它下载到内存里,比如存到 0x40008000 这个内存地址(相当于给内核找了个 “临时待命区”)。
第三步:“管家” 给 “操作系统” 交代任务(传递启动参数)
在启动 Linux 前,U-Boot 还要给它 “交代清楚规则”—— 也就是设置 bootargs 启动参数,这就像 “管家跟操作系统说:‘你等下启动后,按这个规矩来’”
第四步:“管家” 叫醒 “操作系统”,并把 “家” 交给他:最后 U-Boot 执行 bootz 命令(相当于 “管家喊操作系统起床”),
U-Boot 把内存里的 “硬件说明书”(设备树)和 “启动规则”(bootargs)一起交给 Linux 内核;硬件初始化好后,Linux 按 “启动规则” 去找自己的 “家”(根目录),如果是 NFS,就通过网卡连到虚拟机,把 nfs/rootfs 这个目录 “挂载” 成自己的 / 根目录(相当于 “把虚拟机里的家,复制成自己的家”);
uboot就是一个管家,它把硬件说明书和操作系统拿过来,然后告诉操作系统初始配置,让操作系统开始工作;【不同的主板,硬件树不一样】iTOP-4412 专属的硬件树是 exynos4412-itop-elite.dtb;


具体问题解决:

案例1、在linux中编写代码,在主板上运行

1.1、liunx中编写程序


// hello.c
#include <stdio.h>
#define TEST_MACRO  555
int main()
{
     printf("Hello world:%d
", TEST_MACRO);
     return 0;
}

1.2、编译方法:

arm-linux-gnueabihf-gcc hello.c -o arm_hello

1.3、将编译好的 arm_hello拷贝到开发板所挂载的根文件系统

sudo cp arm_hello ~/nfs/rootfs

1.4、在开发板的根文件系统中运行

在secureCRT中,连接主板,切换到启动主板的linux系统,运行./arm_hello;

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容