【RK3588 开发笔记——Android Kernel U-boot编译】

博客主要围绕Android Kernel U-boot编译展开,包含Kernel、U-boot的编译步骤,还介绍了Android编译并打包固件的操作,以及Kernel单独烧录的方法,如勾选相关选项、加载文件,发现设备后切换至烧录模式执行。

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

Android Kernel U-boot编译

参考:Firefly-ROC-RK3588S-PC-编译 Android12.0 固件

Kernel 编译

cd ~/proj/kernel-5.10

export PATH=../prebuilts/clang/host/linux-x86/clang-r416183b/bin:$PATH
alias msk='make CROSS_COMPILE=aarch64-linux-gnu- LLVM=1 LLVM_IAS=1'
以上两句命令可以添加至自己账户的.bashrc 文件中,这样就不用每次都执行一遍

编译命令

msk ARCH=arm64 crm3588j_defconfig android-11.config pcie_wifi.config  //crm3588j_defconfig 自己的配置文件
msk ARCH=arm64 crm_3588j.img -j40	 //crm_3588j 自己的dts文件名

U-boot 编译

cd ~/proj/u-boot/

./make.sh rk3588

Android 编译 并打包固件

cd ~/proj/

source build/envsetup.sh
lunch rk3588_s-userdebug		//rk3588_s 当前平台
make -j40
./mkimage.sh
cd RKTools/linux/Linux_Pack_Firmware/rockdev/
rm -rf Image/ update.img
cp -ar ../../../../rockdev/Image-rk3588_s/ Image
./mkupdate.sh rk3588 Image/

Kernel单独烧录

msk ARCH=arm64 BOOT_IMG=../rockdev/Image-rk3588_s/boot.img crm_3588j.img -j40 

勾选前两项“Loader”和“Parameter”,然后点击这一项最后面一个空格“···”,分别把“rockdev\Image-rk3588_s\MiniLoaderAll.bin”和“rockdev\Image-rk3588_s\parameter.txt”加载进来,如下图所示:
发现设备后,切换至烧录模式执行即可。

### RK3568 U-Boot 默认环境变量配置 对于RK3568平台,默认的U-Boot环境变量配置通常由设备树和具体的硬件设计决定。在默认情况下,U-Boot中的某些环境变量会被预定义并用于引导流程[^1]。 以下是常见的默认环境变量及其功能: #### 1. `bootcmd` 这是U-Boot启动时执行的主要命令序列。它负责加载内核镜像到内存中,并传递必要的参数给操作系统。 ```plaintext bootcmd=run bootargs; run loadimage; bootm ${kernel_addr} ${fdt_addr} ``` #### 2. `bootargs` 该变量包含了传递给Linux内核的启动参数。这些参数可能因具体应用而异,但一般包括根文件系统位置、控制台设置和其他初始化选项。 ```plaintext bootargs=console=ttyS0,115200 root=/dev/mmcblk0p2 rw earlyprintk ``` #### 3. `loadaddr`, `kernel_addr`, 和 `fdt_addr` 这些地址指定了内核和设备树二进制文件(Device Tree Blob, DTB)被加载到RAM的具体位置。它们通常是固定的物理地址。 ```plaintext loadaddr=0x40080000 kernel_addr=0x40080000 fdt_addr=0x43000000 ``` #### 4. `ipaddr` 和 `serverip` 当通过网络协议(如TFTP)下载内核或其他映像时,这两个变量分别表示目标IP地址和服务端IP地址。 ```plaintext ipaddr=192.168.1.10 serverip=192.168.1.1 ``` #### 5. `stdin`, `stdout`, 和 `stderr` 这三个变量决定了输入/输出流的方向,例如串口或HDMI接口。 ```plaintext stdin=serial stdout=serial stderr=serial ``` #### 自定义编译过程中的环境变量设定 如果需要针对特定开发板自定义环境变量,则可以通过修改相应的`.config`文件或者调用脚本来完成。例如,在Milky-V Duo系列中使用的编译方法可以作为参考[^2]。假设我们正在处理RK3568芯片组的情况,那么类似的构建步骤可能是这样的: ```bash export CHIP=rk3568 export VENDOR=rockchip export BOARD=evb export BOOT=sdcard BOARD_FULL=${CHIP}-${VENDOR}-${BOARD}-${BOOT} CONFIG_FULL=${CHIP}_${VENDOR}_${BOARD}_${BOOT} source device/${BOARD_FULL}/boardconfig.sh source build/rksetup.sh defconfig ${CONFIG_FULL} build_uboot ``` 上述代码片段展示了如何为指定的目标板准备合适的配置以及生成最终固件的过程。 --- ### 示例代码:保存环境变量至NVRAM 为了使更改后的环境变量永久生效,需将其写入非易失性存储器(NVRAM)。这一步骤可通过运行以下指令实现: ```bash saveenv ``` 此操作会将当前工作环境中所有的改动同步回持久化区域,从而即使断电也能保留下来。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值