1. 系统烧录

1.1. 启动方式

ds-h618 支持从EMMC启动、SD卡启动,板卡上电后主控首先尝试从SD卡启动,失败后会从EMMC启动,如果两个方式都失败,就会进入FEL USB刷机模式。

注意:当SD卡烧录过固件,SPL会一直残留在SD卡的开头位置,格式化SD卡也不能清除,如果没有清除SPL,板卡上电后还是会选择SD卡启动SPL,导致不能从EMMC启动。

1.2. 固件介绍

SDK

系统名

固件命名

简要

刷入工具

全志
longan sdk

ubuntu 22.04 server

h618_dragonboard_p1
_uart0-ds-hx1x-server
-xxxx-xx-xx.img

基于全志
官方内核的
无图形桌面系统

Phoenix

全志
longan sdk

ubuntu 22.04 desktop

h618_dragonboard_p1
_uart0-ds-hx1x-desktop
-xxxx-xx-xx.img

基于全志
官方内核的
带xfce桌面系统

Phoenix

1.3. USB烧录系统

1.3.1. 获取USB刷机工具PhoenixSuit

1.3.2. 解压压缩包得出目录

image

1.3.3. 进入目录运行PhoenixSuit.exe

image

1.3.4. 加载固件

image

1.3.5. 打开PC设备管理器

1.3.6. 开发板断电后,按住FEL按钮不放,将USB0接到电脑,此时设备管理器会发现新设备,如果是第一次操作,需要先安装驱动。

image

1.3.7. 安装驱动:右击设备管理器中新发现的设备->更新驱动程序->浏览我的电脑以查找驱动程序->选择刷机工具目录PhoenixSuit_V2.0.0_20230529->下一步->完成。

image

1.3.8. 安装驱动后,开发板断电,按住FEL按钮不放,将USB0接到PC,此时工具提示,选择是开始烧写。

image

1.3.9. 如只需烧写U-BOOT、内核,修改勾选项

image

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驱动程序

image

打开MobaXterm

image

打开后如无内容敲击回车,输入用户名及密码

image image

2.3.2. 通过网络

板卡有线网口默认配置为DHCP,接入路由器后需要查到板卡IP地址,方可通过SSH登录板卡。

方法一:通过登录路由器管理界面,查询到开发板IP地址

方法二:通过USB Console串口发命令查询开发板IP地址

#查看网卡IP地址
ifconfig
image

打开MobaXterm,输入查询到的IP地址

image

输入用户名及密码

image

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通过网络登录即可进行文件传输

image

4.2. Bitvise SSH Client

填写对应的IP地址,点击Log in后输入用户名及密码即可。

image

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地址:

image

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. 测试串口通信

设置好串口参数后,你可以使用 echocat 命令来测试串口通信。

发送数据

echo "Hello" > /dev/ttyS2

接收数据

cat /dev/ttyS2

10. CAN通信

这里描述如何使用MCP2515模块实现CAN通信。

image

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:源视频分辨率(如 1920x10801080

  • -f / --encode_format:编码格式

    • 0:H.264

    • 1:JPEG

    • 3:H.265

    • 5: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卡

image

15.1.4. 通过USB Console串口连接开发板

15.1.5. 将SD卡插入开发板,按下复位键,开发板会从SD卡启动,输入账户root/root登录系统

image

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