首页 > 其他分享 >Rockchip RK3399 - uboot移植

Rockchip RK3399 - uboot移植

时间:2023-05-07 21:56:16浏览次数:61  
标签:00 uboot Rockchip make boot 编译 RK3399 20 root

----------------------------------------------------------------------------------------------------------------------------
开发板  :NanoPC-T4开发板
eMMC   :16GB
LPDDR3:4GB
显示屏  :15.6英寸HDMI接口显示屏
u-boot    :2014.10
----------------------------------------------------------------------------------------------------------------------------

一、安装交叉编译工具链

NanoPC-T4开发板,主控芯片是Rockchip RK3399,big.LITTLE大小核架构,双Cortex-A72大核(up to 2.0GHz) + 四Cortex-A53小核结构(up to 1.5GHz);Cortex-A72处理器是Armv8-A架构下的一款高性能、低功耗的处理器。

选择交叉编译工具这一步需要慎重,我们首先要知道我们自己使用的开发板采用的ARM架构是哪一个?ARM目前总共发布了8种架构:ARMv1、ARMv2、ARMv3、ARMv4、ARMv5、ARMv6、ARMv7、ARMv8。

确认了ARM架构之后,选择支持该架构的交叉编译环境。可以参考GNU Arm Embedded Toolchain官网中的文档和说明来确定march支持的版本。在ARM官方提供的文档中,可以查看到march选项支持的处理器架构和对应的版本。例如,使用arm-linux-gcc --march=armv8-a命令编译代码时,表示编译针对于Cortex-A53处理器。

1.1 下载

因此我们必须选择一个支持Armv8-A架构的交叉编译工具,编译工具链下载地址http://releases.linaro.org/components/toolchain/binaries/。这里我们直接选择最新版本的交叉编译工具:

然后选择64位架构编译器:

选择在64位主机上运行:

复制下载地址,下载在/work/sambashare/tools/路径:

root@zhengyang:/work/sambashare/tools# wget http://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz

1.2. 安装

使用如下命令进行解压:

root@zhengyang:/work/sambashare/tools# tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz -C /

执行该命令,将把arm-linux-gcc 自动安装到/usr/loca/arm/7.5.0 目录。

root@zhengyang:/work/sambashare/tools# cd /usr/local/arm/7.5.0
root@zhengyang:/work/sambashare/tools/usr/local/arm/7.5.0# ll

接下来配置系统环境变量,把交叉编译工具链的路径添加到环境变量PATH中去,这样就可以在任何目录下使用这些工具:

root@zhengyang:/work/sambashare/tools/usr/local/arm/7.5.0# vim /etc/profile

添加如下代码:

 export PATH=$PATH:/usr/local/arm/7.5.0/bin

接下来使用命令:source /etc/profile,使修改后的profile文件生效。

然后,使用命令:arm-none-linux-gnueabi-gcc -v查看当前交叉编译链工具的版本信息,arm-none-linux-gnueabi-gcc和arm-linux-gcc命令意义一样:

二、编译uboot

uboot通常有三种:

  • uboot官方源码:https://github.com/u-boot/u-boot,uboot官方源码是由uboot官方维护,支持非常全面的芯片,但对具体某款开发板支持情况一般;
  • 半导体厂商瑞芯微官方源码:https://github.com/rockchip-linux/u-boot,半导体厂商基于uboot官方源码进行修改,对自家的芯片进行完善的支持,针对某款处理器支持情况较好;
  • 开发板友善之家官方源码:https://github.com/friendlyarm/uboot-rockchip,开发板厂商基于半导体厂商维护的uboot,对自家的开发板进行板级支持,针对某款开发板支持情况较好;

这里我们本着学习的原则,所以这里我们直接选择半导体厂商瑞芯微官方源码维护的uboot。然后后面参考开发板友善之家官方源码修改使其能够支持NanoPC-T4开发板。

2.1 源码下载

我们可以在瑞芯微的github上下载到芯片厂商提供的u-boot源码,如下图所示:

这里我们下载的是release分支的代码:

