非常感谢hipboi及radxa.com赠送的Rock Pi 4A单板计算机,这也是我当前接触到的性能最强的单板计算机。
官网:http://rockpi.org/
惯例:学习官方的相关文档,重新编译bootloader, 重新编译 kernel。。。
也许,再跑个Android Q
- 串口log
这里必须提一下,它使用的串口波特率为1500000 bps (1.5Mbps),与传统的115200波特率稍有不同。由于传输数据的波特率很高,官方建议选一根好点的串口线,值得庆幸的是我这条使用pl2303芯片的串口线也可以正常工作。
串口线的接法(图片来自https://wiki.radxa.com/Rockpi4/dev/serial-console):
- 相关源代码下载
相关的文档可以参考这里: https://wiki.radxa.com/Rockpi4/dev/u-boot
linux BSP的源代码可以从这里下载:https://github.com/radxa/rockchip-bsp
该项目包启了build, kernel, rkbin, rootfs, u-boot等源代码,只有master及stable-4.4-rockips这两个分支。使用master分支的代码来编译kernel 及uboot的源代码可能会有问题。
这里将不直接通过rockchip-bsp下载代码而是通过git命令直接下载下面相关子模块代码, 建立相关的目录结构:
rock-pi-4 +-- boot | `-- cmd.sh +-- build +-- kernel +-- rkbin +-- rootfs `-- u-boot
build 使用 commit id:
commit 3a40904a60e07ad4d8996cb888369d338dd64dd6 Author: Stephen <stephen@vamrs.com> Date: Thu Jul 18 20:27:16 2019 +0800 mk-uboot.sh: fix building of rockpis board Signed-off-by: Stephen <stephen@vamrs.com>
kernel使用origin/rockpi-release-4.4分支, commit id:
commit 52e2fa1fd3cdf5491e31e68008a24e2fe01ef0e5 Author: stephen <stephen@radxa.com> Date: Tue Dec 11 19:36:39 2018 +0800 add support for the TP-Link UE300 ethernet adapter Signed-off-by: stephen <stephen@radxa.com>
rkbin使用commit id:
commit eabbf3960e94897d552a15bf5ec7eac2858bbe02 Merge: 38e2fab 36fd29d Author: Jack Ma <jack@vamrs.com> Date: Mon Jul 8 18:02:10 2019 +0800 Merge remote-tracking branch 'rockchip/master' Signed-off-by: Jack Ma <jack@vamrs.com>
rootfs使用commit id:
commit 56f7c80573ace91bad13ed15756d9366116d9ad8 Author: Jack Ma <jack@radxa.com> Date: Mon Dec 3 11:14:18 2018 +0800 Add ap6256 wfi/bt firmware Some version info from the binary: BCM4345C5 - Ampak_CL1.5 UART 37.4 MHz BT 5.0 [Baseline: 0021] fw_bcm43456c5*.bin - version: 7.45.96.0 CRC: 1d0e37c2 Date: Fri 2017-06-16 12:39:23 CST Ucode Ver: 1043.2070 FWID: 01-1813af84 nvram_ap6256.txt - AP6256_NVRAM_V1.1_08252017 Tested on ROCK Pi 4 model B. Signed-off-by: Jack Ma <jack@radxa.com>
u-boot使用origin/stable-4.4-rockpi4分支,commit id:
commit 0568348e2db0cc32657ef40e274e6b39d855d5fc Author: Stephen <stephen@vamrs.com> Date: Thu May 30 11:09:51 2019 +0800 force pcie power on for rockpi4 board Signed-off-by: Stephen <stephen@vamrs.com>
- u-boot编译
在rock-pi-4/boot下执行cmd.sh命令,会在当前目录下生成rk3399_loader_v1.12.112.bin, idbloader.img, trust.img 及 uboot.img, 同时会在spi目录下生成idbloader-spi.img, rk3399_loader_spinor_v1.15.114.bin及uboot-trust-spi.img。
rpck-pi-4/boot/cmd.sh脚本的内容如下:
#! /bin/bash set -e pushd ../u-boot ARCH=arm64 CROSS_COMPILE=/data/PUB-pie-9.0.0_r8/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-androidkernel- \ make rock-pi-4b-rk3399_defconfig ARCH=arm64 CROSS_COMPILE=/data/PUB-pie-9.0.0_r8/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-androidkernel- \ make $* popd ../rkbin/tools/loaderimage --pack --uboot ../u-boot/u-boot-dtb.bin uboot.img 0x200000 --size 1024 1 ../u-boot/tools/mkimage -n rk3399 -T rksd -d ../rkbin/bin/rk33/rk3399_ddr_800MHz_v1.22.bin idbloader.img cat ../rkbin/bin/rk33/rk3399_miniloader_v1.19.bin >> idbloader.img cp ../rkbin/bin/rk33/rk3399_loader_v1.12.112.bin . cat > trust.ini << EOF [VERSION] MAJOR=1 MINOR=0 [BL30_OPTION] SEC=0 [BL31_OPTION] SEC=1 PATH=../rkbin/bin/rk33/rk3399_bl31_v1.28.elf ADDR=0x10000 [BL32_OPTION] SEC=0 [BL33_OPTION] SEC=0 [OUTPUT] PATH=trust.img EOF ../rkbin/tools/trust_merger --size 1024 1 trust.ini # SPI [ -d spi ] || mkdir spi ../u-boot/tools/mkimage -n rk3399 -T rkspi -d ../rkbin/bin/rk33/rk3399_ddr_800MHz_v1.22.bin spi/idbloader-spi.img cat ../rkbin/bin/rk33/rk3399_miniloader_spinor_v1.14.bin >> spi/idbloader-spi.img cp ../rkbin/bin/rk33/rk3399_loader_spinor_v1.15.114.bin spi/ cat > spi/spi.ini << EOF [System] FwVersion=18.08.03 BLANK_GAP=1 FILL_BYTE=0 [UserPart1] Name=IDBlock Flag=0 Type=2 File=../../rkbin/bin/rk33/rk3399_ddr_800MHz_v1.22.bin,../../rkbin/bin/rk33/rk3399_miniloader_spinor_v1.14.bin PartOffset=0x40 PartSize=0x7C0 [UserPart2] Name=uboot Type=0x20 Flag=0 File=../uboot.img PartOffset=0x1000 PartSize=0x800 [UserPart3] Name=trust Type=0x10 Flag=0 File=../trust.img PartOffset=0x1800 PartSize=0x800 EOF ../rkbin/tools/firmwareMerger -P spi/spi.ini spi/ mv spi/Firmware.img spi/uboot-trust-spi.img mv spi/Firmware.md5 spi/uboot-trust-spi.img.md5
- 官方linux镜像分区表
官方使用的是GPT分区表,由于loader1的偏移为32KB, GPT的分区表会比通常的GPT分区表较为特殊一点。
| Part Number | Offset | Name | Description | | ----------- | ------ | ------- | -------------------------- | | 1 | 32KB | loader1 | First stage loader | | 2 | 8MB | loader2 | U-boot image | | 3 | 12MB | trust | ATF | | 4 | 16MB | boot | Kernel partition, bootable | | 5 | 128MB | rootfs | Rootfs |
(来自:https://wiki.radxa.com/Rockpi4/partitions)
- 通过USB接口更新固件
相关的文档请看这里: https://wiki.radxa.com/Rockpi4/dev/usb-install
可以通过rkdeveloptool 将相关文件写入到TF卡,eMMC或者是SPI flash中:
$ sudo rkdeveloptool db rk3399_loader_*.bin $ sleep 1 $ sudo rkdeveloptool wl 64 idbloader.img $ sudo rkdeveloptool wl 16384 uboot.img $ sudo rkdeveloptool wl 24576 trust.img $ sudo rkdeveloptool wl 32768 boot.img $ sudo rkdeveloptool wl 262144 rootfs.img
注意:
1。在使用rkdeveloptool 下载bootloader(rk3399_loader_*.bin)之后,需要等待1秒之后,再执行后面的操作,个人猜想是在执行这个命令时,会重新初始化USB控制器。在使用脚本下载的时候,要特别注意。
2。rkbin中也包含了这个工具,可以不通过源代码编译。
rkdeveloptool工具的源代码可以从这里下载:https://wiki.radxa.com/Rockpi4/dev/spi-install
相关的介绍文档在这里: http://opensource.rock-chips.com/wiki_Rkdeveloptool
$ rkdeveloptool/rkdeveloptool ---------------------Tool Usage --------------------- Help: -h or --help Version: -v or --version ListDevice: ld DownloadBoot: db <Loader> UpgradeLoader: ul <Loader> ReadLBA: rl <BeginSec> <SectorLen> <File> WriteLBA: wl <BeginSec> <File> WriteLBA: wlx <PartitionName> <File> WriteGPT: gpt <gpt partition table> WriteParameter: prm <parameter> PrintPartition: ppt EraseFlash: ef TestDevice: td ResetDevice: rd [subcode] ReadFlashID: rid ReadFlashInfo: rfi ReadChipInfo: rci ReadCapability: rcb PackBootLoader: pack UnpackBootLoader: unpack <boot loader> TagSPL: tagspl <tag> <U-Boot SPL> -------------------------------------------------------
从这里可以看到,这个工具只能将文件写入到存储卡的某个特定的位置,不能将文件下载到内存运行。个人认为这样用来调试bootloader (u-boot)或者是kernel会比较麻烦一些。
- 相关的参考文档
1。https://wiki.radxa.com/Rockpi4/dev/serial-console
2。https://wiki.radxa.com/Rockpi4/dev/u-boot
3。https://wiki.radxa.com/Rockpi4/dev/spi-install
4。https://github.com/radxa/rockchip-bsp/tree/stable-4.4-rockpis