瑞芯微Rockchip开发者社区
直播中

陶醉了的猫

12年用户 599经验值
私信 关注
[问答]

如何单独修改/编译/烧录uboot?

如何单独修改uboot?
如何编译uboot?
如何单独烧录uboot?

回帖(1)

谭丽

2022-3-7 10:27:54
说明


系统: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的控制编程等相关知识。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分