Android系统10 RK3399 init进程启动(九) u-boot修改,单独编译和烧录

本文详细介绍了在Android 10.0系统下,针对瑞芯微RK3399开发板的u-boot进行修改、独立编译和烧录的步骤。首先讲解了u-boot的编译命令,包括清理、配置和编译过程。然后展示了如何在源码中修改倒计时设置,并进行单独编译。接着阐述了两种烧录方法,分别是Linux系统下的TF卡烧录和Windows/Linux线刷。最后,文章指出了解决方案在开发调试阶段的实用性,并提醒深入u-boot开发需要掌握更多的底层知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 配套系列教学视频链接:

      安卓系列教程之ROM系统开发-百问100ask

说明

系统: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的专栏-优快云博客

将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的专栏-优快云博客

window下烧写单独镜像:

linux 烧写单独镜像:

sudo upgrade_tool di -b boot.img

四,启动运行

上个步骤烧录完成之后, 上电重启

 在倒计时结束之前,键盘中输入ctrl+c,就可以进入u-boot命令行。 

五,总结

  u-boot开发的内容其实也非常多,上面的内容主要是让大家对瑞星微平台下, u-boot的编译和使用有一个基本的认识, 如果需要深入了解u-boot, 那就必须掌握ARMv7/ARMv8汇编以及体系架构, RK3399 SOC的控制编程等相关知识。

### RK3566 U-Boot 配置 GPIO 3A1 方法 在 RK3566 平台的 U-Boot 环境下配置 GPIO 口(如 GPIO 3A1),通常涉及硬件寄存器的操作以及软件层面的相关代码实现。以下是具体方法: #### 1. **理解 GPIO 寄存器结构** GPIO 控制主要依赖于以下几个关键寄存器: - 数据方向寄存器 (DDR, Data Direction Register): 定义引脚的方向(输入/输出)。 - 数据寄存器 (DR, Data Register): 设定或读取引脚的状态。 对于 RK3566,这些寄存器的具体地址可以通过芯片手册获取。例如,在某些 Rockchip 芯片中,GPIO 基础地址可能类似于 `0xFF750000`[^2]。 #### 2. **定位 GPIO 3A1 的物理位置** GPIO 名称中的 “3A1” 表示该引脚属于第 3 组 GPIO,并且是组内的第一个引脚。其对应的寄存器偏移量需通过查阅数据手册确认。假设 GPIO 3A1 对应的数据方向寄存器位于基址加上特定偏移的位置,则可以定义如下变量用于访问寄存器: ```c #define GPIO3_BASE_ADDR 0xff7d0000 // 示例基础地址 #define GPIO3_DDR_OFFSET 0x0004 // DDR 寄存器偏移 #define GPIO3_DR_OFFSET 0x0000 // DR 寄存器偏移 volatile unsigned int *gpio3_ddr = (unsigned int *)(GPIO3_BASE_ADDR + GPIO3_DDR_OFFSET); volatile unsigned int *gpio3_dr = (unsigned int *)(GPIO3_BASE_ADDR + GPIO3_DR_OFFSET); ``` #### 3. **设置 GPIO 方向** 为了控制 GPIO 作为输入还是输出,需要写入相应的值到 DDR 寄存器。例如,将 GPIO 3A1 设置为输出模式: ```c *gpio3_ddr |= (1 << 1); // 将位 1 设置为输出模式 ``` 此操作会启用 GPIO 3A1 的输出功能。 #### 4. **设定 GPIO 输出状态** 一旦设置了方向,就可以通过修改 DR 寄存器来改变 GPIO 的逻辑电平。例如,将 GPIO 3A1 设置为高电平: ```c *gpio3_dr |= (1 << 1); // 设置 GPIO 3A1 为高电平 ``` 或者将其设为低电平: ```c *gpio3_dr &= ~(1 << 1); // 清零 GPIO 3A1 到低电平 ``` #### 5. **U-Boot 中的应用场景** 在 U-Boot 初始化阶段,可以在板级初始化函数中完成上述配置。例如编辑 `/u-boot/common/board_f.c` 文件并添加类似以下代码片段: ```c #include <linux/io.h> void board_gpio_init(void) { volatile unsigned int *gpio3_ddr; volatile unsigned int *gpio3_dr; gpio3_ddr = (unsigned int *)ioremap(GPIO3_BASE_ADDR + GPIO3_DDR_OFFSET, sizeof(unsigned int)); gpio3_dr = (unsigned int *)ioremap(GPIO3_BASE_ADDR + GPIO3_DR_OFFSET, sizeof(unsigned int)); if (!gpio3_ddr || !gpio3_dr) { printf("Failed to map GPIO registers\n"); return; } *gpio3_ddr |= (1 << 1); // 设置 GPIO 3A1 为输出 *gpio3_dr |= (1 << 1); // 设置 GPIO 3A1 为高电平 } ``` #### 6. **编译与验证** 完成代码修改后重新编译 U-Boot,并确保新版本被正确烧录至目标设备。测试时可通过万用表或其他工具测量对应引脚的实际电压变化以验证配置效果。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旗浩QH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值