总结:如果想在树莓派上运行,需要下载官方固件。 4.直接下载文件夹中需要的内容,复制到卡分区。 之前分区的大小和格式就是那个分区,把编译好的分区复制到那里。
2021SC@SDUSC
1.uboot1.1概述。 计算机系统的主要组成
(1)计算机系统是以CPU为中心运行的系统。 典型的计算机系统包括PC(台式机+笔记本)、嵌入式设备(手机、平板、游戏机)、微控制器(电饭锅、空调等家电)。
(2)计算机有很多组件不同的计算机系统有不同的组件。 然而,所有计算机系统都需要三个主要核心组件才能运行:
CPU+外部存储器(闪存/硬盘)+内部存储器(DDR SDRAM/SDRAM/SRAM)
1.2 PC启动流程
(1)简介:典型的PC的BIOS程序安装在PC主板上(主板出厂时已经组装好),操作系统安装在硬盘上。 ,如果断电,存储器将不工作。 另外,如果电源关闭,CPU将无法工作。
(2)开机过程:当PC机开机时,首先运行的是BIOS程序(实际的PC机BIOS是NorFlash)。 BIOS程序负责初始化DDR内存、初始化硬盘以及从硬盘读取操作系统映像。 将其插入DDR,跳转到DDR并运行直到OS启动(OS启动后BIOS无用)
1.3. 典型嵌入式Linux系统启动过程
(1)典型嵌入式系统部署:uboot程序部署到flash(flash可以作为启动设备),操作系统部署到flash(使用flash)。 (在嵌入式系统中代替硬盘使用),断电时存储器不工作。 另外,如果电源关闭,CPU 将无法工作。
(2)启动过程:嵌入式系统上电后第一次运行。运行uboot时,uboot负责初始化DDR、初始化flash、从flash读取OS到DDR、启动OS(OS启动后uboot就没用了)
总结:嵌入式系统和PC机的启动过程几乎相同,只是BIOS现在是uboot,硬盘是flash。
1.4. Android系统启动流程
(1)Android系统启动与Linux系统(上面提到的典型嵌入式系统启动)几乎相同。 几乎相同的意思和之前一模一样,只不过内核启动后会加载根文件系统。
(2)启动可分为两个阶段。 第一阶段是从uboot到启动操作系统。 第二阶段是从启动操作系统到在命令行上加载并运行rootfs。 现在我主要在学习第三阶段。 Android 和 Linux 启动之间的区别在于一个阶段与第二个阶段。
1.5。 总结:uboot 的作用是什么?
(1)uboot 的主要功能是引导操作系统内核。
(2)uboot还负责部署整个计算机系统。
(3)uboot 还包括用于闪存和其他板载硬盘驱动器的驱动程序。
(4)uboot还必须提供一个命令行接口供用户交互。
2.安装uboot
1.格式化SD卡并创建分区
1通过读卡器将SD卡插入计算机并将其连接到Linux系统。 2. 打开命令行(任意位置)。 是)运行 sudo fdisk -l 查找 SD 卡的设备名称(通常为 /dev/sdX)(下图中,红框为 SD 卡的设备号(/dev/sdb)) sudo fdisk Run /dev /sdX(如果上图中设备编号为/dev/sdb,则应运行/dev/sdb),界面如下图,开始对SD卡进行分区,输入“o”返回。输入“p”并回车。 这将列出您的所有分区。 此时不应有任何分区。 键入 n 并按 Enter 键以创建新分区。 键入 p 并 Enter 来引导分区。 新分区将成为主分区。 输入 1 作为分区,然后按 Enter。 分区号为1。 按键盘并按 Enter 键。 默认情况下,在第一个扇区中输入+256M,然后按 Enter。 要设置结束扇区,请输入 t 并按 Enter 键。 然后输入“c”并按Enter键设置分区的文件系统格式。 对于 Fat32,输入“n”并按 Enter 键创建新分区。 对于根分区,输入“p”并按 Enter。 对于新分区,为主分区输入 2,然后按 Enter。 分区数为2。 按键盘上的 Enter 键将设置默认的第一个扇区。 按键盘上的 Enter 键设置默认值。 要退出该扇区,请输入“w”并按 Enter 键写入设置。
写入分区后,格式化。 建议使用256M空间作为启动分区,分区文件系统为Fat32。 接下来,使用分区文件系统 Ext4 作为 root 在剩余空间中创建一个分区。 然后运行命令格式化并保存。 sudo mkfs.vfat /dev/sdX1 sudo mkfs.ext4 /dev/sdX2 SD 卡已完成格式化和分区。
2. 交叉编译 u[k4. ]创建boot.bin并将其移植到SD卡的启动分区。
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 [ k4]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[ k4]gnu. tar -C /opt/linaro) 3. 下载 u-boot 源码并开始编译: git clone https://github.com/u-boot/u -boot.git (It失败的原因是无法连接或者连接中断,请检查你的网络并重复几次)切换u-boot目录并开始编译。 执行cd u-boot,进入u-boot目录。 编译之前首先要安装编译所需的程序 sudo apt install u-boot-tools bison bcmake flex libssl-dev ncurses-* 安装完成后,运行以下两行命令来设置环境。 -XXXX[ k4]x86_64_aarch64-linux-gnu /bin/aarch64-linux-gnu- (XXXX是下载的文件对应的版本号和时间)(如果你想稍后重新编译u-boot,先运行sudo make distclean清理之前编译的文件,然后运行上面的两行命令,注意每次编译都需要运行这两行命令,然后运行以下命令进行配置。配置(rpi_arm64_defconfig位于u-boot/configs目录中。在目录中搜索rpi可以找到试用Raspberry Pi的所有配置。由于我们设置的是64位u-boot ,使用rpi_arm64_defconfig)。通过运行命令开始编译make -j4(只需编译make -j,接下来的四个将使用四个线程编译以提高速度)编译下面的uboot .bin文件是一个程序可以直接在Raspberry Pi 4b上运行
至此,u-boot.bin就编译完成了,如果要运行,需要官方固件。 4.下载固件https://github.com/raspberrypi/firmware 直接下载固件-主控。 所需的固件位于启动文件夹中,并放置 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已经成功编译移植。
评论前必须登录!
注册