1. 龙芯2K0300开发环境搭建全攻略第一次接触龙芯2K0300开发板时我完全是个Linux小白。记得当时为了搭建开发环境整整折腾了两天。现在回想起来如果能提前知道这些避坑指南至少能节省80%的时间。下面我就把从零开始搭建龙芯2K0300开发环境的完整流程分享给大家。1.1 虚拟机配置避坑指南很多新手在第一步就踩坑了——选择错误的Ubuntu版本。我亲测Ubuntu 22.04会出现各种奇怪问题特别是交叉编译工具链无法正常工作。官方推荐使用Ubuntu 20.04 LTS版本这也是最稳定的选择。安装VMware时有个小技巧不要安装在C盘建议专门新建一个文件夹放在固态硬盘上。处理器配置方面2-4个处理器核心就足够开发使用内存建议分配4GB如果主机配置较低可以降到2GB。网络类型一定要选择NAT模式这是最不容易出问题的配置。提示安装完成后立即创建快照这样后续操作出错时可以快速回滚到初始状态。1.2 系统环境配置实战刚装好的Ubuntu需要做几个关键配置更换清华源默认源下载速度慢且不稳定安装VMware Tools实现主机和虚拟机间的文件共享和剪贴板互通配置共享文件夹方便在Windows和Ubuntu间传输文件更换软件源的具体操作sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup sudo vim /etc/apt/sources.list将文件内容替换为清华源后执行sudo apt update更新软件列表。这里有个细节vim编辑时按ESC进入命令模式输入:%d清空文件再按i进入插入模式粘贴新内容。共享文件夹配置完成后记得修改/etc/fstab文件添加自动挂载.host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other,uid0,gid0,umask022 0 02. 交叉编译环境深度解析2.1 为什么需要交叉编译龙芯2K0300采用loongarch架构与我们常用的x86架构不同。直接在x86电脑上编译的程序无法在龙芯平台上运行这就是交叉编译存在的意义。简单来说交叉编译就是在A架构的机器上生成能在B架构运行的代码。我刚开始不理解这个概念直到用普通gcc编译的程序在开发板上报错才明白。用file命令查看可执行文件属性时x86编译的显示ELF 64-bit LSB shared object, x86-64而交叉编译的应该显示ELF 64-bit LSB shared object, LoongArch。2.2 龙芯工具链安装详解官方提供的工具链是loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.3-1.tar.xz。安装时有个大坑千万不要在共享文件夹内直接解压这会导致文件权限错乱后续编译报各种奇怪错误。正确步骤将压缩包从共享文件夹移动到桌面执行解压命令sudo tar -xvf 文件名.tar.xz将解压后的文件夹移动到/opt目录配置环境变量vim ~/.bashrc # 添加以下内容 export PATH/opt/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.3-1/bin:$PATH source ~/.bashrc测试是否安装成功输入loongarch64后按Tab键如果能自动补全为loongarch64-linux-gnu-gcc等工具名说明配置正确。3. GPIO控制实战从点灯到流水灯3.1 GPIO引脚映射解析龙芯2K0300的GPIO引脚编号与物理位置不是简单对应关系。以83号GPIO为例在原理图中它对应TIM1_CH3功能。查看官方手册《LS2K0300久久派_V1.1_板卡使用手册》第2.3.4节可以找到详细映射关系。LED控制原理很简单开发板上的LED通常是共阳极设计GPIO输出低电平时点亮高电平时熄灭。通过/sys/class/gpio文件系统可以方便地控制GPIOecho 83 /sys/class/gpio/export # 导出GPIO echo out /sys/class/gpio/gpio83/direction # 设为输出模式 echo 0 /sys/class/gpio/gpio83/value # 输出低电平点亮LED3.2 流水灯程序开发我们可以用C语言编写更复杂的控制程序。以下是控制4个LED实现流水灯效果的代码#include stdio.h #include unistd.h #include stdlib.h int main() { // 初始化GPIO 64-67 int gpios[] {64,65,66,67}; for(int i0; i4; i){ char cmd[100]; sprintf(cmd, echo %d /sys/class/gpio/export, gpios[i]); system(cmd); sprintf(cmd, echo out /sys/class/gpio/gpio%d/direction, gpios[i]); system(cmd); } // 流水灯效果 while(1) { for(int i0; i4; i){ system(echo 1 /sys/class/gpio/gpio64/value); system(echo 1 /sys/class/gpio/gpio65/value); system(echo 1 /sys/class/gpio/gpio66/value); system(echo 1 /sys/class/gpio/gpio67/value); sprintf(cmd, echo 0 /sys/class/gpio/gpio%d/value, gpios[i]); system(cmd); sleep(1); } } return 0; }使用交叉编译工具链编译loongarch64-linux-gnu-gcc led_water.c -o led_water4. OpenCV视觉应用开发4.1 搭建Python开发环境在龙芯平台上直接编译OpenCV比较困难推荐使用PythonOpenCV的方案。首先需要安装MinicondaAnaconda的精简版wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh创建专用环境conda create -n opencv python3.8 conda activate opencv pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple4.2 颜色识别算法实现颜色识别主要利用HSV/HSL色彩空间的阈值分割。以下是核心代码片段import cv2 import numpy as np def color_detect(frame): hsv cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # 红色阈值范围 lower_red np.array([0,120,70]) upper_red np.array([10,255,255]) mask1 cv2.inRange(hsv, lower_red, upper_red) lower_red np.array([170,120,70]) upper_red np.array([180,255,255]) mask2 cv2.inRange(hsv, lower_red, upper_red) mask mask1 mask2 result cv2.bitwise_and(frame, frame, maskmask) # 查找轮廓 contours, _ cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) for cnt in contours: area cv2.contourArea(cnt) if area 500: # 过滤小面积噪声 x,y,w,h cv2.boundingRect(cnt) cv2.rectangle(frame,(x,y),(xw,yh),(0,0,255),2) return frame4.3 视频流处理实战将颜色识别应用到摄像头视频流cap cv2.VideoCapture(0) while True: ret, frame cap.read() if not ret: break result color_detect(frame) cv2.imshow(Color Detection, result) if cv2.waitKey(1) 0xFF ord(q): break cap.release() cv2.destroyAllWindows()在实际项目中我发现龙芯2K0300处理640x480的视频流可以达到约15FPS完全能满足基础视觉应用需求。对于更复杂的算法可以考虑降低分辨率或优化代码逻辑。