RDKX5

一、使用串口

RDK X5 在 40PIN 上默认使能 UART1,物理管脚号 8 和 10,IO电压 3.3V。

接入 USB串口转接板

开发板USB Type A接口(接口7),支持USB串口转接板功能,可自动检测USB串口转接板接入并创建设备节点/dev/ttyUSB*或者/dev/ttyACM*(星号代表0开始的数字)。

二、测试过程

运行 python3 /app/40pin_samples/test_serial.py
从打印的串口设备(其中 /dev/ttyS0 是系统调试口,不建议对它进行测试,除非你完全明白它的作用)中选择总线号和片选号作为输入选项,例如 RDK X3 选择测试 /dev/ttyS3,RDK X5 选择测试 /dev/ttyS1,RDK Ultra 选择测试 /dev/ttyS2 按回车键确认,并输入波特率参数:

List of enabled UART:
/dev/ttyS0 /dev/ttyS1 /dev/ttyS3 /dev/ttyUSB0

请输出需要测试的串口设备名:/dev/ttyS3
请输入波特率(9600,19200,38400,57600,115200,921600):921600
Serial<id=0x7f819dcac0, open=True>(port='/dev/ttyS3', baudrate=921600, bytesize=8, parity='N', stopbits=1, timeout=1, xonxoff=False, rtscts=False, dsrdtr=False)
  • 程序正确运行起来后会持续打印Send: AA55Recv: AA55
Starting demo now! Press CTRL+C to exit
Send: AA55
Recv: AA55

三、测试完整代码

#!/usr/bin/env python3

import sys
import signal
import os
import time

# 导入python串口库
import serial
import serial.tools.list_ports

def signal_handler(signal, frame):
sys.exit(0)

def serialTest():
print("List of enabled UART:")
os.system('ls /dev/tty[a-zA-Z]*')
uart_dev= input("请输出需要测试的串口设备名:")

baudrate = input("请输入波特率(9600,19200,38400,57600,115200,921600):")
try:
ser = serial.Serial(uart_dev, int(baudrate), timeout=1) # 1s timeout
except Exception as e:
print("open serial failed!\n")

print(ser)

print("Starting demo now! Press CTRL+C to exit")

while True:
test_data = "AA55"
write_num = ser.write(test_data.encode('UTF-8'))
print("Send: ", test_data)

received_data = ser.read(write_num).decode('UTF-8')
print("Recv: ", received_data)

time.sleep(1)

ser.close()
return 0


if __name__ == '__main__':
signal.signal(signal.SIGINT, signal_handler)
if serialTest() != 0:
print("Serial test failed!")
else:
print("Serial test success!")

四、开机自启动

程序开机自启动1. 设置自启动Service2. 添加到rc.local服务

1. 设置自启动Service

  1. 创建启动脚本

    使用任何文本编辑器,在/etc/init.d目录下创建一个新的启动脚本,假设命名为your_script_name,以下是示例脚本的参考内容:

    #!/bin/bash

    ### BEGIN INIT INFO
    # Provides: your_service_name
    # Required-Start: $all
    # Required-Stop:
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    # Short-Description: Start your_service_name at boot time
    # Description: Enable service provided by your_service_name
    ### END INIT INFO

    /path/to/your/program &

    exit 0

  2. 设置启动脚本具有可执行权限

    sudo chmod +x /etc/init.d/your_script_name
  3. 使用update-rc.d命令将脚本添加到系统的启动项中

    sudo update-rc.d your_script_name defaults
  4. 使用systemctl命令启用自启动

    sudo systemctl enable your_script_name
  5. 重启开发板验证自启动服务程序是否运行正常

    systemctl status your_script_name.service

    2. 添加到rc.local服务

    rc.local是一个系统服务,用于在系统启动时自动执行一些脚本或命令。这个服务在系统启动时会被自动调用,并在系统启动完成后执行一些用户指定的脚本或命令,以便在系统启动时进行自定义配置或操作。

    在早期的Linux发行版中,rc.local是系统启动过程中默认运行的最后一个服务。随着systemd的普及,rc.local被视为遗留的系统服务。

    通过在sudo vim /etc/rc.local文件末尾添加启动命令的方式实现,例如:

    #!/bin/bash -e
    #
    # rc.local
    #re
    # This script is executed at the end of each multiuser runlevel.
    # Make sure that the script will "exit 0" on success or any other
    # value on error.
    #
    # In order to enable or disable this script just change the execution
    # bits.
    #
    # By default this script does nothing.

    # Insert what you need

    exit 0