linux系统移植:正点原子u-boot移植(代码片段)

JeckXu666 JeckXu666     2023-02-14     590

关键词:

Linux系统移植:正点原子 U-Boot 移植

一、What‘s U-Boot ?

1.1 U-Boot 简介

Linux 系统启动需要一个 bootloader 程序,芯片上电以后先运行一段 bootloader程序。这段bootloader程序会先初始化DDR等外设,然后将 Linux 内核从 flash (NAND, NOR FLASH,SD,MMC 等)拷贝到 DDR 中,最后启动 Linux 内核;这段 bootloader 程序有很多种,比如 U-Boot、vivi、RedBoot 等,U-Boot 就是其中一种。

uboot 的全称是 Universal Boot Loader,uboot 是一个遵循 GPL 协议的开源软件,uboot 是一 个裸机代码,可以看作是一个裸机综合例程,uboot 官网为 U-Boot 官网,我们可以在官网下载到其源码!

一般来说,uboot 官方的 uboot 源码是给半导体厂商准备的,半导体厂商会下载 uboot 官方的 uboot 源码,然后将自家相应的芯片移植进去;同时半导体厂商也会针对自己的芯片选择一个版本的 uboot 自己去维护,该 uboot 的适配程度要高于 uboot 官方的代码,比如 NXP 的 uboot 维护地址如下:NXP Uboot Git Src

这个厂商的 Uboot 一般是支持其对应芯片的评估板的,但如果我用的是正点原子的板子,其 uboot 和正点原子的开发板有一定的冲突,所以正点原子也有一套修改后的 uboot!综上,我们有三套 uboot 可以使用:

uboot描述
uboot 官方的 uboot由 uboot 官方维护开发的 uboot 版本,版本更新快,基本包含所有常用的芯片
半导体厂商的 uboot半导体厂商维护的一个 uboot,专门针对自家的芯片,在对自家芯片支持上要比uboot 官方的好
开发板厂商的 uboot开发板厂商在半导体厂商提供的 uboot 基础上加入了对自家开发 板的支持

1.2 U-Boot 选择

官方的 uboot 我们一般不使用,支持太少,让他们厂商去折腾就行,我们如果要使用正点原子的开发板,那么就使用正点原子的 uboot (本质就是在半导体厂商的 uboot 上修改的),如果要使用 NXP 的芯片做自己的开发,那么一般使用 NXP 的 uboot 来进行修改移植,就是常说的 uboot 移植!

正点原子的 uboot 我已经放到 CSDN 上 U-Boot下载链接

二、正点原子 U-Boot 编译

2.1 编译环境

在 Ubuntu 环境中使用如下命令安装 ncurses 库

sudo apt-get install libncurses5-dev

安装完成如下:

自己选择一个位置创建一个文件夹,然后将正点原子的 uboot 源码上传到系统中

然后我们对其进行解压

tar -vxjf uboot-imx-2016.03-2.1.0-g8b546e4.tar.bz2

解压完成后,可以看到当前目录下的 uboot 源码:

2.2 编译脚本

源码和编译环境准备完成之后,我么编写一个 shell 脚本用于编译

对于开发板是 512MB(DDR3) + 8GB(EMMC) 的核心板,编译脚本如下

1 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
2 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
3 make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12

编译脚本关键字含义如下:

ARCH:指定编译目标架构为 arm 架构

CROSS_COMPILE:指定使用的交叉编译器

后面的则是编译指令,distclean 为清除工程,mx6ull_14x14_ddr512_emmc_defconfig 是配置 uboot,-j12是使用 12 个核心来多进程编译,加快编译速度(核心根据自己虚拟机分配的核心数目来自己设置)

以在编译 uboot 之前,要根据自己的需求配置 uboot,mx6ull_14x14_ddr512_emmc_defconfig 就是正点原子针对 I.MX6U-ALPHA 的 EMMC 核心板编写的配置文件