root@zhengyang:/work/sambashare/rk3399# git clone https://github.com/rockchip-linux/u-boot.git --depth 1 -b release

此外还需要下载rockchip-linux/rkbin到uboot同级目录:

root@zhengyang:/work/sambashare/rk3399# git clone https://github.com/rockchip-linux/rkbin --depth 1 

这里我是下载到/work/sambashare/rk3399路径下的,这个路径后面专门存放与rk3399相关的内容。

进入到u-boot文件夹里,这就是我们需要的uboot的源码了,后面就可以进行二次开发了;

root@zhengyang:/work/sambashare/rk3399/u-boot# cd ..
root@zhengyang:/work/sambashare/rk3399# cd u-boot/
root@zhengyang:/work/sambashare/rk3399/u-boot# ls -l
总用量 488
drwxr-xr-x   2 root root   4096 5月   7 20:00 api
drwxr-xr-x  14 root root   4096 5月   7 20:00 arch
drwxr-xr-x 181 root root   4096 5月   7 20:00 board
drwxr-xr-x   6 root root   4096 5月   7 20:00 cmd
drwxr-xr-x   5 root root   4096 5月   7 20:00 common
-rw-r--r--   1 root root   2260 5月   7 20:00 config.mk
drwxr-xr-x   2 root root  69632 5月   7 20:00 configs
drwxr-xr-x   2 root root   4096 5月   7 20:00 disk
drwxr-xr-x  10 root root  12288 5月   7 20:00 doc
drwxr-xr-x   3 root root   4096 5月   7 20:00 Documentation
drwxr-xr-x  56 root root   4096 5月   7 20:00 drivers
drwxr-xr-x   2 root root   4096 5月   7 20:00 dts
drwxr-xr-x   2 root root   4096 5月   7 20:00 env
drwxr-xr-x   4 root root   4096 5月   7 20:00 examples
drwxr-xr-x  12 root root   4096 5月   7 20:00 fs
drwxr-xr-x  32 root root  16384 5月   7 20:00 include
-rw-r--r--   1 root root   1863 5月   7 20:00 Kbuild
-rw-r--r--   1 root root  14162 5月   7 20:00 Kconfig
drwxr-xr-x  14 root root   4096 5月   7 20:00 lib
drwxr-xr-x   2 root root   4096 5月   7 20:00 Licenses
-rw-r--r--   1 root root  12587 5月   7 20:00 MAINTAINERS
-rw-r--r--   1 root root  56469 5月   7 20:00 Makefile
-rwxr-xr-x   1 root root  19845 5月   7 20:00 make.sh
drwxr-xr-x   2 root root   4096 5月   7 20:00 net
-rwxr-xr-x   1 root root   1640 5月   7 20:00 pack_resource.sh
drwxr-xr-x   5 root root   4096 5月   7 20:00 post
-rw-r--r--   1 root root     34 5月   7 20:00 PREUPLOAD.cfg
-rw-r--r--   1 root root 189024 5月   7 20:00 README
drwxr-xr-x   6 root root   4096 5月   7 20:00 scripts
-rw-r--r--   1 root root     17 5月   7 20:00 snapshot.commit
drwxr-xr-x  12 root root   4096 5月   7 20:00 test
drwxr-xr-x  16 root root   4096 5月   7 20:00 tools

2.2 编译源码

uboot的编译分为两步:配置、编译:

2.2.1 配置

配置选择所要使用的board ,我使用的是rk3399,在./configs目录下有rk3399_defconfig这个文件,因此执行如下命令,生成.config文件:

root@zhengyang:/work/sambashare/rk3399/u-boot# make rk3399_defconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#

这里会在当前路径下生成.config文件,这实际上是一个配置文件。在编译的时候,会根据这个文件生成include/config/auto.conf文件。include/config/auto.conf是由fixdep在编译时生成的依赖文件。

在顶层Makefile会引入auto.conf文件:

ifeq ($(dot-config),1)
# Read in config
-include include/config/auto.conf

