# 背景:

  1. 硬件平台:龙芯久久派
  • I2C0 : &i2c0_mux_m0: &gpa3 0 1 = gpio48 49 //连接传感器 scl 48 sda 49
  • SPI1 : &spi1_4bit : &gpa3 12 15 = gpio60-63 //LCD2.0显示屏 主控 st7789
  • PWM_atm : &atim3n_pin_m1 :&gpa5 6 6 = gpio86 //PWM 出 在lcd引脚 不用
  • PWM_gtm : &gtim2_pin_m1 :&gpa5 8 8 = gpio88 //PWM 出 控制2路电机 转速
    &gtim3_pin_m1 :&gpa5 8 9 = gpio89
  • PWM0~3 : gpio64~67 //编码器测速
  • uart2: &uart2_2bit_m0 : &gpa2 12 13 = gpio44 45 //连接串口

# 引脚图

GPIO复用为0b00,第一复用为0b01,第二复用为0b10,主功能复用为0b11。若需要在基于2K0300的其他产品中使用该库,请查询数据手册的完整复用表。

2.软件平台:预装loongos

内核添加:gtim atim pwm0~3 spi1 i2c0 uart2 usb免驱摄像头

3.开发平台: vscode

基于 cmake , 进行编译 ;安装cmake工具包。

# 0 首先做的工作

# 1 硬件连接

连接电源 : TypeC

连接网线: PC机 IP: 192.168.1.2

连接串口: 按照 排针接口,连接上usb 转 TTL

[文件已丢失]

# 2 串口控制台查看启动

打开串口工具 mobaxterm, 配置 8 N 0 115200。

正常启动 后提示:

LoongOS login:

输入 root 回车, 进入系统。

# 3 配置IP

输入ifconfig ,查看网络:

修改IP ,注意要将wlan0 卸载

# ifconfig wlan0 down
# ifconfig eth0 192.168.1.3 netmask 255.255.255.0
# route add default gw 192.168.1.1 eth0

硬件上连接网线到PC (IP地址为 192.168.1.10),软件上用mobaxterm ssh 连接到开发板,

# 4 更换内核

用ssh连接捯 192.68.1.3

到 /boot/目录下,更换原来的 vmliuz

# 5 配置wifi 和eth0

# 改 /etc/wpa_supplicant.conf

/etc/wpa_supplicant.conf 配置无线网络信息(用于支持WEP,WPA/WPA2和WAPI无线协议和加密认证)

文件如下 :

root@LoongOS:~# vi  /etc/wpa_supplicant.conf

如果要添加第二网络:

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1

network={
  ssid="T*****"
  psk="1*****"
}

network={
  ssid="c*****"
  psk="C*****"
}

# 修改 /etc/rc.local

/etc/rc.local 这个文件用于启动时添加启动命令

wpa_cli -i wlan0 scan  //搜索网络
wpa_cli -i wlan0 scan_result //显示搜索结果

# 6 搭建开发环境-交叉编译工具安装

到网站:http://ftp.loongnix.cn/toolchain/gcc/release/loongarch/gcc8/ 下载交叉编译工具链

loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.3-1.tar.xz

复制 到 opt目录下解压

$ sudo cp loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.3-1.tar.xz /opt -r
$ cd /opt
$sudo tar -xf loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.3-1.tar.xz
$ sudo chmod -R 755 loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.3-1 

在usr/bin下创建软链接 2k300gcc:

$ cd /usr/bin
$ sudo ln -s /opt/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.3-1/bin/loongarch64-linux-gnu-gcc 2k300gcc

到任何目录下,查看版本

$ 2k300gcc -v

# 7 搭建开发环境-vscode

# 安装

vscode 下载地址 , 安装命令:

sudo dpkg -i code****.deb

启动方法,进入对应文件夹:

code .

安装Ninja

sudo apt-get install -y ninja-build

# 8 安装 opencv库 libserial

将编译后opencv库复制到虚拟机中 linux中 /home/sundm75/opencv/install/lib ,记住此目录

将编译后libserial库复制到虚拟机中 linux中 /home/sundm75/libserial/install/lib ,记住此目录

# 9. 在vscode中使用cmake编译

进入工程文件夹,打开终端,输入命令 code .

安装必要的工具

  1. 工程根目录的 99pi.cmake 文件中 交叉编译器目录
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR loongson)
set(tools /opt/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.3-1/)  #交叉编译器目录
set(CMAKE_C_COMPILER ${tools}/bin/loongarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER ${tools}/bin/loongarch64-linux-gnu-g++)
set(CMAKE_AR ${tools}/bin/loongarch64-linux-gnu-ar)
set(CMAKE_RANLIB ${tools}/bin/loongarch64-linux-gnu-ranlib)

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
  1. 修改工程中有 CmakeList.txt 文件中,标记 opencv 位置的地方, 头文件OpenCV_INCLUDE_DIRS 库文件 opencv_lib_DIR 都是 编译后opencv库在虚拟机中的位置
