说明
系统:Android10.0
设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)
前言
上一篇讲到了u-boot镜像生成和启动的逻辑, uboot的单独开发我在课程中并不会去详细讲, 但是如果你想修改uboot源码,或者修改uboot的配置, 此时你也得知道如何单独修改uboot, 编译uboot, 以及单独烧录uboot。
小目标
掌握u-boot修改,独立编译, 以及独立烧录
一, u-boot编译命令
cd rk3399_Android10.0/uboot/
#完全清除
make distclean
#单独编译(第一次编译场景)
./make.sh rk3399
#源码配置(不改代码,基于已经存在的.config)
export PATH=$PATH:/mnt/ext-disk2/RK/rk3399_Android10.0/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin
make CROSS_COMPILE=aarch64-linux-gnu- menuconfig
#单独编译(基于已经存在的.config)
./make.sh
二,u-boot修改实战
现在的uboot源码的控制逻辑和内核控制逻辑相同, 都是通过 Kconfig和Makefile来完成, 所以我们修改uboot的场景,包括配置部分源码的编译, 或者修改某个特定文件中的源码逻辑。
默认编译出来的镜像, uboot是没有倒计时, 主要是为了加快运行速度, 在开发调试的时候, 我们可以在uboot中加上倒计时, 从而进入到它的命令行模式下进行操作。
cd rk3399_Android10.0/uboot/
export PATH=$PATH:/mnt/ext-disk2/RK/rk3399_Android10.0/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin
make CROSS_COMPILE=aarch64-linux-gnu- menuconfig
将上面的倒计时秒数由0改成3,或者其他数字,表示倒计时停留的秒数
选择exit, 保存退出
二, u-boot单独编译
上个步骤配置好了之后, 就可以直接执行编译了
#单独编译(基于已经存在的.config)
./make.sh
三, u-boot单独烧录
1, linux系统下TF卡烧录方式(有点麻烦)
在windows下,瑞星微提供的SDDiskTool只能烧录统一固件, 如果想要单独sd/tf卡中的分区, 可以通过在linux系统中进行操作:
在已经完成了一次统一镜像烧录之后(参考Android系统10 RK3399 init进程启动(四) RK3399开发板运行官方镜像_ldswfun的专栏-CSDN博客)
将sd/tf卡插入到linux系统中,查看ls /dev/sdb*
烧录boot.img命令
sudo dd if=uboot.img of=/dev/sdb1 bs=1M count=4; sync (验证ok)
2, window/linux 线刷(不适合TF存储):
详细烧录,请参考:Android系统10 RK3399 init进程启动(六) 镜像更新_ldswfun的专栏-CSDN博客
window下烧写单独镜像:
linux 烧写单独镜像:
sudo upgrade_tool di -b boot.img
四,启动运行
上个步骤烧录完成之后, 上电重启
在倒计时结束之前,键盘中输入ctrl+c,就可以进入u-boot命令行。
五,总结
u-boot开发的内容其实也非常多,上面的内容主要是让大家对瑞星微平台下, u-boot的编译和使用有一个基本的认识, 如果需要深入了解u-boot, 那就必须掌握ARMv7/ARMv8汇编以及体系架构, RK3399 SOC的控制编程等相关知识。
举报