Linux学习 - 树莓派4b的U-Boot的初识

初识U-Boot

学习书籍:《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.5.1》

章节:第三十章

学习内容:

书中介绍uboot的获取可以有三个途径:第一个是uboot的官方代码。第二个是半导体的厂商的uboot代码。第三个是开发板厂商的uboot代码。为了移植简单推荐选择支持较好的开发板厂商的代码。如果是自己的板子推荐使用半导体厂商的代码。我手中有一个树莓派4b。网上的烧写树莓派教程很多,但是为了学习我选择了uboot官方的uboot代码。

下载uboot代码:进入官网:http://www.denx.de/wiki/U-Boot/,点击Source Code。

可以选择FTP或者HTTPS下载。我下载的是:u-boot-2022.01-rc1 。把文件通过FTP或者文件共享等方式传入Ubuntu虚拟机。注意:在虚拟机的非root用户中有些目录的操作权限是受到限制的。比如我在这里将下载好的uboot放到根目录下的,在根目录下创建文件夹会发现需要sudo权限。创建好文件夹后将uboot解压也需要对应权限。配置好环境变量后make uboot时候也需要权限,否则就会提示不能mkdir之类的权限的错误。这时候配置的交叉编译工具的环境变量是为当前用户配置的,如果使用sudo会发现提示没有配置交叉编译工具不能正常编译。对于Linux小白的我来说这个坑踩了一周。建议将uboot放在家目录下。使用命令:tar -jxvf u-boot-2022.01-rc1.tar.bz2将文件进行解压得到u-boot-2022.01-rc1。

​ 配置交叉编译工具:首先了解一下交叉编译工具。百度搜索“ARM交叉编译工具链分类说明”可以了解到交叉编译工具的几大分类。树莓派4b是ARM v8架构。支持64位,同时也兼容32位。查看uboot文件夹下的configs文件夹中对树莓派的支持可以看到支持如下几种树莓派:

这里可以看到如果使用rpi_4_32b_defconfig则使用32位的交叉编译工具:arm-linux-gnueabihf-gcc。如果使用rpi_4_defconfig则使用64位的交叉编译工具:aarch64-linux-gnu-gcc。(这里总结的教训是:做之前多百度,因为不知道rpi_4_defconfig需要64位的交叉编译工具而失去无数头发)。这里我使用的是64位的。下载aarch64-linux-gnu-gcc

sudo apt-get install gcc-9-aarch64-linux-gnu
sudo apt-get install gcc-aarch64-linux-gnu

配置环境变量:使用命令sudo vi /etc/profile,在末尾添加环境变量export PATH=$PATH:你的目录/bin。保存退出后使用命令source /etc/profile。测试有没有安装成功在任意终端中输入aarch加两下Tab后会不会出现提示:

使用aarch64-linux-gnu-gcc -v可以验证一下是不是能正确打印出版本号。

​ uboot的编译,模仿书中先使用命令make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- distclean先清除一下编译后生成的文件。然后使用命令make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- rpi_4_defconfig配置uboot。最后使用命令make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu-编译uboot。如果都没有问题后就会出现u-boot.bin等文件。其中如果有error出现就直接百度安装相关的库文件就可以。

​ uboot的烧写,尝试了好几个烧写方法,发现最好用的是使用工具:raspberry pi imager。这个官方下载可能慢一点,万能的百度下载。然后再下载一个树莓派的镜像,使用工具烧写进去,也可以让它自己下载镜像不过速度很慢。下载完了先插到树莓派上连接串口

需要一个TTL转串口模块。打开串口8N1。上电看一下系统能不能跑起来。然后将SD卡插入电脑,将编译好的u-boot.bin文件传入到SD卡中,修改一下config.txt文件。我是参考博客:(14条消息) <第2章>树莓派4B上运行 uboot_Fythons的博客-CSDN博客做的。将树莓派的设备树都放好后发现还是可在博客中下图所示位置

博客中有一句话猜想可能是串口的问题这个我们可以关注一下,在我这个版本的uboot中好像就是uboot的串口没有配置。

​ 配置uboot串口,下面记录的过程是我操作的过程,可能有问题。我使用的是uboot图形化的配置。参考手册的第三十四章进入uboot的图形化配置界面。

然后再将编译后的u-boot.bin启动就可以看到打印了。

这里一些信息是错误的,常用的uboot命令也没有测试过,接着折腾……

