----------------------------------------------------------------------------------------------------------------------------
开发板 :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
[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