栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

树莓派4B安装uboot

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

树莓派4B安装uboot

2021SC@SDUSC

一、uboot的介绍

1.1、计算机系统的主要部件

(1)计算机系统就是以CPU为核心来运行的系统。典型的计算机系统有:PC机(台式机+笔记本)、嵌入式设备(手机、平板电脑、游戏机)、单片机(家用电器像电饭锅、空调)

(2)计算机系统的组成部件非常多,不同的计算机系统组成部件也不同。但是所有的计算机系统运行时需要的主要核心部件都是3个东西:

CPU + 外部存储器(Flash/硬盘) + 内部存储器(DDR SDRAM/SDRAM/SRAM)

1.2、PC机的启动过程

(1)部署:典型的PC机的BIOS程序部署在PC机主板上(随主板出厂时已经预制了),操作系统部署在硬盘上,内存在掉电时无作用,CPU在掉电时不工作。

(2)启动过程:PC上电后先执行BIOS程序(实际上PC的BIOS就是NorFlash),BIOS程序负责初始化DDR内存,负责初始化硬盘,然后从硬盘上将OS镜像读取到DDR中,然后跳转到DDR中去执行OS直到启动(OS启动后BIOS就无用了)

1.3、典型嵌入式linux系统启动过程

(1)典型嵌入式系统的部署:uboot程序部署在Flash(能作为启动设备的Flash)上、OS部署在FLash(嵌入式系统中用Flash代替了硬盘)上、内存在掉电时无作用,CPU在掉电时不工作。

(2)启动过程:嵌入式系统上电后先执行uboot、然后uboot负责初始化DDR,初始化Flash,然后将OS从Flash中读取到DDR中,然后启动OS(OS启动后uboot就无用了)

总结:嵌入式系统和PC机的启动过程几乎没有两样,只是BIOS成了uboot,硬盘成了Flash。

1.4、android系统启动过程

(1)Android系统的启动和Linux系统(前面讲的典型的嵌入式系统启动)几乎一样。几乎一样意思就是前面完全一样,只是在内核启动后加载根文件系统后不同了。

(2)可以认为启动分为2个阶段:第一个阶段是uboot到OS启动;第二个阶段是OS启动后到rootfs加载到命令行执行;现在我们主要研究第一个阶段,android的启动和linux的差别在第二阶段。

1.5、总结:uboot到底是干嘛的

(1)uboot主要作用是用来启动操作系统内核。

(2)uboot还要负责部署整个计算机系统。

(3)uboot中还有操作Flash等板子上硬盘的驱动。

 (4)uboot还得提供一个命令行界面供人来操作。

二、安装uboot

一、对 SD 卡进行格式化和创立分区

1 将 SD 卡通过读卡器插入电脑,并连接 Linux 系统 2 打开命令行(随便任何位置都可以) 运行 sudo fdisk -l ,查看 SD 卡的设备名,一般为 /dev/sdX ( 下图中,红框中的就 为 SD 卡的设备号,就为 /dev/sdb) 运行 sudo fdisk /dev/sdX (如上图中设备号为 /dev/sdb ,则需运行 /dev/sdb ), 界面就会进入到下图,开始给 SD 卡进行分区 输入 o 并回车,这将会删除所有分区 输入 p 并回车,这将会列出所有分区,此时应该没有任何分区 输入 n 并回车,创建新分区,引导分区 输入 p 并回车,新分区为主分区 输入 1 并回车,分区序号是 1 按键盘回车,默认初始扇区 输入 +256M 并回车,设置终止扇区 输入 t 并回车,再输入 c 并回车,设置该分区文件系统格式为 Fat32 输入 n 并回车,创建新分区,根分区 输入 p 并回车,新分区为主分区 输入 2 并回车,分区序号是 2 按键盘回车,默认初始扇区 按键盘回车,默认终止扇区 输入 w 并回车,写入设置

 

写完分区后,要进行格式化。推荐 256M 空间作为 boot 分区,分区文件系统 Fat32 , 再把剩余的空间创建一个分区,分区文件系统为 Ext4 ,作为 root, 然后运行一下命令格式化 保存 sudo mkfs.vfat /dev/sdX1 sudo mkfs.ext4 /dev/sdX2 目前为止, SD 卡的格式化和分区便设置好了

二、交叉编译 u-boot.bin,并移植到 SD 卡的 boot 分区。

1 、首先通过以下命令安装工具包 git 、 net-tools 、 vim , Sudo apt install git net-tools vim ( 之后可通过命令 sudo apt install XXX ,来安装工具包 ) 2 、需要安装 arm 的 64 位交叉编译环境。 https://snapshots.linaro.org/gnu-toolchain/ 从上面的网站中进去。下载自己想用的版本,但注意需要下载的文件命名格式为: gcc-linaro- 版本号 - 时间 -x86_64_aarch64-linux-gnu.tar.xz. 下图下载的为 gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz 。

将下载的 .xz 压缩文件放到 Linux 中,在同一目录下运行以下命令: # 创建一个文件夹 sudo mkdir -p /opt/linaro # 解压到指定的文件夹路径 sudo tar -xvf gcc-linaro-XXX-XXXX.XX-x86_64_aarch64-linux-gnu.tar -C /opt/linaro (sudo tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar -C /opt/linaro) 三 、下载 u-boot 源码并开始编译: git clone https://github.com/u-boot/u-boot.git (有可能会失败,失败的原因在与无法连接或是连接中断,检查网络多重复几 次) 切换到 u-boot 目录,然后开始编译。 运行 cd u-boot 进入到 u-boot 目录 在编译之前,首先需要安装编译必备的程序 sudo apt install u-boot-tools bison bc make flex libssl-dev ncurses-* 安装完成后,执行下面两行命令来设置环境 export ARCH=arm64 export CROSS_COMPILE=/opt/linaro/gcc-linaro-XXXX-XXXX-x86_64_aarch64-linux-gnu /bin/aarch64-linux-gnu- (其中 XXXX 的部分是自己下的文件对应的版号和时间) ( 如果之后你想重新编译 u-boot ,先运行 sudo make distclean ,清理掉之前编 译的文件,在运行上面的两行命令,并且注意当你每次想要编译 u-boot 的时候,都 要运行这两行命令。 ) 接着运行以下命令,来配置 config make rpi_arm64_defconfig (rpi_arm64_defconfig 位于 u-boot/configs 目录下,可在目录搜寻 rpi ,查找出 试用树莓派的所有 config ,我们配制 64 位的 u-boot ,所以用到 rpi_arm64_defconfig) 接着运行以下命令开始编译 make -j4 ( 直接 make -j 就可编译,后面的 4 是用 4 线程来进行编译,加 快编译速度 ) 编译完成后的 uboot.bin 文件就是可以直接在树莓派 4b 上执行的程序。

 

到此, u-boot.bin 编译完成。要想放到树莓派上运行,需要官方提供的固件 (firmware) 四 、下载 firmware https://github.com/raspberrypi/firmware 直接下载 firmware-master 我们所需的 firmware 在 boot 文件夹中,将其中的 bcm2711-rpi-4-b.dtb 、 fixup4.dat 、 start4.elf 复制到 SD 卡的 boot 分区中 ( 之前分区时大小为 256M ,格式 为 fat32 的那个 ) ,再将编译好的 u-boot.bin 一同复制进去。自己创建一个 config.txt, 其中写入内容 enable_uart=1    arm_64bit=1     kernel=u-boot.bin 到此, u-boot 编译并移植成功。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/314459.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号