Linux学习 - 树莓派4b的U-Boot的初识的更多相关文章

  1. linux学习:【第1篇】初识Linux及安装

    狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! linux学习:[第1篇]初识Linux及安装 写在前面 学习之初看了一段文章,很有感触,所以也 ...

  2. 树莓派(4B)Linux + .Net Core嵌入式-初始化环境(一)

    一.树莓派简单介绍 二.软&件准备 硬件:树莓派4B主机.电源线.TF卡&TF读卡器.PC 软件:win32diskimager(用于烧系统到TF卡).Xshell或Windows T ...

  3. 树莓派4B学习札记

    防静电 树莓派比较容易被静电损坏,要做好以下预防措施 使用的时候不要用手去触摸PCB和针脚!特别是上电之后! 拿板卡的时候,要习惯性拿板卡的边缘 勤洗手,勤摸墙壁,释放身上的静电 系统安装 8GB以上 ...

  4. 树莓派4B安装64位Linux(不用显示器键盘鼠标)

    入手了树莓派4B,我对它的定位是作为一个Docker实验环境,平时用到的镜像多为Java服务端常用的技术.以及自己作的Java应用镜像,因此宿主机需要64位操作系统,而树莓派官方操作系统只有32位的, ...

  5. 树莓派4B安装docker-compose(64位Linux)

    准备工作 树莓派4B已装好64位Linux,并且装好了19.03.1版本的Docker,具体的安装步骤请参考<树莓派4B安装64位Linux(不用显示器键盘鼠标)> 安装docker-co ...

  6. 树莓派(4B)Linux + .Net Core嵌入式-HelloWorld(二)

    一.新建.Net Core项目 新建.Net Core3.0的控制台应用,代码如下 namespace Demo { class Program { static void Main(string[] ...

  7. 树莓派4B智能小车机器套件——入手组装实验记录

    树莓派4B智能小车机器套件--入手组装实验记录 4WD智能小车(4WD SMART ROBOT KIT),支持Arduino.51.STM32.Raspberry Pi等4个版本.本套件采用的是树莓派 ...

  8. 树莓派4b通过外接ssd硬盘启动系统失败的排查和解决

    树莓派4b通过外接ssd硬盘启动系统失败,症状: 屏幕卡在黑屏或提示 mmc1:Controller never released inhibit bit(s).... 先说如何设置硬盘启动,后面是解 ...

  9. 树莓派4B无屏幕连接Wi-Fi/启用ssh/创建用户

    前边总得说点什么 最近每次在Win10上写代码需要启动Redis,残血Redis For Windows有卡死系统的bug.由于主机内存不大够用(已经扩到顶了),开虚拟机运行Redis更别提了..想起 ...

随机推荐

  1. 数据应用的变与不变,ShardingSphere 正在影响未来数字体验的建设理念

    近年来关于底层数据库的开源产品越来越多,它们也受到了许多资本的青睐. 伴随着移动互联网催生的数字化场景爆发,云计算.大数据等技术逐渐有了更加广阔的应用场景.在云计算和大数据经过十年的追赶式发展后,不只 ...

  2. 题解 [SHOI2012]随机树

    题目传送门 Description \(n\le 100\) Solution Problem 1 不难看出,答案就是: \[1+\sum_{i=1}^{n-1} 2/(i+1) \] Problem ...

  3. Perl操作excel2007的模块

    详细版:https://www.jianshu.com/p/84bda53827c8 第一种方法: 读写excel2007文档的perl模块: Spreadsheet::XLSX(读)和Spreads ...

  4. 【c++ Prime 学习笔记】第16章 模板与泛型编程

    面向对象编程(OOP)和泛型编程(GP)都能处理在编写程序时类型未知的情况 OOP能处理运行时获取类型的情况 GP能处理编译期可获取类型的情况 标准库的容器.迭代器.算法都是泛型编程 编写泛型程序时独 ...

  5. [技术博客] K-Means算法

    遇到的问题 在对微软\(OCR\)的\(api\)进行测试的过程中,我发现有时候它并不能分析出一个表格的形态,也就是说不知道每个文本对应在表格中的第几行第几列.但是它可以较为准确的给出这些文本的坐标. ...

  6. 编译内核错误:Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373

    最近在编译一个新的rk sdk的时候,编译内核报错 CHK include/linux/version.h CHK include/generated/utsrelease.h make[1]: 'i ...

  7. Luogu P1196 [NOI2002]银河英雄传说 | 并查集

    题目链接 并查集,具体看注释. #include<iostream> #include<cstdio> #include<cmath> using namespac ...

  8. hdu 5179 beautiful number(构造,,,,)

    题意: 一个如果称作是漂亮数,当且仅当满足: 每一位上的数字是[1,9],从高到时低数字大小降序,且有di%dj=0(i<j) 例:931 给一个区间[L,R],问这个区间里有多少个漂亮数. 1 ...

  9. vue.js+elementUI文件上传、文件导入、文件下载

    1.文件下载 <el-button plain @click ="exportVmExcel()" size='mini' icon="el-icon-downlo ...

  10. sqlldr 导入有中文乱码问题

    1.导入成功后,查看导入数据有乱码 2.查看字符集为uft8 select * from v$nls_parameters where PARAMETER like '%NLS_CHARACTERSE ...