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. Geostatistical Analyst Tools(Geostatistical Analyst 工具)

    Geostatistical Analyst 工具 1.使用地统计图层 # Process: GA 图层至格网 arcpy.GALayerToGrid_ga("", 输出表面栅格, ...

  2. Linux中的文件使用FTP进行文件备份

    注意!!! 本文是在linux中进行ftp备份(备份到另一个linux服务器) 上传思路: 1.每次上传文件时, 后台接收文件, 使用transferTo上传到Linux服务器 2.把文件路径 + F ...

  3. 洛谷3119 草鉴定(tarjan)

    题目大意 约翰有\(n\)块草场,编号\(1\)到\(n\),这些草场由若干条单行道相连.奶牛贝西是美味牧草的鉴赏家,她想到达尽可能多的草场去品尝牧草. 贝西总是从\(1\)号草场出发,最后回到\(1 ...

  4. bzoj1858SCOI 序列操作 (线段树)

    题目大意: 给定一个长度为n的01序列为,现在有m种操作 \(0\ a\ b\) 把\([a,b]\)的数全部修改为0 \(1\ a\ b\) 把\([a,b]\)的数全部修改为1 \(2\ a\ b ...

  5. 图解java 多线程模式 读书笔记

    第1章"Single Threaded Execution模式--能通过这座桥的只有一个人" 该模式可以确保执行处理的线程只能是一个,这样就可以有效防止实例不一致. 第⒉章&quo ...

  6. 苹果的最新MacbookPro,炸到你了么?

    一 苹果秋季发布会如期而至.我不是一个标准的果粉.但是我今年用上了macbook pro m1,最期待的就是新款的搭载了M1X的Macbook. 苹果官方也放出了要炸翻全场的宣传语... 这次发布会围 ...

  7. 【Python从入门到精通】(二)怎么运行Python呢?有哪些好的开发工具(PyCharm)

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 这是Pyhon系列文章的第二篇,本文主要介绍如何运行Python程序以及安装PyCharm开发工具. 干货满满,建议收藏,需要用到时常看看. 小伙 ...

  8. [对对子队]会议记录5.20(Scrum Meeting7)

    今天已完成的工作 马嘉 ​ 工作内容:录制新手引导视频 ​ 相关issue:优化顺序关卡新手引导功能 ​ 相关签入:feat: 录制了新的新手引导视频 吴昭邦 ​ 工作内容:增加加速功能 ​ 相关is ...

  9. [Beta]the Agiles Scrum Meeting 7

    会议时间:2020.5.21 20:00 1.每个人的工作 今天已完成的工作 成员 已完成的工作 issue yjy 暂无 tq 新增功能:添加.选择.展示多个评测机,对新增功能进行测试 评测部分增加 ...

  10. java中延时队列的使用

    最近遇到这么一个需求,程序中有一个功能需要发送短信,当满足某些条件后,如果上一步的短信还没有发送出去,那么应该取消这个短信的发送.在翻阅java的api后,发现java中有一个延时队列可以解决这个问题 ...