脚本编写完成,我们设置脚本为可执行文件:

执行脚本文件,完成编译:

可以看到,多了许多 uboot 文件,其中 uboot.bin 为编译后文件,而 u-boot.bin 文件编译后,会在 u-boot.bin 的开头添加一个大小为 1K 的 IVT 头,用于告诉 BOOT ROM 找到 uboot 的位置和函数,要运行在什么模式,DRAM的配置数据等,这个新生成的文件就是 u-boot.imx 文件,两个文件都可以用于烧写启动

三、U-Boot 烧写与启动

上节提到 uboot 最终编译的文件就是 uboot.bin 文件,他本质上就和裸机程序没什么区别,我们为了方便观察现象,直接使用 imxdownload 工具将 uboot.bin 文件下载到 SD 卡上,然后从 SD 卡启动,通过串口直接观察 uboot 的运行结果

下载到SD卡指令:

./imxdownload uboot.bin /dev/sdb

串口查看 uboot 启动信息

正点原子i.mx6u-miniu-boot过程移植详解(代码片段)

...发板参考的是NXP官方的I.MX6ULLEVK开发板做的硬件。Linux的移植要复杂的多,在移植Linux之前我们需要先移植一个bootloader代码,这个bootloader代码用于启动Linux内核,bootloader有很多,常用的就是U-Boot。移植好U-Boot以后... 查看详情

linux系统移植:u-boot工程创建(代码片段)

文章目录Linux系统移植:U-Boot工程创建一、U-Boot文件目录二、U-Boot目录解析2.1arch文件夹2.2board文件夹2.3config文件夹2.4.u-boot.xxx_cmd文件2.5顶层Makefile文件2.6u-boot.xxx文件2.7.config文件2.8README文件三、U-Boot过程创建3.1打开工程文件夹3... 查看详情

u-boot移植

...子提供的uboot,本章我们就来学习如何将NXP官方的uboot移植到正点原子的I.MX6ULL开发板上,学习如何在uboot中添加我们自己的板子。 查看详情

正点原子i.mx6u-mini移植篇ubuntu-base根文件系统移植构建过程详解(代码片段)

...板上运行Ubuntu呢?答案肯定是可以的,Ubuntu是Linux系统的一种,可以简单的将Ubuntu理解为一个根文件系统,和我们用busybox、buildroot制作的根文件系统一样。因此移植Ubuntu也就是将Ubuntu根文件系统移植到我们的开发... 查看详情

正点原子i.mx6u-mini移植篇rootfs移植过程详解

...头己经完成了2个了,就剩最后一个rootfs(根文件系统)了,根文件系统的组成以及如何构建根文件系统是Liux移植的最后一步,根文件系统构建好以后就意味着我们己经拥有了一个完整的、可以运行的最小系统... 查看详情

正点原子i.mx6u-mini移植篇kernel移植过程详解(代码片段)

...eInsight工程这里我们使用NXP官方提供的Linux源码,将其移植到正点原子I.MX6U-ALPHA开发板上。NXP官方原版Liux源码已经放到了开发板光盘中,路径为:1、例程源码->4、NXP官方原版Uboot和Linux->linux-imx-relimx4.1.15_2.1.0_ga.tar.... 查看详情

正点原子阿尔法linux板移植qt无法显示英文字体原因

我们需要将把一个字库移到/usr/share/fonts/下即可,而不是全部复制粘贴过去。如果运行QT发现缺少库文件,就在ubuntu下输入locate+缺少的库文件名,然后将其复制到文件系统下的lib中 查看详情

linux系统移植:nxp官板uboot移植(代码片段)

文章目录Linux系统移植:NXP官板uboot移植一、获取官板U-Boot二、编译下载U-Boot源码三、官方驱动验证Linux系统移植:NXP官板uboot移植移植NXP的IMX6ULL官板U-Boot到原子的开发板一、获取官板U-Boot去NXP官网下载评估板的U-Boot,... 查看详情

