资讯动态

工业一体机Ubuntu系统部署与GPIO驱动配置实战

发布时间:2026/8/25 21:59:29 来源:尧图企业网站定制
工业一体机是集成了显示、触控和工业通信接口的嵌入式计算平台在Linux环境下部署时需要处理硬件驱动、GPIO配置和串口通信等多个底层问题。本文记录在RK3568平台上部署Ubuntu 22.04并配置GPIO和串口驱动的完整过程。最近拿到一台RK3568的工业一体机预装的是安卓系统项目需求是跑Ubuntu加一套Python采集程序。中间踩了不少坑把过程整理出来给后面要做类似部署的人参考。**系统烧写**RK3568的Ubuntu镜像用RKDevTool烧写。先装好USB驱动进入MaskROM模式短接主板上的测试点后上电然后加载分区表和镜像文件。烧写的时候注意一个坑loader和uboot的版本要跟镜像匹配不然烧完起不来。我从厂家拿到的SDK里带了对应的loader直接用就行。烧完重启如果屏幕显示正常、触摸有反应基本就成功了。如果触摸没反应大概率是触摸驱动没编进内核后面单独处理。**GPIO配置**RK3568的GPIO在Linux下通过sysfs或者libgpiod来控制。我这边用的是libgpiod比sysfs灵活一些。先装依赖bashsudo apt updatesudo apt install libgpiod-dev libgpiod2 gpiod查看可用的GPIO chipbashgpiodetect输出大概是gpiochip0 [gpio0] (32 lines)gpiochip1 [gpio1] (32 lines)gpiochip2 [gpio2] (32 lines)gpiochip3 [gpio3] (32 lines)然后查看某个chip的引脚状态bashgpioinfo gpiochip3找到你要用的那根引脚比如gpiochip3的第18脚。在设备树里这个引脚需要配置为GPIO功能不能被其他外设占用。设备树修改这部分比较繁琐。RK3568的设备树在SDK的kernel目录下找到对应的板级dts文件把要用的引脚配置成gpio功能dtsgpio3 {status okay;};/* 在pinctrl节点里释放该引脚 */pinctrl {gpio3b18 {gpio3b18_gpio: gpio3b18-gpio {rockchip,pins 3 RK_PB6 0 pcfg_pull_none;};};};改完设备树重新编译内核和dtb烧进去之后用libgpiod测试bash# 设置为输出并拉高gpioset gpiochip3 181# 设置为输出并拉低gpioset gpiochip3 180# 读取输入状态gpioget gpiochip3 18**串口配置**工业一体机上的串口通常是RS232和RS485在Linux下映射为ttyS设备。先确认串口节点bashls /dev/ttyS*| 串口设备 | 对应硬件 | 用途 ||---------|---------|------|| /dev/ttyS0 | 调试串口 | 系统调试 || /dev/ttyS1 | RS232 | 外设通信 || /dev/ttyS2 | RS485 | 总线通信 || /dev/ttyS3 | RS232 | 备用串口 |用stty设置串口参数bashstty -F /dev/ttyS2 9600 cs8 -cstopb -parenb测试串口通信用pyserialpythonimport serialimport timeser serial.Serial(port/dev/ttyS2,baudrate9600,bytesizeserial.EIGHTBITS,parityserial.PARITY_NONE,stopbitsserial.STOPBITS_ONE,timeout1)# RS485需要控制收发方向# 如果硬件有自动方向控制直接收发即可ser.write(b\x01\x03\x00\x00\x00\x01\x84\x0A)time.sleep(0.1)response ser.read(32)print(f收到: {response.hex()})ser.close()RS485的方向控制是个坑。有的板子硬件上做了自动收发切换软件层不用管有的需要手动用GPIO控制DE/RE引脚。如果是手动控制在发送前拉高DE引脚发完拉低切回接收模式pythonimport gpiodchip gpiod.Chip(gpiochip3)line chip.get_line(18)line.request(consumerrs485_de, typegpiod.LINE_REQ_DIR_OUT)# 发送前拉高DEline.set_value(1)ser.write(data)# 等待发送完成while ser.out_waiting 0:time.sleep(0.001)# 切回接收line.set_value(0)**触摸屏校准**如果烧完系统触摸偏移或者不灵敏用ts_calibrate校准bashsudo apt install tslib libts-binsudo ts_calibrate电容屏一般不需要校准电阻屏建议跑一遍。校准完把tslib的环境变量配好或者直接写入udev规则让触摸设备走tslib。**开发环境搭建**最后装Python环境和依赖bashsudo apt install python3-pippip3 install pyserial gpiod RPi.GPIO modbus-tk注意RK3568上RPi.GPIO不能用GPIO操作走libgpiod的Python绑定就行bashpip3 install gpiod整个部署过程的核心难点在设备树的GPIO引脚配置和RS485方向控制。这两块搞定了后面的应用层开发就比较顺了。**常见问题FAQ****QRK3568平台上Ubuntu系统烧写后触摸无反应怎么排查**A首先用dmesg查看触摸设备是否被内核识别检查是否存在gt911或ft5x06等触摸芯片的驱动加载信息。如果驱动未编译进内核需要修改设备树启用对应触摸芯片节点重新编译内核和dtb后烧写。也可以通过lsusb或查看/sys/class/input确认触摸设备节点是否存在。**QRS485通信中出现数据丢失或乱码怎么解决**A首先检查波特率和数据格式是否与从设备一致用示波器观察信号波形质量。确认RS485方向控制是否正确——发送前拉高DE引脚发送完成后及时拉低切回接收模式。方向切换的时序很关键拉低过早会导致最后一字节截断过晚会影响接收。建议在发送完成后等待最后一个字节完全移位完成再拉低DE。**Qlibgpiod和sysfs两种GPIO控制方式有什么区别**Alibgpiod是Linux内核4.8以后引入的新GPIO字符设备接口支持多线程并发访问同一芯片的不同引脚性能更好且是官方推荐方式。sysfs方式通过/sys/class/gpio导出引脚存在并发冲突风险且已被标记为废弃。新项目建议使用libgpiod旧项目如果内核版本低于4.8则只能用sysfs。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价