树莓派4b移植64位uboot

1.安装环境及软件版本:

 

虚拟机:Ubuntu 18.04 (之前使用ubuntu16.04编译时,提示libc库版本低)

交叉编译器:gcc-linaro-10.2.1-2021.02-x86_64_aarch64-linux-gnu.tar.xz

下载地址:https://snapshots.linaro.org/gnu-toolchain/10.2-2021.02-1/aarch64-linux-gnu/

Uboot:u-boot-2021.04.tar.bz2

下载地址:ftp://ftp.denx.de/pub/u-boot/

2.交叉编译器安装

将工具链解压安装到了/usr/local/arm64下, 如果在local目录下不存在arm64目录,需要手动的创建sudo mkdir arm64。进入/usr/local/arm64 目录下,执行sudo tar –vxf 命令解压。

添加安装路径到PATH环境变量中,编辑/etc/profile文件。

# sudo vim /etc/profile

在文件最后一行加上:export PATH=$PATH: /usr/local/arm64/gcc-linaro-10.2.1-2021.02-x86_64_aarch64-linux-gnu/bin
注:修改文件后要想马上生效还要运行# source /etc/profile 不然只能在下次重进此用户时生效。

3.编译Uboot

uboot解压安装到了/usr/local/uboot下:

.tar.bz2   格式解压命令为 tar  –jxvf  xx.tar.bz2

查看uboot对于树莓派4b的支持情况,在configs目录下输入:ls | grep rpi,其中rpi_4_defconfig树莓派4b 64位的默认配置选项。

编译命令:

export ARCH=arm

export CROSS_COMPILE=aarch64-linux-gnu-

sudo make rpi_4_defconfig
sudo make

在编译过程中,如果有bison: not found报错,需要手动安装相应的包。

4.固件下载与使用

当制作好树莓派的sd卡启动盘后,需要将u-boot.bin放到sd卡中并且修改config.txt文件如下:

enable_uart=1

arm_64bit=1

kernel_addr=0x80000

kernel=u-boot.bin

core_freq=250

sd卡启动盘放到树莓派中,用串口工具连接树莓派串口引脚, 接着就可以进行上电操作。此时,uboot就可以正常运行了.

5.从uboot通过tftp来引导执行rpios

  1. 编译rpios(裸机操作系统),配置链接脚本运行地址. = 0x200000;
  2. windows下载tftp,开启TFTP服务器:

     3.设置环境变量,配置ipaddr和serverip。

     4.使用tftp加载内核到内存,tftp 0x200000 kernel8.img,启动内核,go 0x200000. 但运行时报指令未定义的错误.

     后来了解到目前uboot中已经开启了dcache,这里涉及CPUicachedcache同步问题。由于程序运行时,指令流都流过icache,而指令中涉及到的数据流经过dcache。所以对于自修改的代码而言,比如我们修改了内存p这个位置的代码,这个时候我们是通过store的方式去写的p,所以新的指令会进入dcache。但是我们接下来去执行p位置的指令的时候,icache里面可能命中的是修改之前的指令。下面借用宋老师的图说明下:

     所以这个时候软件需要把dcache的东西clean出去,然后让icache invalidate。测试发现发现加上刷新dcache后就好了。

     sudo make rpi_4_defconfig后,接着输入make menuconfig开启dcache的命令。

 

  

使用新的uboot后,依次输入以下命令:tftp 0x200000 kernel8.imgdcache flush;(刷新dcache);go 0x200000(启动内核)。

为方便调试,将启动内核命令设置到bootcmd环境变量:

setenv bootcmd "tftp 0x00200000 kernel8.img;dcache flush;go 0x00200000"
saveenv

6.总结

本文介绍了树莓派4b移植64位uboot的过程,主要目的是便于后期调试自己基于树莓派开发的操作系统,操作系统主要借鉴linux。后期主要在windows上开发:

开发软件:Source Insight(代码编辑),SecureCRT(串口及ssh通信客户端)。

代码编译:主机和VMware虚拟机创建共享文件夹,代码保存在共享文件夹内,VMware虚拟机需要开启ssh服务,在主机编辑好代码后,使用SecureCRT以ssh的方式连接到虚拟机并编译代码。

以上是实验过程中遇到的问题和笔记总结,如果有不明白或错误的地方,欢迎大家讨论指教。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值