STM32工程师 LINUX学习笔记1 学习路线规划

本文记录了作者决定深入学习嵌入式Linux,计划通过STM32Freertos与Linux对比进行,涉及U-Boot的启动过程、硬件初始化、Linux内核加载及配置,强调了配置和编译U-Boot的重要性。
摘要由CSDN通过智能技术生成

DAY 1

学习嵌入式linux多次不了了之,这次每天记录随笔,鼓励自己。
本次学习打算以我熟悉的 STM32 Freertos 与LINUX作为对比来学习。
学习过程中会大量使用ai来代替百度,所以笔记中会出现大量的AI回答。

  • 硬件
    IMX6U 正点原子开发板
  • 理清学习路线
    优先Linux 移植
    第二步 Linux 驱动开发
    第三步 QT开发

LINUX移植

  • 启动过程
    NXP原厂程序->Uboot->LINUX内核->tootfs文件系统
  • 类比STM32 freertos
    启动.s文件->main函数 创建任务-> 开启调度器-> app

NXP原厂程序 等同与 stratup.s文件
uboot等同与STM32 __main main 函数
linux内核 等同与Freertos 的启动调度器
文件系统 等同与 Freertos的各个任务
以上只是简单的等同。

U-boot

首先学习Uboot,其实就是一个大的无操作系统运行的程序
uboot 官网为 http://www.denx.de/wiki/U-Boot/

在i.MX6的启动过程中通常包括以下几个步骤:

  • 引导阶段:首先,i.MX6的Boot ROM会从存储介质中加载U-Boot的引导代码(通常是u-boot.imx文件)。这个引导代码会进行必要的硬件初始化和环境设置。
  • U-Boot阶段:一旦引导代码执行完毕,U-Boot会接管控制权,并开始执行其主程序代码。在这个阶段,U-Boot会进行更详细的硬件初始化,并加载Linux内核映像和根文件系统。
  • Linux内核启动阶段:当U-Boot完成其任务后,它会将控制权传递给Linux内核。Linux内核会进行最后的初始化工作,并启动用户空间的应用程序。

U-Boot的主要功能包括:

  • 硬件设备初始化:在Linux内核加载之前,U-Boot会初始化必要的硬件设备,如内存、串口、网络等。这确保了Linux内核能够在稳定的环境中启动和运行。
  • 加载操作系统内核:U-Boot会从存储介质(如NAND Flash、SD卡等)中加载Linux内核映像,并将其复制到内存中的特定位置。这是Linux内核能够正常启动的关键步骤。
  • 配置Linux内核启动参数:U-Boot会设置Linux内核的启动参数,如根文件系统的位置、命令行参数等。这些参数对于Linux内核的启动和配置至关重要。
  • 提供交互式命令行界面:U-Boot还提供了一个交互式的命令行界面,用户可以通过该界面进行设备配置、内存测试、文件系统操作、网络配置等操作。这对于调试和维护嵌入式系统非常有用。
  • 支持多种文件系统:U-Boot支持多种文件系统,如FAT、EXT2/3/4、UBIFS等。这使得U-Boot能够加载和引导不同类型的根文件系统,从而增加了系统的灵活性和可移植性。

Uboot 源码与编译

  • 源码
    uboot 源码是给半导体厂商准备的,半导体厂商会下载 uboot 官方的 uboot 源码,然后将自家相应的芯片移植进去。也就是说半导体厂商会自己维护一个版本的 uboot,这个版本的 uboot 相当于是他们定制的。既然是定制的,那么肯定对自家的芯片支持会很全,虽然 uboot 官网的源码中一般也会支持他们的芯片,但是绝对是没有半导体厂商自己维护的 uboot 全面。
    NXP 就维护 的 2016.03 这 个 版 本 的 uboot , 下 载 地 址 为 :
    http://git.freescale.com/git/cgit.cgi/imx/uboot-imx.git/tag/?h=imx_v2016.03_4.1.15_2.0.0_ga&id=
    rel_imx_4.1.15_2.1.0_ga
    在这里插入图片描述
  • 编译
    arm-linux-gnueabihf- 官方指定编译器
    The GNU C compiler for armhf architecture
    C编译器是一切的源头