正点原子i.mx6u-mini移植篇rootfs移植过程详解(代码片段)

...头己经完成了2个了,就剩最后一个rootfs(根文件系统)了,根文件系统的组成以及如何构建根文件系统是Liux移植的最后一步,根文件系统构建好以后就意味着我们己经拥有了一个完整的、可以运行的最小系统... 查看详情

linux系统移植:u-boot启动流程(下)(代码片段)

目录Linux系统移植:U-Boot启动流程(下)一、run_main_loop函数详解二、cli_loop函数详解三、cmd_process函数详解Linux系统移植:U-Boot启动流程(下)一、run_main_loop函数详解uboot启动以后会进入3秒倒计时,如果... 查看详情

正点原子i.mx6u-mini移植篇kernel移植过程详解(代码片段)

...、下载Linux内核这里使用NXP官方提供的Linux源码,将其移植到正点原子I.MX6U-MINI开发板上。NXP官方原版Liux源码路径为:1、例程源码->4、NXP官方原版Uboot和Linux->linux-imx-rel_imx4.1.15_2.1.0_ga.tar.bz2。在ubunut中的/home/zhiguoxin/linu... 查看详情

正点原子阿尔法linux板移植qt无法显示英文字体原因

depmod:先加载驱动modprobe:加载驱动lsmod:查看驱动rmmod:移除驱动这样就可以运行案列demo。我们需要将把一个字库移到/usr/share/fonts/下即可,而不是全部复制粘贴过去。如果运行QT发现缺少库文件,就在ubun... 查看详情

正点原子i.mx6u-mini移植篇ubuntu-base根文件系统移植构建过程详解(代码片段)

...板上运行Ubuntu呢?答案肯定是可以的,Ubuntu是Linux系统的一种,可以简单的将Ubuntu理解为一个根文件系统,和我们用busybox、buildroot制作的根文件系统一样。因此移植Ubuntu也就是将Ubuntu根文件系统移植到我们的开发... 查看详情

linux系统移植博文导航

Linux系统移植专栏更新很久了,博主今天就把以前的博文整理一下,希望对感兴趣的朋友有所帮助,在此感谢CSDN这个平台给出了这个一个交流的机会,也感谢大家的支持。Linux相关的网站U-BootLinux内核busyboxLinux系统移植Linux系统移... 查看详情

linux系统移植:u-boot链接脚本(代码片段)

文章目录Linux系统移植:U-Boot链接脚本一、u-boot.lds介绍二、u-boot.lds分析Linux系统移植:U-Boot链接脚本一、u-boot.lds介绍前面提到的U-Boot的本质就是一个大的裸机程序,执行的时候需要先找到程序入口,而程序的链接... 查看详情

linux系统移植:u-boot顶层makefile分析(下)(代码片段)

目录Linux系统移植:U-Boot顶层Makefile分析(下)一、调用scripts/Kbuild.include二、导出交叉编译工具变量设置三、导出其他变量四、makexxx_config过程五、make过程Linux系统移植:U-Boot顶层Makefile分析(下)继续沿着... 查看详情

linux系统移植:u-boot启动流程(上)(代码片段)

目录Linux系统移植:U-Boot启动流程(上)一、reset函数源码详解二、lowlevel_init函数详解三、s_init函数详解四、_main函数详解Linux系统移植:U-Boot启动流程(上)一、reset函数源码详解根据链接文件,可以... 查看详情

使用hal对stm32f407zgt6单片机移植freertos(参考正点原子)(代码片段)

使用HAL对STM32F407ZGT6单片机移植FreeRTOSFreeRTOS源码下载include文件夹portable文件夹移植FreeRTOS源码1、添加FreeRTOS源码2、向工程分组中添加文件3、添加相应的头文件路径4、修改SYSTEM文件1、修改sys.h文件2、修改usart.c文件3、修改delay.c文... 查看详情