评测二、Linux最小系统验证
控制GPIO有3种方式,shell命令、用户态函数或者脚本、内核态函数,详细见https://doc.sophgo.com/cvitek-develop-docs/master/docs_latest_release/CV180x_CV181x/zh/01.software/OSDRV/Peripheral_Driver/build/html/7_GPIO_Operation_Guide.html#id5。
1.shell命令
不妨以GPIOA26为例,外接一上拉电阻和LED。由文档可知XGPIOA组号为480,所以GPIOA26组好值为480+25=506,敲击echo 506 > /sys/class/gpio/export申请资源,稍后就能看到/sys/class/gpio下新建了一gpio506文件,敲击echo out > /sys/class/gpio/gpio506/direction设置方向,敲击echo 0 > /sys/class/gpio/gpio506/value输出0电平,echo 1 > /sys/class/gpio/gpio506/value输出1电平,不停切换就能实现电平切换达到blinky目的:

图1创建设备文件以及配置GPIO方向

图2实际切换效果
2.用户态函数或脚本
上述不用手动输命令太费事,提高效率的方法就是用脚本或函数来作业处理,先touch main.sh,然后vi main.sh用户态脚本可以如下:
#!/bin/sh LED_GPIO=/sys/class/gpio/gpio506 if test -d $LED_GPIO; then echo "GPIOA26 already exported" else echo 506 > /sys/class/gpio/export fi echo out > $LED_GPIO/direction while true; do echo 0 > $LED_GPIO/value sleep 0.5 echo 1 > $LED_GPIO/value sleep 0.5 done
敲击./main.sh执行就能看到效果:

图3 shell脚本作业处理
脚本语法不熟,可以C语言控制:

图4传统C语言控制
但发现没有带gcc编译器,安装发现回到上篇评测的问题了,网络问题没解决暂时无法安装软件,于是Windows主机SDK交叉编译,执行文件上传Milkv,再运行,弊端就是无法调试。首先WSL命令输入:git clone --recursive https://github.com/sophgo/cvi_mmf_sdk,再敲击sudo apt install dialog python3-dev make git bc gcc flex bison ninja-build libssl-dev rsync pkg-config device-tree-compiler squashfs-tools parted dosfstools安装,缺依赖装依赖。然后去https://developer.sophgo.com/site/index/material/32/all.html下载工具链并解压到刚才cvi_mmf_sdk目录下,再敲击source build/cvisetup.sh,此时riscv64-unknown-linux-gnu-gcc还未生效,再敲击defconfig cv1800b_sophpi_duo_sd再输入riscv64-unknown-linux-gnu-gcc –version就能愉快玩耍了:

图5 SDK开发编译环境搭建
再Windows下输入riscv64-unknown-linux-gnu-gcc -static -o blink blink.c交叉编译生成RISC-V环境固件,由于Milkv的外网一直未解决包括Ethernet或WiFi,由于SSH有scp和rsync传输工具,就临时解决了通信问题,输入scp F:ElectronicsMilk-Vcvi_mmf_sdkblink root@192.168.42.1:/mxj,然后Milkv就有可执行文件了:

图6 scp上传执行文件至Milkv
输入chmod +x ./blink,再./blink但一直报错“Segmentation fault”,可能程序问题,因为用网友https://community.milkv.io/t/duo-shell-c/46的例子验证就能成功点灯,不妨本地hello world交叉编译再上传milkv运行发现果然可行:

图7经典hello world
3.内核态函数
这个没测试,待做,第1章节的链接有讲怎么注册进内核并运行
审核编辑:汤梓红
-
Linux
+关注
关注
87文章
11357浏览量
210861 -
开发板
+关注
关注
25文章
5170浏览量
98600 -
最小系统
+关注
关注
9文章
252浏览量
29192 -
RISC-V
+关注
关注
46文章
2346浏览量
46850
发布评论请先 登录
相关推荐
评论