保姆级教程:在立创庐山派K230上,用RT-Smart大核点亮RGB LED(附完整代码与NFS部署)
保姆级教程在立创庐山派K230上用RT-Smart大核点亮RGB LED附完整代码与NFS部署第一次拿到庐山派K230开发板时面对LinuxRT-Smart双系统环境很多嵌入式新手都会感到无从下手。本文将带你从零开始一步步完成RGB LED的点亮过程不仅提供完整代码还会详细解释每个步骤背后的原理让你真正理解而不仅仅是照搬操作。1. 开发环境准备在开始之前我们需要确保开发环境配置正确。庐山派K230开发板采用双核设计大核运行RT-Smart实时操作系统小核运行Linux系统。这种架构既能处理复杂任务又能保证实时性要求高的操作。硬件准备清单庐山派K230开发板USB转串口调试工具网线用于NFS挂载RGB LED模块或使用板载LED软件环境配置主机系统Windows 11 VMware虚拟机虚拟机系统Ubuntu 20.04 LTS开发工具链K230 SDK包含RT-Smart编译环境提示建议使用Ubuntu 20.04 LTS作为开发环境避免因系统版本差异导致的兼容性问题。2. 代码编写与修改RT-Smart的例程通常存放在k230_sdk/src/big/mpp/userapps/sample目录下。我们将基于sample_gpio工程进行修改而不是从头创建新工程这样可以节省配置时间。2.1 GPIO控制原理庐山派K230的GPIO控制通过设备文件/dev/gpio实现使用ioctl系统调用进行配置和操作。每个GPIO引脚都可以设置为输入或输出模式输出模式下可以控制高低电平。#include stdio.h #include stdlib.h #include fcntl.h #include unistd.h #include sys/ioctl.h #define KD_GPIO_HIGH 1 #define KD_GPIO_LOW 0 // GPIO控制命令定义 #define GPIO_DM_OUTPUT _IOW(G, 0, int) #define GPIO_WRITE_HIGH _IOW(G, 5, int) #define GPIO_WRITE_LOW _IOW(G, 4, int) typedef struct kd_pin_mode { unsigned short pin; // 引脚编号 unsigned short mode; // 模式或电平状态 } pin_mode_t;2.2 RGB LED控制代码庐山派K230开发板上的RGB LED通常连接在特定GPIO引脚上。以下是完整的LED控制代码// 立创庐山派K230的RGB LED引脚定义 #define RGB_LED_PIN_RED 62 #define RGB_LED_PIN_GREEN 20 #define RGB_LED_PIN_BLUE 63 void set_led_color(int fd, int r, int g, int b) { pin_mode_t led_red {RGB_LED_PIN_RED, r}; pin_mode_t led_green {RGB_LED_PIN_GREEN, g}; pin_mode_t led_blue {RGB_LED_PIN_BLUE, b}; ioctl(fd, GPIO_WRITE_HIGH, led_red); ioctl(fd, GPIO_WRITE_HIGH, led_green); ioctl(fd, GPIO_WRITE_HIGH, led_blue); } int main(void) { int gpio_fd open(/dev/gpio, O_RDWR); if (gpio_fd 0) { perror(Failed to open /dev/gpio); return -1; } // 设置GPIO为输出模式 pin_mode_t mode {0, GPIO_DM_OUTPUT}; ioctl(gpio_fd, GPIO_DM_OUTPUT, mode); // RGB LED颜色循环演示 while(1) { set_led_color(gpio_fd, 1, 0, 0); // 红色 sleep(1); set_led_color(gpio_fd, 0, 1, 0); // 绿色 sleep(1); set_led_color(gpio_fd, 0, 0, 1); // 蓝色 sleep(1); } close(gpio_fd); return 0; }3. 编译环境配置与Makefile修改3.1 环境变量设置在编译前需要设置RT-Smart的编译环境变量cd k230_sdk/src/big/mpp source build_env.sh这个脚本会设置交叉编译工具链路径和其他必要的环境变量。3.2 Makefile调整默认的Makefile输出路径可能不适合我们的开发环境需要进行以下修改# 修改前 # BIN $(MPP_SRC_DIR)/userapps/sample/elf/$(CURRECT_DIR_NAME).elf # 修改后 BIN $(MPP_SRC_DIR)/userapps/sample/$(CURRECT_DIR_NAME)/$(CURRECT_DIR_NAME).elf这样修改后编译生成的ELF文件会直接输出到当前工程目录方便后续操作。4. NFS部署与程序运行使用NFS网络文件系统可以极大简化开发过程中的文件传输工作。下面是详细的NFS配置和使用步骤。4.1 NFS服务器配置在Ubuntu主机上配置NFS共享目录sudo apt install nfs-kernel-server sudo mkdir -p /home/k230/Desktop/k230_sdk/my_nfs sudo chmod 777 /home/k230/Desktop/k230_sdk/my_nfs sudo echo /home/k230/Desktop/k230_sdk/my_nfs *(rw,sync,no_subtree_check) /etc/exports sudo exportfs -a sudo service nfs-kernel-server restart4.2 自动拷贝脚本创建一个自动拷贝脚本cp_file_to_nfs.sh在编译完成后自动将程序拷贝到NFS共享目录#!/bin/bash echo -- Copy sample_gpio to NFS directory app_file./sample_gpio.elf to_file/home/k230/Desktop/k230_sdk/my_nfs/sample_gpio.elf cp $app_file $to_file echo -- Copy completed记得给脚本添加执行权限chmod x cp_file_to_nfs.sh4.3 开发板挂载NFS在开发板的Linux系统中挂载NFS共享目录mkdir -p /mnt/nfs mount -t nfs 主机IP:/home/k230/Desktop/k230_sdk/my_nfs /mnt/nfs -o nolock4.4 程序运行步骤将程序从NFS目录拷贝到共享目录cp /mnt/nfs/sample_gpio.elf /sharefs/app/my_sample_gpio.elf在RT-Smart终端中首先退出默认程序q进入程序目录并运行cd /sharefs/app ./my_sample_gpio.elf5. 常见问题与调试技巧在实际操作过程中可能会遇到各种问题。以下是几个常见问题及其解决方法问题1无法打开/dev/gpio设备检查RT-Smart系统中是否存在该设备文件确认程序运行权限是否足够问题2LED不亮确认GPIO引脚定义是否正确使用万用表测量引脚电压检查LED连接方式共阴/共阳问题3NFS挂载失败检查主机和开发板网络连接确认NFS服务器配置正确尝试关闭防火墙临时测试对于更复杂的调试可以使用printf输出调试信息或者通过串口调试工具查看系统日志。