# 背景:
- 硬件平台:龙芯久久派
- 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 : >im2_pin_m1 :&gpa5 8 8 = gpio88 //PWM 出 控制2路电机 转速
- >im3_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 .
安装必要的工具
- 工程根目录的 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)
- 修改工程中有 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 文件
.......
- 在开发板上的移植:将文件 夹 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 | dir_motor0 | 8 | GPIO43 | beep默认高电平 key | ||||
| 9 | GPIO72 | dir_motor1 | 10 | GPIO42 | key | ||||
| 11 | GPIO75 | dir_encoder3 | 12 | GPIO45 | UART2_TX | 扩展 uart 和 key | |||
| 13 | GPIO74 | dir_encoder2 | 14 | GPIO44 | UART2_RX | 扩展 uart 和 key | |||
| 15 | GPIO50 | I |
RES | 16 | GPIO48 | I2C_SCL0 | 连接MPU6050 | ||
| 17 | GPIO51 | DC | 18 | GPIO49 | I2C_SDA0 | MPU6050 | |||
| 19 | GND | 20 | GND | ||||||
| 21 | GPIO64 | PWM0 | 连接LCD默认91% | 22 | GPIO60 | SPI1_CLK | |||
| 23 | GPIO67 | PWM3 | encoder3 | 24 | GPIO63 | SPI1_CS | |||
| 25 | GPIO65 | PWM1 | 舵机1 默认0% | 26 | GPIO61 | SPI1_MISO | |||
| 27 | GPIO66 | 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文件,文件复制完成后,要用这个命令装一下。重启后不需要此命令

