Linux学习 - 树莓派4b的U-Boot的初识
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的初识的更多相关文章
- linux学习:【第1篇】初识Linux及安装
狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! linux学习:[第1篇]初识Linux及安装 写在前面 学习之初看了一段文章,很有感触,所以也 ...
- 树莓派(4B)Linux + .Net Core嵌入式-初始化环境(一)
一.树莓派简单介绍 二.软&件准备 硬件:树莓派4B主机.电源线.TF卡&TF读卡器.PC 软件:win32diskimager(用于烧系统到TF卡).Xshell或Windows T ...
- 树莓派4B学习札记
防静电 树莓派比较容易被静电损坏,要做好以下预防措施 使用的时候不要用手去触摸PCB和针脚!特别是上电之后! 拿板卡的时候,要习惯性拿板卡的边缘 勤洗手,勤摸墙壁,释放身上的静电 系统安装 8GB以上 ...
- 树莓派4B安装64位Linux(不用显示器键盘鼠标)
入手了树莓派4B,我对它的定位是作为一个Docker实验环境,平时用到的镜像多为Java服务端常用的技术.以及自己作的Java应用镜像,因此宿主机需要64位操作系统,而树莓派官方操作系统只有32位的, ...
- 树莓派4B安装docker-compose(64位Linux)
准备工作 树莓派4B已装好64位Linux,并且装好了19.03.1版本的Docker,具体的安装步骤请参考<树莓派4B安装64位Linux(不用显示器键盘鼠标)> 安装docker-co ...
- 树莓派(4B)Linux + .Net Core嵌入式-HelloWorld(二)
一.新建.Net Core项目 新建.Net Core3.0的控制台应用,代码如下 namespace Demo { class Program { static void Main(string[] ...
- 树莓派4B智能小车机器套件——入手组装实验记录
树莓派4B智能小车机器套件--入手组装实验记录 4WD智能小车(4WD SMART ROBOT KIT),支持Arduino.51.STM32.Raspberry Pi等4个版本.本套件采用的是树莓派 ...
- 树莓派4b通过外接ssd硬盘启动系统失败的排查和解决
树莓派4b通过外接ssd硬盘启动系统失败,症状: 屏幕卡在黑屏或提示 mmc1:Controller never released inhibit bit(s).... 先说如何设置硬盘启动,后面是解 ...
- 树莓派4B无屏幕连接Wi-Fi/启用ssh/创建用户
前边总得说点什么 最近每次在Win10上写代码需要启动Redis,残血Redis For Windows有卡死系统的bug.由于主机内存不大够用(已经扩到顶了),开虚拟机运行Redis更别提了..想起 ...
随机推荐
- JavaScript常用的Hook脚本
JavaScript常用的Hook脚本 本文Hook脚本 来自 包子 页面最早加载代码Hook时机 在source里 用dom事件断点的script断点 然后刷新网页,就会断在第一个js标签,这时候就 ...
- WinForm RichTextBox 常用操作
1.设置不自动选择字词 RichTextBox在选择文字的时候,如果没有关闭自动选择字词功能,我们有时候选择的时候会自动将光标前后的字或者词连接在一起进行选择. RichTextBox有属性AutoW ...
- Vue el 使用el-checkbox-group复选框进行单选框操作
el-checkbox-group这个组件与其他复选框不一样,我当初也是半天不知道怎么操作 页面使用v-model绑定 size就是等比例缩小放大,v-ror循环应该看的懂.重要的是@chage到我们 ...
- [源码解析] Pytorch 如何实现后向传播 (3)---- 引擎动态逻辑
[源码解析] Pytorch 如何实现后向传播 (3)---- 引擎动态逻辑 目录 [源码解析] Pytorch 如何实现后向传播 (3)---- 引擎动态逻辑 0x00 摘要 0x01 前文回顾 0 ...
- 同人逼死官方系列!从 DDC 嗅探器到 sddc_sdk_lib 的数据解析
从 DDC 嗅探器到 sddc_sdk_lib 的数据解析 之前的 DDC 协议介绍 主要讲了设备加入.退出以及维持设备状态,而 SDK框架 sddc_sdk_lib 解析 主要讲了 SDK 库的结构 ...
- Luogu P1023 [NOIp2000提高组]税收与补贴问题 | 数学
题目链接 思路:列不等式组,然后解出不等式,得出答案的取值范围,最后取一个绝对值最小的答案就行了. #include<iostream> #include<cstdio> #i ...
- 前端面试手写代码——call、apply、bind
1 call.apply.bind 用法及对比 1.1 Function.prototype 三者都是Function原型上的方法,所有函数都能调用它们 Function.prototype.call ...
- Java RMI学习与解读(三)
Java RMI学习与解读(三) 写在前面 接下来这篇就是最感兴趣的Attack RMI部分了. 前面也说过,RMI的通信过程会用到反序列化,那么针对于RMI的三个角色: Server/Regisrt ...
- (1)Zookeeper在linux环境中搭建集群
1.简介 ZooKeeper是Apache软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务.同步服务和命名注册.ZooKeeper的架构通过冗余服务实现高可用性.Zookeeper ...
- 正则表达式之grep
grep 的五个参数,基本的常用的: -a :将 binary 档案以 text 档案的方式搜寻数据 -c :计算找到 '搜寻字符串' 的次数 -i :忽略大小写的不同,所以大小写视为相同 -n :顺 ...