# rk3399 **Repository Path**: pylixm/rk3399 ## Basic Information - **Project Name**: rk3399 - **Description**: rk3399的相关资料 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: am40 - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 30 - **Created**: 2024-01-11 - **Last Updated**: 2024-01-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SMART Technologies AM40 镜像下载: ophub Armbian下载:https://github.com/ophub/amlogic-s9xxx-armbian/releases ophub openwrt下载:https://github.com/ophub/amlogic-s9xxx-openwrt/releases 本人移植或者收集群友的镜像分享: https://lajilao.top/thread-63-1-1.html ## 规格参数 > AM40整机为 主机和OPS扩展两部分 > 整机接口: 双USB3.0+千兆有线网口 + HDMI1.4 + TF卡口 + OPS接口 > OPS扩展:四个USB2.0 + HDMI2.0 + 6个COM口 | 部件名称 | 芯片型号 | 备注说明 | | :-----------: | :------------------: | :----------------------------------------------------------: | | CPU | RK3399 | Dual-core A72+Quad-core A53, 64 bits, 2GHz;Mali-T864 GPU | | RAM | | 4 GB DDR3L SDRAM | | Flash | | 32G eMMC 5.1 | | Ethernet | RTL8211F | RJ45 Gigabit Ethernet | | WIFI+BT |M2-EKEY-PCIE RTL8822BE| 802.11AC/ABGN PCIE WLAN WITH BLUETOOTH 4.2 SINGLE-CHIP CONTROLLER | | USB 2.0 | | USB 2.0[ops] * 4 | | USB 3.0 | | USB 3.0 [on board] * 2 | | HDMI | | HDMI 1.4[(1920 × 1080) on board,由DP转的] + HDMI 2.0[ops 4k@60Hz] | | power | 12–19V DC at 2.5–1.6A | PORT size: 5.5 * 2.5 [ops; main];3.0 * 1.1 [on board; hided]| 电源测试5V2A、12V1A也能启动,已有5521接口电源的,可以购买5521母转5525 DC转接头。 你说啥?嫌屁股太大?分享群友的方案 am40不含尾插、改供电、开关键亚克力外壳图纸 https://lajilao.top/thread-64-1-1.html AM40 3D打印外壳 https://lajilao.top/thread-46-1-1.html 没有尾插的话,主板hdmi在linux系统下驱动是个问题,目前有leo的内核可以驱动主板hdmi https://lajilao.top/thread-63-1-1.html am40主机介绍 ![输入图片说明](assets/board.jpg) 主板上电池右上方的白色按钮为uboot按键 https://gitee.com/xiayang0521/rk3399/releases/download/rk3399%E5%88%B7%E6%9C%BA%E5%B7%A5%E5%85%B7%E5%92%8C%E9%A9%B1%E5%8A%A8/specs_am40.pdf 教育系统卡刷包: https://support.smarttech.com/docs/accessories/comp-modules-and-appliances/iq-appliance/en/downloads/am40/current-version.cshtml 系统介绍: https://www.youtube.com/watch?v=vRDcXASva3s 开箱: https://g.itemz.cn/IooVVP 以下教程均针对整机的情况,如果仅主机,则打开电源通电后,找到挨着主机dc口的名为J1的一个白色塑料里的两个插针一下(或者找到挨着UART的J2也行),短接J1或者J2一秒,才能开机。 ## 卡刷教程 据说有些镜像只能线刷不能卡刷,新手请使用我教程里的所用的镜像。 ### 1. 将 Armbian_23.02.2_am40_jammy_current_6.1.11.7z 解压出Armbian_23.02.2_am40_jammy_current_6.1.11.img,烧录到tf卡, #### Windows下TF烧写 > 使用rufus烧写工具 https://rufus.ie/zh/ 直接烧录img/img.xz/img.gz格式的镜像文件或者镜像压缩文件 ![输入图片说明](assets/rufus%20tf.png) 如图 依次选择tf卡设备和镜像文件,点击开始,等待烧录完成即可。 插到机子上,开机,即可启动tf外置系统 。Armbian下,板载HDMI无驱动,ops上HDMI正常。 Armbian初始账号root 密码1234 (属于官方默认设置,以后刷任何机子的armbian先尝试这个) 很多网卡的驱动没有集成,需要自行安装 安装方法如下(操作以下命令确保开发板插上了网线) apt update apt install armbian-firmware-full 执行完上面两句命令就重启一下 reboot 完成后就会发现有wifi了 ### 2. 需要备份EMMC里的系统 AM40原厂Android_mmcblk2备份 要使用 dd 和 gzip 备份,可以执行命令: ``` dd if=/dev/mmcblk2 | gzip > Android_am40_mmcblk2.img.gz ``` 在还原时,可以执行下列命令: ``` gzip -dc Android_am40_mmcblk2.img.gz | dd of=/dev/mmcblk2 ``` 如需把Armbian装进emmc,ssh登陆后,将Armbian_23.02.2_am40_jammy_current_6.1.11.img上传到/root/,执行 ``` dd if=Armbian_23.02.2_am40_jammy_current_6.1.11.img of=/dev/mmcblk2 bs=1M ``` 或者执行 ``` armbian-install # 选择 Boot from emmc - System on eMMC,安装完成后,选择 install/update bootloader on sd/emmc ``` ### 3. 完成后,关机拔掉tf卡,重新启动即可,请耐心等待1分钟,如果超过1分钟不启动,再考虑是哪里出了问题。 ## Windows线刷教程 ### 1.下载DriverAssitant_v5.1.1,AndroidTool,rk3399_loader_v1.24.126.bin https://gitee.com/xiayang0521/rk3399/releases/tag/rk3399%E5%88%B7%E6%9C%BA%E5%B7%A5%E5%85%B7%E5%92%8C%E9%A9%B1%E5%8A%A8 安装DriverAssitant_v5.1.1,打开AndroidTool ### 2. 插usb双公头到第一个usb3.0(上面的),另一端接电脑 ### 3. 找到service开关,拨到service ### 4. 进入maskrom模式 #### a 内部系统为原版安卓系统 插电开机,打开瑞芯微开发工具,会发现一个adb设备,点击切换, ![输入图片说明](assets/%E5%88%87%E6%8D%A2_androidtool.png) 等待变成发现一个loader设备, 点击高级功能找到 进入maskrom 按钮,点击,然后等待发现一个maskrom设备; ![输入图片说明](assets/%E9%AB%98%E7%BA%A7%E5%8A%9F%E8%83%BD_androidtool.png) #### b 不是安卓系统 比如启动了linux系统(外置内置均可),进入系统后执行 ``` dd if=/dev/zero of=/dev/mmcblk2 bs=1M count=300 ``` 关机(如果有tf卡,关机后,拔掉tf卡),重新开机后可以自动进入maskrom模式 #### c 实在没办法,可以采用以下两种之一 (1) 拆机 按住主板上电池右上方的白色按钮(uboot按键)或者 短接maskrom短接点 插usb双公头到第一个usb3.0(上面的),另一端接电脑,插电开机,在刷机软件中观察是否进入maskrom模式; ![输入图片说明](assets/maskrom.png) (2) 进行串口调试 接TTL,如图依次为gnd vcc tx rx,接线不要接vcc,测试了市面上常见的几款 CH340G、PL2303HX 方案的串口,均存在只能读不能写问题,这将无法从串口打断 u-boot 启动和进行 shell 操作,建议使用 CP2104 方案的串口代替。串口调试软件使用 minicom 、putty、SecureCRT 等工具。 连接串口并打开串口调试软件,开机后迅速在调试窗口按任意键,打断 u-boot 启动,执行如下命令 ``` reboot bootloader ``` 重启后会自动进入刷机模式。 ![输入图片说明](assets/ttl.png) ### 5.发现一个maskrom设备后, #### a 刷linux 如图选择rk3399_loader_v1.24.126.bin 作为 Loader, img结尾的armbian镜像作为 System(注意地址为0x00000000) ![注意地址system为0x00000000](assets/loader_system_android_tool.png) 点击下载镜像标签,点击执行 ![输入图片说明](assets/burning.png) #### b 刷android update.img 下载安卓线刷包,解压出update.img文件 选择刷机工具的[升级固件]标签,选择[固件]-[擦除flash] 擦除完毕之后再次选择[高级功能]-[maskrom],然后选择[升级固件] - [升级] 等待升级完成,刷机结束之后自动进入recovery,擦除data与cache,大约2分钟黑屏,耐心等待即可。 ### 6.刷完记得把service开关,拨到normal Armbian初始账号root 密码1234 (属于官方默认设置,以后刷任何机子的armbian先尝试这个)。 Armbian下,板载HDMI无驱动,ops上HDMI正常。 很多网卡的驱动没有集成,需要自行安装 安装方法如下(操作以下命令确保开发板插上了网线) apt update apt install armbian-firmware-full 执行完上面两句命令就重启一下 reboot 完成后就会发现有wifi了 ### Linux线刷教程 1. 进入烧写模式 同上进入 MaskRom 模式 ```shell # 查看连接的设备 ./rkbin/tools/upgrade_tool ld # 或使用 rkdeveloptool # 因 ./rkbin/tools/rkdeveloptool 这个不支持 ld 命令故需要重新编译 rkdeveloptool git clone https://github.com/rockchip-linux/rkdeveloptool.git sudo apt install -y libudev-dev libusb-dev dh-autoreconf libglib2.0-dev cd rkdeveloptool && autoreconf -i && ./configure && make sudo mv rkdeveloptool /usr/local/bin/ rkdeveloptool ld # 应会有如下设备信息 DevNo=1 Vid=0x2207,Pid=0x330c,LocationID=301 Loader # 或 DevNo=1 Vid=0x2207,Pid=0x330c,LocationID=301 MaskRom # Loader 模式进入 MaskRom 模式方法 ./rkbin/tools/upgrade_tool rd 3 # 或 rkdeveloptool rd 3 ``` 2. 初始化 DRAM 需要在 MaskRom 模式下才下载,否则报错 “The device does not support this operation!”。 ```shell # 初始化 DRAM ./rkbin/tools/upgrade_tool db ./rk3399_loader_v1.22.119.bin # 或 rkdeveloptool db ./rk3399_loader_v1.22.119.bin # 下载镜像 ./rkbin/tools/upgrade_tool wl 0x0 ./system.img # 或 rkdeveloptool wl 0x0 ./system.img ``` #### Linux下TF烧写 > 也可以使用图形化烧写工具 balena-etcher-electron > > https://github.com/balena-io/etcher/releases ```shell # sdX 为 sdcard 对应的块设备文件 sudo dd if=system.img of=/dev/sdX bs=4M oflag=sync status=progress ``` ### 串口调试 #### 串口选择 测试了市面上常见的几款 CH340G、PL2303HX 方案的串口,均存在只能读不能写问题,这将无法从串口打断 u-boot 启动和进行 shell 操作,建议使用 CP2104 方案的串口代替。 #### 通信软件 > 也可以使用 minicom 、putty、SecureCRT 等工具。 ```shell # 解决串口权限问题 sudo usermod -a -G dialout $USER # 重新登录后生效 reboot # 安装串口通信软件 sudo apt install -y python3-serial # 打开串口 miniterm /dev/ttyUSB0 1500000 # 退出 miniterm 快捷键为 Ctrl + ] ``` ## 系统配置 ### 网络 #### 有线 ```shell # 使用 netplan 配置以太网络 sudo nano /etc/netplan/01-netcfg.yaml # 配置为动态获取 IP network: version: 2 renderer: networkd ethernets: eth0: dhcp4: yes # 或静态 IP network: version: 2 renderer: networkd ethernets: eth0: dhcp4: no addresses: [10.0.0.10/24] gateway4: 10.0.0.1 nameservers: addresses: [223.5.5.5,223.6.6.6] # 应用配置 sudo netplan --debug apply ``` #### 无线 ```shell # WiFi 配置 nmcli dev wifi connect "hotspot-name" password "password" # 或使用 nmtui 命令图形化修改 ``` #### 热点 使用 hostapd + isc-dhcp-server ```shell sudo apt install -y hostapd isc-dhcp-server # 配置 hostapd sudo nano /etc/hostapd/hostapd.conf interface=wlan0 driver=nl80211 ssid=hostspot-name macaddr_acl=0 auth_algs=1 #auth_algs=3 ignore_broadcast_ssid=0 hw_mode=g channel=6 wpa=2 wpa_passphrase=password wpa_key_mgmt=WPA-PSK wpa_pairwise=CCMP #wpa_pairwise=TKIP #rsn_pairwise=CCMP # 修改 hostapd 默认配置文件路径 sudo nano /etc/default/hostapd DAEMON_CONF=/etc/hostapd/hostapd.conf # 重启 hostapd sudo service hostapd restart sudo service hostapd status # dhcp 配置 sudo nano /etc/dhcp/dhcp.conf #option domain-name "example.org"; #option domain-name-servers ns1.example.org, ns2.example.org; authoritative; subnet 10.0.0.0 netmask 255.255.255.0 { range 10.0.0.10 10.0.0.200; option broadcast-address 10.0.0.255; option routers 10.0.0.1; default-lease-time 600; max-lease-time 7200; option domain-name "local"; option domain-name-servers 223.5.5.5, 8.8.4.4; } # 设置 dhcp 网口 # 不进行操作会出现错误:Not configured to listen on any interfaces! sudo nano /etc/default/isc-dhcp-server INTERFACESv4="wlan0" INTERFACESv6="wlan0" # 设置 wlan0 地址 # 不进行操作会出现错误:Not configured to listen on any interfaces! sudo ip addr add 10.0.0.1/24 dev wlan0 # 开启转发 sudo sysctl -w net.ipv4.ip_forward=1 sudo iptables -t nat -A POSTROUTING -s 10.0.0.1/24 -o eth0 -j MASQUERADE # 启动 dhcp 服务 sudo service isc-dhcp-server restart sudo service isc-dhcp-server status ``` 使用 network-manager + dnsmasq ```shell # 此方按创建的 2.4G 热点会出现部分旧设备连接不上 sudo apt install -y dnsmasq #nmcli dev wifi hotspot ifname wlan0 ssid "hotspot-name" password "password" nmcli connection add type wifi ifname wlan0 con-name "Hostspot" autoconnect no ssid "hotspot-name" nmcli connection modify "Hostspot" 802-11-wireless.mode ap 802-11-wireless.band bg ipv4.method shared nmcli connection modify "Hostspot" wifi-sec.key-mgmt wpa-psk nmcli connection modify "Hostspot" wifi-sec.psk "password" nmcli connection up "Hostspot" # 或使用 nmtui 命令图形化修改 ``` ### 镜像源 ```shell sudo cp -a /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i "s@http://ports.ubuntu.com@http://mirrors.huaweicloud.com@g" /etc/apt/sources.list ``` ### 本地化 ```shell # 安装英文与简体中文语言包 sudo apt install -y language-pack-en language-pack-zh-hans # 设置本地化 sudo dpkg-reconfigure locales # 配置时区 sudo apt install -y tzdata sudo dpkg-reconfigure tzdata # 同步硬件时间 sudo hwclock -s ``` ### 分区扩容 ```shell sudo apt install -y parted sudo parted /dev/mmcblk2 unit s print resizepart 5 100% print Q sudo resize2fs /dev/mmcblk2p5 ``` ### Docker ```shell sudo apt install gnupg2 -y # 添加 apt 公钥 curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - # 添加软件源 echo "deb [arch=arm64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list # 安装 docker sudo apt update && sudo apt install docker-ce -y # 非 root 用户免 sudo 操作 docker sudo usermod -aG docker $USER ``` ## 常见问题 Q:能进 MaskRom 模式,但下载 Loader 初始化 DRAM 总是失败。或 u-boot 无等待时间不能按 RECOVERY 键进入 MaskRom 模式。 A:插上带有系统的 tf卡,默认会从tf卡,连接串口并打开串口调试软件,开机后迅速在调试窗口按任意键,打断 u-boot 启动,执行如下命令破坏 u-boot,重启后会自动进入 MaskRom 模式。 ```shell mmc dev 0 mmc erase 0 2000 reset ``` 或者进入系统后 ``` dd if=/dev/zero of=/dev/mmcblk2 bs=1M count=300 ``` --- Q:使用 apt 安装软件包时出现如下警告: > perl: warning: Setting locale failed. > perl: warning: Please check that your locale settings: > LANGUAGE = (unset), > LC_ALL = (unset), > LANG = "zh_CN.UTF-8" > are supported and installed on your system. > perl: warning: Falling back to the standard locale ("C"). A:参考 系统配置-本地化 一节安装相应语言包即可解决。 --- Q:以太网卡因未被 network-manager 托管不能启用。 ```shell # 网卡未启用 ip addr show eth0 2: eth0: mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 16:a6:4c:50:54:44 brd ff:ff:ff:ff:ff:ff # 网卡未被 network-manager nmcli device DEVICE TYPE STATE CONNECTION eth0 ethernet unmanaged -- lo loopback unmanaged -- # 使用该命令启用网卡无效 nmcli dev set eth0 managed yes ``` A:原因在于 Ubuntu 更推荐使用 netplan 配置以太网络,默认的 network-manager 配置 /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf 不会托管以太网卡[^7]。若要使用 network-manager 托管所有网络设备操作如下: ```shell # 覆盖默认配置 sudo touch /etc/NetworkManager/conf.d/10-globally-managed-devices.conf ``` --- Q:如何获取当前系统的设备树和内核编译选项? A:使用如下命令获取: ```shell # 设备树 cat /sys/firmware/fdt > raw.dtb # 内核编译选项 zcat /proc/config.gz > kernel.config ``` --- Q:如何连接蓝牙音箱? A:使用如下命令连接: ```shell sudo apt install -y bluez bluez-tools pulseaudio pulseaudio-module-bluetooth # 查看蓝牙信息 hciconfig # 使用 bluetoothctl 命令操作蓝牙 # 上电 power on # 扫描 scan on # 配对 pair MAC # 信任 trust MAC # 连接 connect MAC # 如果连接时出现 Failed to connect: org.bluez.Error.Failed 可以通过重启 pulseaudio 解决 pulseaudio -k pulseaudio --start # 声道测试 speaker-test -c2 -twav # 查看 PulseAudio 信息 pactl info # 查看音频输出通道 pactl list sinks # 设置为默认音频输出通道,通过 TAB 补全后面的名称 pactl set-default-sink bluez_sink.MAC.a2dp_sink ``` ## 参考资料 [^1]: [Boot option - Rockchip open source Document](http://opensource.rock-chips.com/wiki_Boot_option) [^2]: [U-Boot v2020.01 和 Linux 5.4 在 RK3399 上部署](https://aijishu.com/a/1060000000079034) [^3]: [ATF - Rockchip open source Document](http://opensource.rock-chips.com/wiki_ATF) [^4]: [U-Boot - Rockchip open source Document](http://opensource.rock-chips.com/wiki_U-Boot) [^5]: [Rockchip Kernel - Rockchip open source Document](http://opensource.rock-chips.com/wiki_Rockchip_Kernel) [^6]: [Rkdeveloptool - Rockchip open source Document](http://opensource.rock-chips.com/wiki_Rkdeveloptool) [^7]: [network-manager does not manage ethernet and bluetooth interfaces](https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/1638842)