这样在执行make编译过程中,就可以根据include/config/auto.conf中的宏的定义编译不同的库文件。

2.2.2 编译

 编译、执行make命令,生成u-boot文件:

root@zhengyang:/work/sambashare/rk3399/u-boot#  make ARCH=arm CROSS_COMPILE=arm-linux-

如果需要输出u-boot反汇编代码,执行时加入-j4参数,会在u-boot根目录下生成u-boot.map文件,在map文件中,包含函数名以及函数所在文件。

make ARCH=arm CROSS_COMPILE=arm-linux- -j4

直接反汇编u-boot文件,可以得到反汇编代码:

arm-linux-objdump -D u-boot > u-boot.dis

CROSS-COPILE是在Makefile文件中定义的变量,是用来指定交叉工具链,ARCH用来指定处理器架构。此外,我们可以在u-boot的顶层Makefile中定义:

CROSS_COMPILE=arm-linux-
ARCH=arm

这样就省去了每次编译都要在控制台输入的麻烦。

编译成功后会生成一个u-boot.bin,可以烧写到开发板上。

2.2.3 简单方式

u-boot文件夹下有个make.sh,它是个编译脚本,该脚本实际上就是做了我们之前说的配置、编译的过程,有兴趣,可以看一下这个shell的源码。

在命令行输入:

root@zhengyang:/work/sambashare/rk3399/u-boot# ./make.sh help

查看具体编译指令,如下图:

root@zhengyang:/work/sambashare/rk3399/u-boot# ./make.sh help

Usage:
        ./make.sh [board|subcmd] [O=<dir>]

         - board: board name of defconfig
         - subcmd: loader|loader-all|trust|uboot|elf|map|sym|<addr>|
         - O=<dir>: assigned output directory

Example:

1. Build board:
        ./make.sh evb-rk3399               --- build for evb-rk3399_defconfig
        ./make.sh evb-rk3399 O=rockdev     --- build for evb-rk3399_defconfig with output dir ./rockdev
        ./make.sh firefly-rk3288           --- build for firefly-rk3288_defconfig
        ./make.sh                          --- build with exist .config

        After build, Images of uboot, loader and trust are all generated.

2. Pack helper:
        ./make.sh trust                    --- pack trust.img
        ./make.sh uboot                    --- pack uboot.img
        ./make.sh loader                   --- pack loader bin
        ./make.sh loader-all               --- pack loader bin (all supported loaders)

3. Debug helper:
        ./make.sh elf                      --- dump elf file with -D(default)
        ./make.sh elf-S                    --- dump elf file with -S
        ./make.sh elf-d                    --- dump elf file with -d
        ./make.sh <no reloc_addr>          --- dump function symbol and code position of address(no relocated)
        ./make.sh <reloc_addr-reloc_off>   --- dump function symbol and code position of address(relocated)
        ./make.sh map                      --- cat u-boot.map
        ./make.sh sym                      --- cat u-boot.sym

修改 make.sh设置交叉编译工具路径:

TOOLCHAIN_ARM32=../gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin
TOOLCHAIN_ARM64=../gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin

第一次编译的时候,uboot目录下并没有.config 配置文件,需要指定默认的配置文件。

要编译rk3399,使用的deconfig文件为configs/rk3399_defconfig,则可以直接使用如下命令来编译:

root@zhengyang:/work/sambashare/rk3399/u-boot# ./make.sh rk3399

生成烧录两个镜像文件uboot.img和trust.img。

2.3 u-boot镜像烧写

 

参考文章

[1]RK3399-Linux

[2]rk3399移植 u-boot

[3]Firefly-Rk339 U-Boot 使用

[4]RK3399驱动开发笔记 | 01- 开发环境搭建(编译工具链安装、uboot编译、kernel编译)

[5] uboot官方源码:https://github.com/u-boot/u-boot

[6] 瑞芯微官方源码:https://github.com/rockchip-linux/u-boot

[7] 开发板官方源码:https://github.com/friendlyarm/uboot-rockchip

