最近拿到两块华北工控的EMB-3531,RK3399核心。
网上资料不多,除了官方的wiki,http://android1.norco.com.cn:7070/index.php/EMB-3531
还有下面的帖子可以参考一下。
https://www.right.com.cn/forum/thread-8251255-1-1.html 《入手华北工控RK3399板子(盒子)型号EMB-3531值得一玩》
官方的资料其实只提供一些描述和使用的方法,提供ubuntu、android等的镜像下载,没有提供源代码和原理图,这给后续的适配带来巨大挑战。
这个板子的最大特点是:除了其他RK3399都带的usb 3.0 ,千兆网卡外,还带了一个标准的pcie接口。扩展性大大提高。实测NVME可以支持,Intel I225v 2.5G网卡也支持。
我需要一个支持 I225v 的OpenWRT,而且能跑在EMB-3531上,问了好多网友,也没找到。上面提到的帖子提供的openwrt能够启动,但问题很多,而且因为版本问题,无法驱动I225,也没法找到匹配内核的驱动。
只能靠自己适配了。第一次适配一个新的硬件,还是很有挑战的,网上的资料基本上都不完整。只能自己摸索。
在浩如烟海的代码中,没有什么教程和帮助,去摸索添加一个硬件,真的是非常困难。
经过几周时间的摸索,基本上理清的适配的流程,特此记录一下,希望这个帖子能够帮助那些想自己适配的网友。
1、首先,去github下载opnwrt,推荐下面两个,里面包含支持rockchip的代码,可以在他们的基础上适配。
https://github.com/coolsnowwolf/lede
https://github.com/DHDAXCW/lede-rockchip
按照github上的说明,下载代码,准备编译环境。。。。。
2、适配的过程开始了
a. 修改的第一文件是:target/linux/rockchip/image/armv8.mk
在文件最下面增加一下内容。这样后面才能在 make menuconfig的界面里,看到新硬件的选项。
define Device/emb-3531
DEVICE_VENDOR := EMB
DEVICE_MODEL := EMB-3531
SOC := rk3399
UBOOT_DEVICE_NAME := rk3399-emb-3531
IMAGE/sysupgrade.img.gz := boot-common | boot-script emb-3531 | pine64-bin | gzip | append-metadata
DEVICE_PACKAGES := kmod-r8168 -urngd
endef
TARGET_DEVICES += emb-3531
b. 在 package/boot/uboot-rockchip/Makefile 文件里增加 EMB-3531的内容
c、这两个文件应该按实际修改,我觉得不太重要,就没有修改,理论上应该根据实际修改
target/linux/rockchip/armv8/base-files/etc/board.d/01_leds
target/linux/rockchip/armv8/base-files/etc/board.d/02_network
d、patch文件,这个两个patch是关键。patch是干啥的呢?我理解,原理的代码是不包含我们的板子的内容,
在编译过程中,就需要我们在原来的代码上打补丁,这样编译过程才会把我们的板子编译进去。
./target/linux/rockchip/patches-5.4/212-rockchip-rk3399-add-support-for-emb-3531.patch
./package/boot/uboot-rockchip/patches/317-rockchip-rk3399-Add-support-for-emb3531.patch
先说第一个简单的patch
./target/linux/rockchip/patches-5.4/212-rockchip-rk3399-add-support-for-emb-3531.patch
--- a/arch/arm64/boot/dts/rockchip/Makefile
+++ b/arch/arm64/boot/dts/rockchip/Makefile
@@ -32,3 +32,4 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-ro
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-rockpro64.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-sapphire.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-sapphire-excavator.dtb
+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-emb-3531.dtb
第二个 ./package/boot/uboot-rockchip/patches/317-rockchip-rk3399-Add-support-for-emb3531.patch 是核心
因为内容太长了,就节选一段,下面可以看到patch 了几个文件。比较重要的就是这个 /arch/arm/dts/rk3399-emb-3531.dts文件
--- /dev/null
+++ b/configs/rk3399-emb-3531_defconfig
@@ -0,0 +1,73 @@
+CONFIG_ARM=y
+CONFIG_SKIP_LOWLEVEL_INIT=y
+CONFIG_COUNTER_FREQUENCY=24000000
+CONFIG_ARCH_ROCKCHIP=y
+CONFIG_SPL_GPIO_SUPPORT=y
+CONFIG_SYS_TEXT_BASE=0x00200000
+CONFIG_NR_DRAM_BANKS=1
+CONFIG_ENV_OFFSET=0x3F8000
+CONFIG_DEFAULT_DEVICE_TREE="rk3399-emb-3531"
+CONFIG_ROCKCHIP_RK3399=y
+CONFIG_TARGET_EVB_RK3399=y
--- a/arch/arm/dts/Makefile
+++ b/arch/arm/dts/Makefile
@@ -161,7 +161,8 @@ dtb-$(CONFIG_ROCKCHIP_RK3399) += \
rk3399-rock-pi-4c.dtb \
rk3399-rock960.dtb \
rk3399-rockpro64.dtb \
- rk3399pro-rock-pi-n10.dtb
+ rk3399pro-rock-pi-n10.dtb \
+ rk3399-emb-3531.dtb
dtb-$(CONFIG_ROCKCHIP_RK3568) += \
rk3568-evb.dtb
--- /dev/null
+++ b/arch/arm/dts/rk3399-emb-3531-u-boot.dtsi
@@ -0,0 +1,14 @@
+#include "rk3399-u-boot.dtsi"
+/ {
+ chosen {
+ stdout-path = "serial2:115200n8";
+ u-boot,spl-boot-order = "same-as-spl", &sdmmc;
+ };
+ config {
+ sysreset-gpio = <&gpio1 RK_PA6 GPIO_ACTIVE_HIGH>;
+ };
+};
+&gpio1 {
+ u-boot,dm-pre-reloc;
+};
+
--- /dev/null
+++ b/arch/arm/dts/rk3399-emb-3531.dts
@@ -0,0 +1,775 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (c) 2016 Fuzhou Rockchip Electronics Co., Ltd
+ */
+
+/dts-v1/;
3.好了。现在可以编译了。先是 make menuconfig 选择新适配进去的硬件板子,各种选项选好。
然后,make V=s -j10
顺利的话,固件就会自动生成了。
请不要胡乱输入以及粘贴、复制等方式灌水
请尊重作者、并共同维护网站的正常阅读,否则账户将会被限制发帖、回帖,并且积分可能会被清零,站内短信以及阅读权限等都会受到影响,谢谢。
具体限制方式:https://www.right.com.cn/forum/thread-8307840-1-1.html
|