Uboot 烧写与启动

  • 存储位置在SD卡 或 EMMC 调试在SD卡 烧写方便
    产品在EMMC NXP 提供的 MFGTools 工具向开发板烧写 uboot
  • 启动就和STM32一样,通过IO口设置启动方式就可以了。

Uboot 源码架构概览

  • arh/arm/cpu/armv7 架构相关
  • arh/arm/cpu/u-boot.lds 链接脚本文件
  • arh/arm/imx-common
  • board/freescale/mx6ullevk NXP官方的开发版 正点原子修改该文件夹来适配自己的开发板 开发产品同理
  • configs 配置文件
    mx6ull_14x14_ddr512_emmc_defconfig 和 mx6ull_14x14_ddr256_nand_defconfig
    这两个文件,分别是正点原子 I.MX6ULL EMMC 核心板和 NAND 核心板的配置文件
    使用“make xxx_defconfig”命令即可配置 uboot
    在编译 uboot 之前一定要使用 defconfig 来配置 uboot!
  • u-boot.xxx_cmd 文件
    命令文件,各种sh命令的集合
  • u-boot.xxx文件
    u-boot:编译出来的 ELF 格式的 uboot 镜像文件。
    u-boot.bin:编译出来的二进制格式的 uboot 可执行镜像文件。
    u-boot.cfg:uboot 的另外一种配置文件。
    u-boot.imx:u-boot.bin 添加头部信息以后的文件,NXP 的 CPU 专用文件。
    u-boot.lds:链接脚本。
    u-boot.map:uboot 映射文件,通过查看此文件可以知道某个函数被链接到了哪个地址上。
    u-boot.srec:S-Record 格式的镜像文件。
    u-boot.sym:uboot 符号文件。
    u-boot-nodtb.bin:和 u-boot.bin 一样,u-boot.bin 就是 u-boot-nodtb.bin 的复制文件。
  • config 文件
    .config 文件中都是以“CONFIG_”开始的配置项,这些配置项就是 Makefile 中的变量,因此后面都跟有相应的值,uboot 的顶层 Makefile 或子 Makefile 会调用这些变量值。在.config 中会有大量的变量值为‘y’,这些为‘y’的变量一般用于控制某项功能是否使能,为
    ‘y’的话就表示功能使能
  • makefile文件
    它是一个描述文件,定义了如何编译和链接U-Boot的源代码,以生成最终的U-Boot二进制文件。
    Makefile文件由多个规则组成,每个规则由目标、依赖和命令组成。这些规则描述了如何生成目标文件、如何编译源文件、如何链接目标文件等。Makefile文件支持变量和函数,可以帮助我们更灵活地配置和编写规则。
    在U-Boot的编译过程中,Makefile文件会解析源程序之间的依赖关系,根据依赖关系自动维护编译工作。它还可以直接集成操作系统中的各种命令,并执行这些命令来完成编译和构建过程。
    此外,Makefile文件还支持嵌套,也就是说,顶层的Makefile文件可以调用子目录中的Makefile文件。这在大型项目中很常见,因为大型项目通常会将不同的功能模块分开存放,各自拥有自己的Makefile文件。通过嵌套Makefile文件,可以更方便地管理和维护这些模块。

u-boot 顶层makefile

回头再详细学习,当下细看容易卡在这。
简单理解为makefile 等同与KEIL
学习linux一定要适应没有集成式开发环境。
KEIL会帮助你管理各个文件的关系,联系起整个工程的各个文件并输出正确的可执行文件。
make命令相当于 KEIL的build
U-boot关注的重点就2个,配置和编译
make xxx_defconfig:用于配置 uboot,这个命令最主要的目的就是生成.config 文件。
make:用于编译 uboot,这个命令的主要工作就是生成二进制的 u-boot.bin 文件和其他的一
些与 uboot 有关的文件,比如 u-boot.imx 等等。
我们的重点是使用 uboot,而不是 uboot 的研究者,我们要做的是缕清 uboot 的流程。

  • 19
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值