标签:00,uboot,Rockchip,make,boot,编译,RK3399,20,root
From: https://www.cnblogs.com/zyly/p/17380243.html

相关文章

  • 飞腾CPU FT-2000/4 uboot下PHY调试记录
    飞腾爱好者技术交流群码公众号“乌拉大喵喵” 一、环境说明板子是FT-2000/4的开发板:固件版本:ft-2004c_u-boot-v2-Ver0.3_202112231001.tar.gzft2004c_v2.06_image_fix.rar 二、调试命令说明调试PHY主要用到的命令是mii,先查看下可用的命令:miidevice,缩写miidev,查看......
  • android8 rk3399 同时支持多个USB摄像头
    文章目录一、前文二、CameraHal_Module.h三、CameraHal_Module.cpp四、编译&烧录Image五、App验证一、前文Android系统默认支持2个摄像头,一个前置摄像头,一个后置摄像头需要支持数量更多的摄像头,得修改AndroidHal层的代码二、CameraHal_Module.h修改CAMERAS_SUPPORT_MAX三、Camer......
  • 大揭秘!瑞芯微RK3568对比RK3399性能解析
    RK3568核心板简介​RK3568核心板是武汉万象奥科基于瑞芯微Rockchip的RK3568设计的一款高性能核心板。它采用四核Cortex-A55架构,最高主频可达2.0GHz,同时集成Mali-G522EEGPU,支持[email protected]/H.264/VP9解码和[email protected]/H.264编码。此外,RK3568支持多种接口,包括USB3.0、PC......
  • RK3399+麒麟工业平板解决方案
    1、RK3568Linux麒麟系统陀螺仪驱动调试瑞星微开发板自带的陀螺仪型号MXC6655xa,硬件人员说我们的板子和开发板一样,因此检查设备树文件找到设备描述:&i2c5{status=“okay”;mxc6655xa:mxc6655xa@15{status=“okay”;compatible=“gs_mxc6655xa”;......
  • 【 2023 】近期一些编译调试开发 Android7&9 系统的笔记( h616 / imx8m / rk3399 )
    主要就记录一下自己食用过程中遇到的一些问题吧,板子有新有旧,但都差不多。待整理呢。https://stackoverflow.com/questions/67363030/rebuild-android-code-with-error-ssl-error-when-connecting-to-the-jack-server-thttps://note.qidong.name/2017/07/disable-jack-server/......
  • rk3399 led
    rk3399led开发板:fireflyrk3399关键代码欣赏,由底层驱动来提供led的操作函数:structled_oprsstructled_oprs{ int(*init)(inti); int(*ctrl)(inti,charval); void(*release)(void); intnum;};staticint__initled_init(void){ interr,i; printk("%s%s......
  • rk3399 gpio 设置
    rk3399GPIO的操作方法RK3399GPIO分为4个大组0~4,每个大组分为4个小组(A,B,C,D),比如GPIO0有A,B,C,D四个小组,每个小组有A0~A7个gpio一个GPIO需要三类功能支持:gpio时钟,gpio输入输出,这个pin要设置为gpio功能(复用)GPIO寄存器介绍数据寄存器,用来设置某一组(A,B,C,D)的输出......
  • BIOS、BootLoader、uboot对比
    三者其实是一个概念,Android系统的CPU主频,内存大小都是由Uboot等控制的。biosBIOS是英文"BasicInputOutputSystem"的缩略语,直译过来后中文名称就是"基本输入输出系统"。其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设......
  • RK3399+PCIe+FPGA 在高速AD无线通信中的应用
    一、需求要实现高速AD/DA的数据采集,并发送到高性能arm核进行数据处理;方案RK3399+pcie+FPGA+AD/DA。二、器件介绍一、RK3399RK3399是一款低功耗、高性能处理器,用于计算、......
  • 一种RK3399+MIPI+FPGA的高速工业相机的设计方案(二)
    图像采集模块电路设计  3.4图像处理模块电路设计Spartan6芯片采用45nm制造工艺,内部一共有43661的LogicCells资源,同时含有丰富的DSP48A1Slice......