1. 系统烧录
1.1. 启动方式
ds-h618 支持从EMMC启动、SD卡启动,板卡上电后主控首先尝试从SD卡启动,失败后会从EMMC启动,如果两个方式都失败,就会进入FEL USB刷机模式。
注意:当SD卡烧录过固件,SPL会一直残留在SD卡的开头位置,格式化SD卡也不能清除,如果没有清除SPL,板卡上电后还是会选择SD卡启动SPL,导致不能从EMMC启动。
1.2. 固件介绍
SDK |
系统名 |
固件命名 |
简要 |
刷入工具 |
|---|---|---|---|---|
全志 |
ubuntu 22.04 server |
h618_dragonboard_p1 |
基于全志 |
Phoenix |
全志 |
ubuntu 22.04 desktop |
h618_dragonboard_p1 |
基于全志 |
Phoenix |
1.3. USB烧录系统
1.3.1. 获取USB刷机工具PhoenixSuit
1.3.2. 解压压缩包得出目录

1.3.3. 进入目录运行PhoenixSuit.exe

1.3.4. 加载固件
1.3.5. 打开PC设备管理器
1.3.6. 开发板断电后,按住FEL按钮不放,将USB0接到电脑,此时设备管理器会发现新设备,如果是第一次操作,需要先安装驱动。
1.3.7. 安装驱动:右击设备管理器中新发现的设备->更新驱动程序->浏览我的电脑以查找驱动程序->选择刷机工具目录PhoenixSuit_V2.0.0_20230529->下一步->完成。
1.3.8. 安装驱动后,开发板断电,按住FEL按钮不放,将USB0接到PC,此时工具提示,选择是开始烧写。
1.3.9. 如只需烧写U-BOOT、内核,修改勾选项
2. 启动系统
2.1. 默认账号密码
用户等级 |
用户名 |
密码 |
|---|---|---|
超级用户 |
root |
root |
2.2. 系统登录工具
这里推荐使用MobaXterm工具,这款工具支持通过Console串口、网络连接登录linux系统。
下载链接: MobaXterm
2.3. 登录系统
2.3.1. 通过USB Console串口
将TYPE-C Console口连接至PC机,此时PC机会新增COM端口。如果新增的是未识别驱动,需先安装CH340芯片驱动程序。 CH340 Windows驱动程序
打开MobaXterm
打开后如无内容敲击回车,输入用户名及密码
2.3.2. 通过网络
板卡有线网口默认配置为DHCP,接入路由器后需要查到板卡IP地址,方可通过SSH登录板卡。
方法一:通过登录路由器管理界面,查询到开发板IP地址
方法二:通过USB Console串口发命令查询开发板IP地址
#查看网卡IP地址
ifconfig
打开MobaXterm,输入查询到的IP地址
输入用户名及密码
3. IP地址配置
3.1. 临时配置IP地址
#将eth1网卡IP地址设置为192.168.124.22 即时生效
ifconfig eth1 192.168.124.22
3.2. 永久配置静态IP
#修改/etc/network/interfaces.d/eth1
vi /etc/network/interfaces.d/eth1
allow-hotplug eth1 #表示让系统在启动时自动识别并激活loopback(回环)接口
iface eth1 inet static #用于指定需要固定IP的网卡
address 192.168.124.22 #address用于指定需要固定的IP地址
gateway 192.168.124.1 #gateway用于指定网关
netmask 255.255.255.0 #用于设置IP地址子网掩码的命令,其中指定了子网掩码为255.255.255.0
#生效配置文件
reboot
4. 文件传输
在开发过程中经常需要开发板与PC机互传文件,这推荐使用SSH登录连接进行文件传输,传输工具有MobaXterm、Bitvise SSH Client(效率高)
下载链接: MobaXterm Bitvise SSH Client
4.1. MobaXterm
使用MobaXterm通过网络登录即可进行文件传输
4.2. Bitvise SSH Client
填写对应的IP地址,点击Log in后输入用户名及密码即可。
5. 查看板卡信息
5.1. 查看磁盘信息
#查看分区占用情况
fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 29.13 GiB, 31272730624 bytes, 61079552 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: AB6F3888-569A-4926-9668-80941DCB40BC
Device Start End Sectors Size Type
/dev/mmcblk0p1 73728 106495 32768 16M Microsoft basic data
/dev/mmcblk0p2 106496 139263 32768 16M Microsoft basic data
/dev/mmcblk0p3 139264 270335 131072 64M Microsoft basic data
/dev/mmcblk0p4 270336 14950399 14680064 7G Microsoft basic data
/dev/mmcblk0p5 14950400 61079518 46129119 22G Microsoft basic data
5.2. 查看分区占用情况
#查看分区占用情况
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mmcblk0p4 6.9G 1.1G 5.6G 16% /
/dev/mmcblk0p5 22G 24K 21G 1% /mmcp5
tmpfs 977M 0 977M 0% /dev/shm
tmpfs 391M 6.1M 385M 2% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 196M 4.0K 196M 1% /run/user/0
5.3. 查看CPU内存占用情况
#查看CPU内存占用情况
htop
1[ 0.0%] Load average: 0.01 0.07 0.07
2[ 0.0%] Uptime: 00:10:54
3[#* 1.7%]
Mem[|||#** 157M/1.91G]
Swp[ 0K/0K]
PID USER PRI NI VIRT RES SHR S CPU%▽MEM% TIME+ Command
837 root 20 0 4856 3400 2720 R 1.3 0.2 0:00.60 htop
1 root 20 0 162M 10268 7392 S 0.0 0.5 0:07.26 /init
281 root 19 -1 20228 8044 6996 S 0.0 0.4 0:00.95 /lib/systemd/sy
305 root 20 0 22452 6100 4000 S 0.0 0.3 0:01.74 /lib/systemd/sy
306 systemd-r 20 0 25224 11532 7376 S 0.0 0.6 0:01.66 /lib/systemd/sy
307 systemd-t 20 0 88732 3868 3088 S 0.0 0.2 0:00.84 /lib/systemd/sy
332 systemd-t 20 0 88732 3868 3088 S 0.0 0.2 0:00.41 /lib/systemd/sy
343 avahi 20 0 7952 3160 2816 S 0.0 0.2 0:00.07 avahi-daemon: r
346 messagebu 20 0 9100 4412 3604 S 0.0 0.2 0:00.92 @dbus-daemon --
347 root 20 0 251M 16928 13940 S 0.0 0.8 0:01.43 /usr/sbin/Netwo
350 root 20 0 37680 21108 10340 S 0.0 1.1 0:01.02 /usr/bin/python
356 root 20 0 228M 6604 5860 S 0.0 0.3 0:00.08 /usr/libexec/po
359 syslog 20 0 216M 4428 3616 S 0.0 0.2 0:00.16 /usr/sbin/rsysl
365 root 20 0 23840 6540 5696 S 0.0 0.3 0:00.35 /lib/systemd/sy
5.4. 查看主控温度
#查看主控温度
cat /sys/class/thermal/thermal_zone0/temp
48743 #48.743℃
5.5. 查看主控频率
系统默认的CPU调控器是 ondemand,CPU会按需调整频率。通过调节CPU频率可以达到降低发热量、降低功耗、提高性能的目的。
常见调控器 |
说明 |
|---|---|
ondemand |
按需调整频率 |
powersave |
始终使用最低频率 |
performance |
始终使用最高频率 |
conservative |
类似 ondemand,但频率调整更平缓 |
#查看实时CPU主频
cat /sys/devices/system/cpu/*/cpufreq/scaling_cur_freq
1512000
1512000
1512000
1512000
5.6. 查看主控序列号
#查看主控序列号(sunxi_chipid and sunxi_serial)
cat /sys/class/sunxi_info/sys_info
sunxi_platform : sun50iw9
sunxi_secure : normal
sunxi_chipid : 338020000c00480801029b1818651f12
sunxi_serial : 18651f1201029b1800000c0000000000
sunxi_chiptype : 00002000
sunxi_batchno : 0x2
5.7. 查看内核版本
#查看内核版本
uname -a
Linux ds-hx1x 5.4.125 #4 SMP Sun Dec 29 21:35:46 CST 2024 aarch64 aarch64 aarch64 GNU/Linux
6. GPIO控制
6.1. GPIO端口号
每个GPIO端口都通过编号来标识,这些编号对应于硬件上的具体引脚。 在硬件设计中,每个GPIO引脚都可能被分组到不同的端口,例如GPIOH、GPIOG等,简称PH、PG。每个端口可以包含多个引脚,而每个引脚的功能可以通过软件进行配置和控制。
GPIO总数: 55 Pin
H618 GPIO分组与编号对应表:
分组号 |
GPIO号 |
|---|---|
PHO |
224 |
PH1 |
225 |
PH2 |
226 |
PH3 |
227 |
PH4 |
228 |
PH5 |
229 |
PH6 |
230 |
PH7 |
231 |
PH8 |
232 |
PH9 |
233 |
PH10 |
234 |
PG0 |
192 |
PG1 |
193 |
PG2 |
194 |
PG3 |
195 |
PG4 |
196 |
PG5 |
197 |
PG6 |
198 |
PG7 |
199 |
PG8 |
200 |
PG9 |
201 |
PG10 |
202 |
PG11 |
203 |
PG12 |
204 |
PG13 |
205 |
PG14 |
206 |
PG15 |
207 |
PG16 |
208 |
PG17 |
209 |
PG18 |
210 |
PG19 |
211 |
PIO |
256 |
PI1 |
257 |
PI2 |
258 |
PI3 |
259 |
PI4 |
260 |
PI5 |
261 |
PI6 |
262 |
PI7 |
263 |
PI8 |
264 |
PI9 |
265 |
PI10 |
266 |
PI11 |
267 |
PI12 |
268 |
PI13 |
269 |
PI14 |
270 |
PI15 |
271 |
PI16 |
272 |
PF0 |
160 |
PF1 |
161 |
PF2 |
162 |
PF3 |
163 |
PF4 |
164 |
PF5 |
165 |
PF6 |
166 |
6.2. 通过sysfs方式控制GPIO(/sys/class/gpio)
6.2.1 导出GPIO端口
在开始控制GPIO之前,需要先将其导出到用户空间,这可以通过写入特定的GPIO编号到export文件实现。例如,要导出GPIO272,可以使用以下命令:
echo 272 > /sys/class/gpio/export
执行此命令后,系统会在/sys/class/gpio目录下创建一个名为gpio272的新目录。
6.2.2 设置GPIO端口的方向
每个GPIO端口可以被配置为输入或输出模式。设置方向是通过写入direction文件完成的:
输出模式:将out写入到direction文件。 输入模式:将in写入到direction文件。 例如:
要将GPIO272设置为输出模式,可以使用以下命令:
echo out > /sys/class/gpio/gpio272/direction
要将GPIO272设置为输入模式,可以使用以下命令:
echo in> /sys/class/gpio/gpio272/direction
6.2.3 读写GPIO值
读取GPIO272值:
cat /sys/class/gpio/gpio272/value
设置GPIO272输出高电平:
echo 1 > /sys/class/gpio/gpio272/value
7. WIFI连接
板载TL8800D8SC 2.4G/5.8G双频WIFI模组,使用前需接好双频天线。
7.1. 使用nmcli命令连接WIFI
nmcli 是 NetworkManager 的命令行工具,用于管理网络连接和设备。它提供了丰富的功能来配置、监控和控制网络连接。以下是 nmcli 的详细使用说明和一些常见操作示例。
7.1.1. 查看设备状态:
nmcli device status
7.1.2. 扫描 Wi-Fi 网络
nmcli device wifi list
7.1.3. 连接 Wi-Fi 网络
nmcli device wifi connect <SSID> password <密码>
例如:
nmcli device wifi connect MyWiFi password 12345678
7.1.4. 断开 Wi-Fi 连接
nmcli device disconnect <设备名>
例如:
nmcli device disconnect wlan0
7.1.5. 查看当前连接状态
nmcli connection show
该命令显示所有网络连接及其状态。
7.1.6. 启用/禁用 Wi-Fi
启用 Wi-Fi:
nmcli radio wifi on
禁用 Wi-Fi:
nmcli radio wifi off
7.1.7. 删除保存的 Wi-Fi 配置
nmcli connection delete <连接名>
将 <连接名> 替换为要删除的 Wi-Fi 配置名称。例如:
nmcli connection delete MyWiFi
7.1.8. 设置静态 IP 地址
nmcli connection modify <连接名> ipv4.method manual ipv4.addresses <IP地址/子网掩码> ipv4.gateway <网关> ipv4.dns <DNS服务器>
nmcli connection up <连接名>
将 <连接名>、<IP地址/子网掩码>、<网关> 和 <DNS服务器> 替换为实际值。例如:
nmcli connection modify MyWiFi ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns 8.8.8.8
nmcli connection up MyWiFi
7.1.9. 设置 DHCP
nmcli connection modify <连接名> ipv4.method auto
nmcli connection up <连接名>
将 <连接名> 替换为 Wi-Fi 连接名称。例如:
nmcli connection modify MyWiFi ipv4.method auto
nmcli connection up MyWiFi
8. 4G上网
板载CAT.1 4G模组,默认以USB RNDIS模式上网,使用前需接好4G天线、插上SIM卡。
这里使用的4G模组为移远EC801E
8.1. 打开4G模组电源
根据查看开发板底板原理图得知,4G模组电源控制引脚为PG11,对应编号 203,高电平关闭4G模组电源,低电平打开4G模组电源。
8.1.1 导出GPIO端口并设置为输出模式
#导出GPIO端口
echo 203 > /sys/class/gpio/export
#设置GPIO端口的方向
echo out > /sys/class/gpio/gpio203/direction
#注意:以上两行命令已在/etc/rc.local中添加,开机后会自动执行一次。
8.1.2 打开4G模组电源
echo 0 > /sys/class/gpio/gpio203/value
#注意:以上命令可添加在/etc/rc.local,实现开机自动执行。
8.1.3 关闭4G模组电源
echo 1 > /sys/class/gpio/gpio203/value
8.1.4 拨号(执行2遍)
echo -e "AT+qnetdevctl=3,1,1\r\n" > /dev/ttyUSB2
8.2. 查看4G模组连接状态
ifconfig
可见系统已经识别到了4G网卡并获取IP地址:
8.3. 查看SIM卡ICCID
#查SIM卡ICCID命令
echo -e "ATE0\r\n" > /dev/ttyUSB2
cat /dev/ttyUSB2 &
echo -e "AT+CCID\r" > /dev/ttyUSB2
89123456789012345678 #SIM卡ICCID
OK
8.4. 查看信号值
#查SIM卡信号命令
echo -e "ATE0\r\n">/dev/ttyUSB2
cat /dev/ttyUSB2 &
echo -e "AT+CSQ\r\n">/dev/ttyUSB2
+CSQ: 31,0
OK
8.5. 测试网速
#下载文件测速
wget https://dldir1.qq.com/qqfile/qq/QQNT/Linux/QQ_3.2.15_250110_arm64_01.deb
--2025-01-13 15:31:28-- https://dldir1.qq.com/qqfile/qq/QQNT/Linux/QQ_3.2.15_250110_arm64_01.deb
Resolving dldir1.qq.com (dldir1.qq.com)... 58.250.112.138, 27.39.76.57, 120.84.14.56, ...
Connecting to dldir1.qq.com (dldir1.qq.com)|58.250.112.138|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 153545720 (146M) [application/octet-stream]
Saving to: ‘QQ_3.2.15_250110_arm64_01.deb’
4%[ ] 6.95M 1.13MB/s eta 2m 27s
9. UART通信
9.1. 硬件6路UART接口说明
核心板硬件接口最多支持6路UART,其中UART1、UART2、UART3、UART4支持4线流控模式。
固件默认打开UART2、UART3、UART4接口,无流控模式,处于空闲状态可以直接使用。
注意:
1、如果需要同时使用6路UART接口需要做设备树修改。
2、使用115200以上波特率请联系技术支持。
UART编号 |
默认状态描述 |
系统接口名 |
引脚号(TX/RX) |
|---|---|---|---|
uart0 |
调试口 |
/dev/ttyS0 |
PH0 / PH1 |
uart1 |
对接蓝牙模块(不接蓝牙可使用) |
/dev/ttyS1 |
PG6 / PG7 |
uart2 |
空闲 |
/dev/ttyS2 |
PI5 / PI6 |
uart3 |
空闲 |
/dev/ttyS3 |
PI9 / PI10 |
uart4 |
空闲 |
/dev/ttyS4 |
PI13 / PI14 |
uart5 |
网口指示灯占用(不接网口灯可使用) |
/dev/ttyS5 |
PH2 / PH3 |
9.2. 串口收发测试
使用uart转USB工具对接开发板,测试开发板与PC机数据收发。这里以uart2为例,对应开发板 TX / RX 引脚:PI5 / PI6
9.2.1. 查看当前串口配置
要查看当前串口uart2的配置,可以使用以下命令:
#查看当前串口配置
stty -F /dev/ttyS2 -a
speed 9600 baud; rows 0; columns 0; line = 0;
这将显示 /dev/ttyS2 的所有当前设置。
9.2.2. 设置串口参数
你可以使用 stty 来设置串口的参数。例如,设置波特率为 9600,数据位为 8,无校验位,1 个停止位:
stty -F /dev/ttyS2 9600 cs8 -cstopb -parenb
9600:设置波特率为 9600。cs8:设置数据位为 8。-cstopb:设置停止位为 1(如果使用cstopb,则停止位为 2)。-parenb:禁用校验位(如果使用parenb,则启用校验位)。
9.2.3. 关闭回显
若您使用的是RS485链路或不需要回显,关闭方法:
stty -F /dev/ttyS2 -echo
9.2.4. 测试串口通信
设置好串口参数后,你可以使用 echo 和 cat 命令来测试串口通信。
发送数据
echo "Hello" > /dev/ttyS2
接收数据
cat /dev/ttyS2
10. CAN通信
这里描述如何使用MCP2515模块实现CAN通信。
10.1. 硬件连接
PH5(SPI1_CS0) — CS
PH6(SPI1_CLK) — SCK
PH7(SPI1_MOSI) — SI
PH8(SPI1_MOSO) — SO
PI0 — INT
VCC — 5V
GND — GND
10.2. 设备树添加MCP2515设备节点
在SDK源码中找到对应的设备树文件(/root/longan-h618/device/config/chips/h618/configs/.../linux-5.4/board.dts)
然后在SPI1接口下注释掉其他设备并添加MCP2515设备
&spi1 {
spi_slave_mode = <0>;
pinctrl-names = "default", "sleep";
pinctrl-0 = <&spi1_pins_a &spi1_pins_b>;
clock-frequency = <10000000>;
status = "okay";
/*
spi_board1@0 {
device_type = "spi_board1";
compatible = "rohm,dh2228fv";
spi-max-frequency = <0x5f5e100>;
reg = <0x0>;
spi-rx-bus-width = <0x1>;
spi-tx-bus-width = <0x1>;
status = "okay";
};*/
mcp2515: can@0 {
compatible = "microchip,mcp2515";
spi-max-frequency = <10000000>;
reg = <0x0>;
spi-cpol;
spi-cpha;
poll_mode = <0>;
enable_dma = <1>;
interrupt-parent = <&pio>;
interrupts = <8 0 IRQ_TYPE_EDGE_FALLING>;
clocks = <&mcp2515_osc>;
pinctrl-names = "default";
pinctrl-0 = <&mcp2515_int_pin>;
status = "okay";
};
};
在根节点下添加mcp2515时钟
mcp2515_osc: oscillator {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <16000000>;
};
配置引脚复用
mcp2515_int_pin: mcp2515_int_pin@0 {
allwinner,pins = "PI0";
allwinner,pname = "mcp2515_int";
allwinner,function = "irq";
allwinner,muxsel = <7>;
allwinner,drive = <2>;
allwinner,pull = <1>;
};
10.3. 内核配置添加MCP2515驱动
在SDK目录下,进入内核配置界面,执行命令如下
1、 cd /root/longan-h618
2、 ./build.sh menuconfig
在配置界面根据以下目录找到MCP2515的驱动配置
[*] Networking support --->
<*>CAN bus subsystem support ---> //默认关闭,需要标记星号后才有下面的目录
CAN Device Drivers --->
CAN SPI interfaces --->
<*> Microchip MCP251x SPI CAN controllers
配置后记得保存,然后就可以编译并打包SDK生成固件,烧录到开发板后,执行如下命令,
ifconfig -a
出现can0就证明驱动添加成功
10.4. 烧写修改后的固件并安装can-utils
#登录板子执行
apt update
apt install can-utils -y
10.5. 验证can功能
# 1. 测试环回通信
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 500000 loopback on
sudo ip link set can0 up
candump can0 &
sleep 2
cansend can0 123#AABBCCDDEEFF
sleep 2
pkill candump
# 2. 恢复普通模式
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 500000 loopback off
sudo ip link set can0 up
出现接收到数据就证明can功能验证成功
11. 视频硬解码
概述
vdecoderDemo 是一个硬件加速的视频播放器demo,支持 MP4/H264/H265 格式,可以直接播放到 framebuffer。
如需播放其他格式,需修改vdecoderDemo 代码。
基本用法
vdecoderdemo <视频文件>
支持的格式
MP4 文件:
.mp4,.MP4,.mov,.MOV原始 H264 流:
.h264,.264原始 H265 流:
.h265,.265,.hevc
使用示例
1. 播放 MP4 文件
vdecoderdemo /root/1.mp4
vdecoderdemo /root/output.mp4
2. 播放原始 H264 流
vdecoderdemo /root/output.h264
功能特性
显示功能
✅ 硬件加速解码(H.264/H.265)
✅ 原始分辨率显示(左上角对齐)
✅ 自动裁剪超出屏幕的视频
✅ 支持 YV12 和 NV12 格式
✅ 支持 32/24/16 bpp framebuffer
播放控制
✅ 自动循环播放
✅ 终端进度条显示(MP4 文件)
显示格式:
[==================================================] 100% 00:05:30 / 00:05:30实时更新当前播放时间和总时长
每秒更新一次
12. 视频硬编码
概述
vencoderDemo 是一个硬件加速的视频编码器,支持 H.264/H.265/JPEG 编码,可以将 YUV 格式的视频编码为 H.264/H.265 流。
如需编码其他格式,需修改vencoderDemo 代码。
使用方法
基本用法
demoVencoder -enc_num <编码器数量> -i <输入YUV文件> -o <输出文件> \
-s <分辨率> -f <编码格式> -n <编码帧数>
必需参数
-enc_num/--encoder num:编码器数量(1-5)-i/--input:输入 YUV 文件路径-o/--output:输出文件路径-s/--srcsize:源视频分辨率(如1920x1080或1080)-f/--encode_format:编码格式0:H.2641:JPEG3:H.2655:ISP
-n/--encode_frame_num:编码帧数
可选参数
-l/--logfile:日志文件路径(推荐使用,避免错误)-b/--bitrate:码率(kbps)-d/--dstsize:目标分辨率(如1920x1080)-q/--frequency:视频引擎频率-qp_min/--qp min:最小 QP 值-qp_max/--qp max:最大 QP 值-h/--help:显示帮助信息
使用示例
示例 1:H.264 编码
demoVencoder -enc_num 1 -i /root/test.yuv -o /tmp/output.h264 \
-s 1920x1080 -f 0 -n 30 -l /tmp/venc.log
参数说明:
-enc_num 1:使用 1 个编码器-i /root/test.yuv:输入 YUV 文件-o /tmp/output.h264:输出 H.264 文件-s 1920x1080:源分辨率 1920x1080-f 0:H.264 编码-n 30:编码 30 帧-l /tmp/venc.log:日志文件
示例 2:H.265 编码
demoVencoder -enc_num 1 -i /root/test.yuv -o /tmp/output.h265 \
-s 1920x1080 -f 3 -n 30 -l /tmp/venc.log
注意:H.265 编码在某些系统上可能不稳定,建议先测试 H.264。
示例 3:JPEG 编码
demoVencoder -enc_num 1 -i /root/test.yuv -o /tmp/output.jpg \
-s 1920x1080 -f 1 -n 1 -l /tmp/venc.log
示例 4:指定码率
demoVencoder -enc_num 1 -i /root/test.yuv -o /tmp/output.h264 \
-s 1920x1080 -f 0 -n 30 -b 5000 -l /tmp/venc.log
参数说明:
-b 5000:码率 5000 kbps(5 Mbps)
示例 5:分辨率缩放
demoVencoder -enc_num 1 -i /root/test.yuv -o /tmp/output.h264 \
-s 1920x1080 -d 1280x720 -f 0 -n 30 -l /tmp/venc.log
参数说明:
-s 1920x1080:源分辨率-d 1280x720:目标分辨率(编码输出)
13. 看门狗
H618内部支持看门狗功能,默认超时时间为16秒,超时不喂狗则主控芯片强制重启。
喂狗:
echo 1 > /dev/watchdog0
关闭看门狗:
printf 'V' > /dev/watchdog0
14. 编译Ubuntu22.04固件
14.1. 下载解压源码包
14.1.1. 将源码包下载到虚拟机/root/目录下(使用网盘里面的ubuntu22.04虚拟机)
14.1.2. 执行 tar -zxvf longan-h618-2024-12-30.tar.gz #这里改成对应的SDK包文件名
14.1.3. 解压得出/root/longan-h618目录
14.2. 配置
14.2.1. 执行 cd /root/longan-h618/ 进入目录
14.2.2. 执行 ./build.sh config 输入 1 1 0 0 0
14.3. 解压根文件
14.3.1. 执行 cd /root/longan-h618/rootfile/ 进入目录
14.3.1. 执行 rm -rf rootfs 删除老文件
14.3.2. 执行 tar -zxvf rootfs-ds-hx1x-server-2024-12-30.tar.gz 解压 #这里改成对应的rootfs包名
如果要编译桌面版,则执行 tar -zxvf rootfs-ds-hx1x-desktop-2024-12-30.tar.gz
14.3.3. 根文件系统目录:/root/longan-h618/rootfile/rootfs/
14.4. 往根文件系统增加软件包(如不需要添加则跳过)
14.4.1. cd /root/longan-h618/rootfile/ #进入目录,这是系统的根目录,增删文件都会打包进固件
14.4.2. ./ch-mount.sh -m rootfs/ #进入仿真运行环境,使用apt命令,根据需要增加包
14.4.3. rm /etc/first #删除首次启动标志位
14.4.4. exit #退出仿真环境
14.4.5. ./ch-mount.sh -u rootfs/ #取消挂载根文件
14.5. 如需修改内核配置,执行(如不需要则跳过)
14.5.1. cd /root/longan-h618/ 进入目录
14.5.2. 加载默认内核配置./build.sh loadconfig
14.5.3. 修改内核配置./build.sh menuconfig
14.5.4. 保存当前配置为默认内核配置文件./build.sh saveconfig
14.6. 编译固件
14.6.1 执行 cd /root/longan-h618/ 进入目录
14.6.2 执行./build.sh 编译SDK,会自动编译内核、设备树、打包根文件系统
14.6.3 执行./build.sh pack 生成固件,
固件目录:/root/longan-h618/out/h618_dragonboard_p1_uart0.img
14.7.设备树修改
#板级设备树
/root/longan-h618/device/config/chips/h618/configs/.../linux-5.4/board.dts
#SoC级设备树
/root/longan-h618/kernel/linux-5.4/arch/arm64/boot/dts/sunxi/sun50iw9.dtsi
修改之后执行./build.sh
重新执行./build.sh pack打包固件
14.8.单独编译内核
14.8.1. ./build.sh kernel
14.8.2. 重新执行./build.sh pack打包固件
14.9.单独编译u-boot
14.9.1. ./build.sh bootloader
14.9.2. 重新执行./build.sh pack打包固件
14.10.修改系统分区大小
系统分区大小由SDK内的分区配置文件决定,路径如下:
longan-h618/device/config/chips/h618/configs/p1/dragonboard/sys_partition.fex
[partition]
name = rootfs #表示rootfs分区
size = 14680064 #表示7GB,也就是0.5GB = 1048576, 如果要设置为27.5GB则改为57671680
#必须以0.5GB为步进修改。
downloadfile = "rootfs.fex"
user_type = 0xc1000
15.制作量产镜像
简述:在项目中,调好样机后,通常需要将样机的系统复制到其他新板子中,有以下2种方法:
①使用本文档 【14.4. 往根文件系统增加软件包】 ,在编译固件的时候通过仿真,安装好需要的软件包、复制好需要的文件到文件系统目录,然后打包成固件,通过USB批量刷入。
②复制样机EMMC系统中的所有文件,放到SDK打包成新固件。
15.1.复制EMMC系统做成量产固件
15.1.1. 准备一张32GB内存卡、读卡器、开发板
15.1.2. 开发板安装布置好需要的软件、程序,以制作量产镜像
15.1.3. 使用win32diskimager烧录镜像 【 Armbian-unofficial_24.11.0-trunk_Dsdz-h618_jammy_current_6.6.44_minimal.img 】 到SD卡
15.1.4. 通过USB Console串口连接开发板
15.1.5. 将SD卡插入开发板,按下复位键,开发板会从SD卡启动,输入账户root/root登录系统
15.1.5.复制EMMC系统文件
#挂载EMMC rootfs
cd /
mkdir /rootfs
mount /dev/mmcblk2p4 /rootfs/
#注:/dev/mmcblk2p4 是rootfs的分区,如果调整过分区顺序这里要相应调整。
#备份EMMC rootfs 文件
tar -cvf /rootfs-emmc-bk.tar /rootfs/
#将复制好的文件/rootfs-emmc-bk.tar通过SSH网络连接复制到SDK 的 longan-h618/rootfile/目录下
15.1.6.将复制的系统打包成USB刷机固件
#进入SDK 目录 /root/longan-h618/
cd /root/longan-h618/rootfile/
#删除原有的文件系统
rm -rf rootfs
#解压rootfs-emmc-bk.tar
tar -xvf rootfs-emmc-bk.tar
#删除首次启动标志位
rm rootfs/etc/first
#制作量产固件
重新执行本文 【14.6. 编译固件】步骤
16. 在线更新
在线更新u-boot分区
在SDK目录(编译后产生) out/boot-resource.fex 这个文件是u-boot内核分区数据,我们需要将他复制到板子上面,然后在板子执行:
sync
dd if=boot-resource.fex of=/dev/mmcblk0p0 bs=4M conv=fsync
sync
reboot
在线更新设备树/内核分区
在SDK目录(编译后产生) out/pack_out/boot.fex 这个文件是boot内核分区数据,我们需要将他复制到板子上面,然后在板子执行:
sync
dd if=boot.fex of=/dev/mmcblk0p3 bs=4M conv=fsync
sync
reboot
重启后,再查看内核编译日期,已经是新的了。
root@ds-hx1x:~# uname -a
Linux ds-hx1x 5.4.125 #2 SMP Fri Jan 23 16:54:36 CST 2026 aarch64 aarch64 aarch64 GNU/Linux