SET(OpenCV_INCLUDE_DIRS /home/sundm75/opencv/install/include/opencv4 )# 根据自己include目录设置OpenCV的include路径
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/mylib 
                   ${PROJECT_SOURCE_DIR}/inc
                   ${OpenCV_INCLUDE_DIRS}
                    )
......
set(opencv_lib_DIR /home/sundm75/opencv/install/lib)# 根据自己include目录设置OpenCV的lib_DIR路径
link_directories(${opencv_lib_DIR})# 设置库文件路径
file(GLOB CV_LIBRARIES ${opencv_lib_DIR}/*.so) #链接 lib 文件夹下所有的库文件 假设是 .so 文件
.......
  1. 在开发板上的移植:将文件 夹 install 下的所有文件 夹压缩后文件复制到 开发板 /home/root/opencv目录 下 解压

# 1. 应用测试

# 1 helloworld

root@LoongOS:# ./helloworld

# 2 引脚配置

GPIO复用为0b00,第一复用为0b01,第二复用为0b10,主功能复用为0b11。若需要在基于2K0300的其他产品中使用该库,请查询数据手册的完整复用表。

产品中使用该库,请查询数据手册的完整复用表。

引脚号 GPIO复用 功能 引脚号 GPIO复用 功能
1 GND 2 P3V3
3 GPIO88 TIM2_CH2 PWM2 4 GPIO41 UART0_TX
5 GPIO89 TIM2_CH3 PWM3 6 GPIO40 UART0_RX
7 GPIO73 CAN_TX2 dir_motor0 8 GPIO43 UART1_TX beep默认高电平 key
9 GPIO72 CAN_RX2 dir_motor1 10 GPIO42 UART1_RX key
11 GPIO75 CAN_TX3 dir_encoder3 12 GPIO45 UART2_TX 扩展 uart 和 key
13 GPIO74 CAN_RX3 dir_encoder2 14 GPIO44 UART2_RX 扩展 uart 和 key
15 GPIO50 I2C_SCL1 RES 16 GPIO48 I2C_SCL0 连接MPU6050
17 GPIO51 I2C_SDA1 DC 18 GPIO49 I2C_SDA0 MPU6050
19 GND 20 GND
21 GPIO64 SPI2_CLK PWM0 连接LCD默认91% 22 GPIO60 SPI1_CLK
23 GPIO67 SPI2_CS PWM3 encoder3 24 GPIO63 SPI1_CS
25 GPIO65 SPI2_MISO PWM1 舵机1 默认0% 26 GPIO61 SPI1_MISO
27 GPIO66 SPI2_MOSI PWM2 encoder2 28 GPIO62 SPI1_MOSI
29 GND 30 P5V

# 2. 外设测试

# 1. test_pwm_enc 测试

  • 命令行测试 lcd亮度 90% 和 舵机pwm 中位:1.5ms

运行命令:./test_pwm_enc 90 1500

# 2. smartcar 输出测试

命令行测试 电机输出 w前进 s后退 a左转 d右转

运行命令:./smartcar

# 3 OpenCV 测试程序

(opencv_demo1.cpp, opencv_demo2.cpp, opencv_demo3.cpp)

这些程序用于测试 OpenCV 图像处理功能,分别为显示摄像头图像、显示旋转立方体、目标匹配。

# 3 使用Cjson库

1.下载cJSON库文件cJSON库文件一共两个文件:cJSON.h和cJSON.c。

JSON for Modern C++

json for modern c++是一个德国大牛nlohmann写的,该版本的json有以下特点:

1.直观的语法。
2.整个代码由一个头文件组成json.hpp,没有子项目,没有依赖关系,没有复杂的构建系统,使用起来非常方便。
3.使用c++11标准编写。
4.使用json 像使用STL容器一样。
5.STL和json容器之间可以相互转换。

# 4 交叉编译 libserial opencv后安装

# 99 派上修改配置文件 用于opencv库和 libserial库

创建文件夹和文件 /etc/ld.so.conf.d/opencv.conf

文件opencv.conf 中写入: /home/root/opencv/install/lib

创建文件夹和文件 /etc/ld.so.conf.d/libserial.conf

文件opencv.conf 中写入: /home/root/libserial/install/lib

ld.so.conf.d/opencv.conf 文件是 Linux 系统中用于配置动态链接库(shared libraries)搜索路径的文件之一。ld.so.conf.d 目录下的所有 .conf 文件都会被动态链接器 ld.so 读取,以确定在运行时如何查找共享库。

用ldconfig命令 装载 ld.so.cache文件,文件复制完成后,要用这个命令装一下。重启后不需要此命令