泰山派GPIO编译 ADB下载 万用表测量GPIO电压
文章目录
- 前言
- 一、安装ADB
- 1.下载ADB工具包
- 2.下载之后解压,放到没有中文 路径的地方,添加电脑环境变量,就可以在任意地方CMD 开启ADB
- 3.连接上电路板,板子的USB和电脑的usb相互联通,查看设备管理器
- 4.命令测试ADB和板子通信情况,输入 adb shell
- 5.$和# 符号的区别
- 6.echo 是什么指令
- 二、使用步骤
- 0.安装samba
- 0.1 测试smaba
- 0.2映射到Win10 Win11
- 1.从虚拟机将文件发送到 pc上
- 2.将文件从电脑复制到设备
- 三、编译gpio
- 3.1参考链接
- 3.2编写代码
- 3.3 ubuntu编译->传到电脑->传到开发板->指令开发板程序运行
- 3.4 用万用表测量GPIO引脚
- 总结
前言
提示:这里可以添加本文要记录的大概内容:
项目需要:
提示:以下是本篇文章正文内容,下面案例可供参考
一、安装ADB
1.下载ADB工具包
索性下载所有的工具包
资料路径:
https://wiki.lckfb.com/zh-hans/tspi-rk3566/download-center.html
网盘路径:
https://pan.baidu.com/s/1HtnpytCBBqBOqZi8mfV4VQ?pwd=qcxx#list/path=%2F%E7%AB%8B%E5%88%9B%C2%B7%E6%B3%B0%E5%B1%B1%E6%B4%BE%E5%BC%80%E5%8F%91%E6%9D%BF%E8%B5%84%E6%96%99&parentPath=%2F
2.下载之后解压,放到没有中文 路径的地方,添加电脑环境变量,就可以在任意地方CMD 开启ADB
右键
我的电脑 属性
高级设置
环境变量
path
编辑
新建
加入ADB解压路径
测试ADB
点击放大镜输入CMD,输入enter按键
3.连接上电路板,板子的USB和电脑的usb相互联通,查看设备管理器
4.命令测试ADB和板子通信情况,输入 adb shell
进入和板子通讯,就可以通过和板子通讯测试板子的功能
5.$和# 符号的区别
出现 “Permission denied” 错误是因为你当前的用户权限不足以修改 `/sys/class/leds/rgb-led-b/trigger 文件。
在 Linux 系统中,/sys 目录下的文件通常需要 root 权限才能修改。你可以尝试以下方法解决:
- 先获取 root 权限:
su
(如果系统有密码,需要输入 root 密码)
- 然后再执行你的命令:
echo "default-on" > /sys/class/leds/rgb-led-b/trigger
这样应该就能成功修改 LED 触发器的设置了。注意,获取 root 权限需要系统允许(通常需要设备已root),如果你的设备没有开启 root 权限,可能需要先进行相关设置。
6.echo 是什么指令
echo
是一个在 Linux、Unix、Windows 等操作系统的命令行中常用的指令,主要功能是输出指定的文本内容。
它的基本用法很简单,例如:
echo "Hello World"
会在终端显示Hello World
echo 123
会显示123
除了直接输出文本,echo
还有一些常用场景:
- 输出变量值:比如
echo $PATH
可以显示环境变量PATH
的内容 - 向文件写入内容:例如
echo "test" > file.txt
会将 “test” 写入 file.txt(覆盖原有内容) - 配合管道符
|
传递内容:比如echo "hello" | grep "h"
会将 “hello” 作为输入传递给grep
命令
echo
是命令行中最基础、最常用的指令之一,主要用于调试、输出信息或简单的文本处理。
二、使用步骤
测试步骤参考官方例程
https://wiki.lckfb.com/zh-hans/tspi-rk3566/system-usage/buildroot-system-usage.html#adb%E8%B0%83%E8%AF%95%E5%B7%A5%E5%85%B7
Samba搭建
为什么要使用Samba
很简单,其实就是为了把虚拟机ubuntu中的文件目录映射到windows盘符下,这样你就可以和访问windows盘符目录一样去访问ubuntu系统里面的内容。
0.安装samba
安装
sudo apt-get install sambasudo apt-get install smbclient安装完成后执行samba -V
打开虚拟机,新建共享文件夹,并进入要共享的文件夹,获取其路径
看一下目录,打开终端窗口
gan@gan:~/tspi$ pwd
/home/gan/tspi
gan@gan:~/tspi$
修改共享配置文件
sudo vim /etc/samba/smb.conf
写入配置
[EX_DISK_A]comment = share folderbrowseable = yespath = /home/gan/tspivalid users = gan, ganwrite list = gan, ganinherit owner = yesbrowsable = yesadmin users = gan, ganpublic = yeswritable = yescreate mask = 0755read only = Nodirectory mode = 0755
ESC 推出配置文件
输入: :wq Enter 保存退出文件
0.1 测试smaba
设置用户远程访问密码(gan是我的同样也养设置成你自己的)
sudo smbpasswd -a gan
gan@gan:~/tspi$ sudo smbpasswd -a gan
New SMB password:
Retype new SMB password:
Added user gan.
gan@gan:~/tspi$
重启
sudo /etc/init.d/samba restart
或者 前面失败,后面成功
sudo service smbd restart
gan@gan:~/桌面$ sudo /etc/init.d/samba restart
[sudo] gan 的密码:
sudo: /etc/init.d/samba:找不到命令
gan@gan:~/桌面$ sudo service smbd restart
gan@gan:~/桌面$
0.2映射到Win10 Win11
win11 中找到运行 点击
虚拟机ip号查询
ifconfig
gan@gan:~/桌面$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.3.117 netmask 255.255.255.0 broadcast 192.168.3.255inet6 fe80::373f:d9ff:94c7:a370 prefixlen 64 scopeid 0x20<link>ether 00:0c:29:ef:c3:a2 txqueuelen 1000 (以太网)RX packets 3454 bytes 4235790 (4.2 MB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 2125 bytes 208564 (208.5 KB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1000 (本地环回)RX packets 244 bytes 24904 (24.9 KB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 244 bytes 24904 (24.9 KB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
右键选择 映射网路驱动器
点击完成输入 账号和密码
1.从虚拟机将文件发送到 pc上
复制之前写好的.c和cpp编译的文件到共享文件夹中
拷贝文件到tspi文件夹下
在电脑中同步得到文件
2.将文件从电脑复制到设备
这个功能非常实用的在调试设备的时候需要经常传东西,掌握这个命令的使用以后就不要再拿U盘考来考去啦。
adb push
1
在使用"adb push"命令将文件推送到 Android 设备之前,有时需要先执行 remount 操作,以便将设备的文件系统以可写模式挂载。默认情况下,Android 设备的文件系统通常以只读模式挂载,这是为了保护系统的完整性和安全性。这意味着你无法直接向设备的文件系统写入文件或修改系统文件。通过执行 remount 操作,可以将文件系统从只读模式切换为可写模式,允许向设备的文件系统写入文件或修改系统文件。因为执行remount需要root权限所有先执行root在执行remount
#执行root
C:\Users\win>adb root # 通过USB将设备插入电脑,输入该指令
restarting adbd as root #输入指令后自动输出提示
#执行romout
C:\Users\win>adb remount # 继续输入指令 ,出现下面说指令输出ok
Using overlayfs for /system
Using overlayfs for /vendor
Using overlayfs for /odm
Using overlayfs for /product
Using overlayfs for /system_ext
Now reboot your device for settings to take effect
remount succee
“adb push 文件目录 开发板中的目录”
自己测试
PS Z:\> adb push Z:\a.out /data
Z:\a.out: 1 file pushed, 0 skipped. 1.9 MB/s (9296 bytes in 0.005s)
adb: error: failed to copy 'Z:\a.out' to '/data/a.out': remote couldn't create file: Permission denied
PS Z:\> adb root
restarting adbd as root
timeout expired while waiting for device
PS Z:\> adb root
adbd is already running as root
PS Z:\> adb remount
remount succeeded
PS Z:\> adb push Z:\a.out /adb push Z:\a.out /data
Z:\a.out: 1 file pushed, 0 skipped. 1.8 MB/s (9296 bytes in 0.005s)
PS Z:\>
adb push Z:\a.out /data
C:\Users\win>adb push C:\Users\win\Downloads\chrome.apk /data
C:\Users\win\Downloads\chrome.apk: 1 file pushed, 0 skipped. 48.3 MB/s (236058891 bytesin4.661s)
#进入查看是否成功
C:\Users\win>adb shell
rk3566_tspi:/# ls /data/c
cache/ chrome.apk#发现一直存在目录里了
想运行hello world 的结果没得显示
效果
C:\Users\LENOVO>adb shell
rk3566_tspi:/ # chmod +x a
chmod: a: No such file or directory
1|rk3566_tspi:/ # chmod +x /data/a.out
rk3566_tspi:/ # ./data/a.out
/system/bin/sh: ./data/a.out: No such file or directory
1|rk3566_tspi:/ #
换了a.out 也不行
三、编译gpio
3.1参考链接
https://blog.csdn.net/qq_46149198/article/details/135025419?ops_request_misc=elastic_search_misc&request_id=46c59e75facf88842c84a127a8b8b996&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allElasticSearch~search_v2-1-135025419-null-null.142v102pc_search_result_base9&utm_term=%E6%B3%B0%E5%B1%B1%E6%B4%BE%20%E7%82%B9%E4%BA%AELED&spm=1018.2226.3001.4187
3.2编写代码
其中引脚ID是根据控制器(GPIO0),端口(B),索引序号(7)确定的
使用ls /sys/class/gpio可以看见有gpiochip0 gpiochip32 gpiochip64 gpiochip96 gpiochip128分别对应GPIO0-GPIO4
引脚ID的计算公式为:
控制器号32 + 端口号8 + 索引序号*1
所以GPIO0_B7为:32 x 0 + 1 x 8 + 7 x 1 = 15
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>static char gpio_path[100];static int gpio_config(const char *attr, const char *val);int main(int argc, char* argv[])
{int ret;if(argc != 3){fprintf(stderr, "usage:%s <gpio> <value>\n", argv[0]); //若argc 不为3说明给程序传入的参数不足两个,无法执行程序exit(-1);}sprintf(gpio_path, "/sys/class/gpio/gpio%s", argv[1]); //导出的引脚的路径if(access(gpio_path, F_OK)) //access函数:如果文件存在返回0,不存在返回-1{int fd, len;fd = open("/sys/class/gpio/export", O_WRONLY);if(fd < 0){perror("open error");return -1;}len = strlen(argv[1]);if(write(fd, argv[1], len) != len) //write函数第一个参数为要写入的位置,第二个参数为要写入的内容,第三个参数是内容的字节数,如果执行成功返回值为内容的字节数{perror("write error");close(fd);exit(-1);}close(fd);}ret = gpio_config("direction", "out");if(ret != 0){fprintf(stderr, "gpio_config error1");exit(-1);}ret = gpio_config("active_low", "0");if(ret != 0){fprintf(stderr, "gpio_config error2");exit(-1);}ret = gpio_config("value", argv[2]);if(ret != 0){fprintf(stderr, "gpio_config error3");exit(-1);}exit(0);
}static int gpio_config(const char *attr, const char *val)
{char file_path[100];int len, fd;sprintf(file_path, "%s/%s", gpio_path, attr);fd = open(file_path, O_WRONLY);if(fd < 0){perror("open error2");return -1;}len = strlen(val);if(write(fd, val, len) != len){perror("write error2");close(fd);return -1;}close(fd);return 0;
}
3.3 ubuntu编译->传到电脑->传到开发板->指令开发板程序运行
arm-linux-gnueabihf-gcc ./test.c -o test -static
根据自己的文件名编译
arm-linux-gnueabihf-gcc ./led.c -o led -static
C:\Users\LENOVO>adb push Z:\led /data
adb: error: failed to copy 'Z:\led' to '/data/led': remote couldn't create file: Permission denied
Z:\led: 1 file pushed, 0 skipped. 29.7 MB/s (421612 bytes in 0.014s)C:\Users\LENOVO>adb root
restarting adbd as root
timeout expired while waiting for deviceC:\Users\LENOVO>adb root
adb: unable to connect for root: no devices/emulators foundC:\Users\LENOVO>adb root
adb: unable to connect for root: no devices/emulators foundC:\Users\LENOVO>adb root
adbd is already running as rootC:\Users\LENOVO>adb remount
remount succeededC:\Users\LENOVO>adb push Z:\led /data
Z:\led: 1 file pushed, 0 skipped. 18.7 MB/s (421612 bytes in 0.022s)C:\Users\LENOVO>
C:\Users\LENOVO>adb root
adbd is already running as rootC:\Users\LENOVO>adb remount
remount succeededC:\Users\LENOVO>adb push Z:\led /data
Z:\led: 1 file pushed, 0 skipped. 18.7 MB/s (421612 bytes in 0.022s)C:\Users\LENOVO>adb shell
rk3566_tspi:/ # ls
acct bugreports d debug_ramdisk etc linkerconfig mnt proc sdcard system
apex cache data default.prop init lost+found odm product storage system_ext
bin config data_mirror dev init.environ.rc metadata oem res sys vendor
rk3566_tspi:/ # ls /data
a.out app-lib data media ota_package server_configurable_flags user
adb app-private drm mediadrm per_boot ss user_de
anr app-staging gsi misc preloads system vendor
apex backup incremental misc_ce property system_ce vendor_ce
app bootchart led misc_de resource-cache system_de vendor_de
app-asec cache local nfc rollback tombstones
app-ephemeral dalvik-cache lost+found ota rollback-observer unencrypted
rk3566_tspi:/ # cd data
rk3566_tspi:/data # ./led 2 1
/system/bin/sh: ./led: can't execute: Permission denied
126|rk3566_tspi:/data # ./led 0 1
/system/bin/sh: ./led: can't execute: Permission denied
126|rk3566_tspi:/data # chmod +x led
rk3566_tspi:/data # ./led 2 1
重新启动adb
C:\Users\LENOVO>adb shell
rk3566_tspi:/ $ su
rk3566_tspi:/ # ls
acct bugreports d debug_ramdisk etc linkerconfig mnt proc sdcard system
apex cache data default.prop init lost+found odm product storage system_ext
bin config data_mirror dev init.environ.rc metadata oem res sys vendor
rk3566_tspi:/ # cd /data
rk3566_tspi:/data # ./led 0 7
/system/bin/sh: ./led: can't execute: Permission denied
126|rk3566_tspi:/data # chmod +x led
rk3566_tspi:/data # ./led 15 1
rk3566_tspi:/data # ./led 15 0
rk3566_tspi:/data #
3.4 用万用表测量GPIO引脚
总结
完成工作:完整做了一遍 板子里面烧写了buildroot 镜像,指令新建 .c 文件,输入Gpio代码,实现指令交叉编译,开启ssh 实现ubuut 系统和windows系统文件夹共享, 配置ADB实现windows 和泰山派通信,然后将编译的执行文件发送到泰山派 data目录下,然后开启led 执行文件权限,最后运行文件,在对话框输入 指定的Gpio引脚然后输入 0 1 指定高低电平,最后完成测试。 中间遇到很多问题。下一步,考虑到vim编写代码的友好性问题,
下一步:考虑使用vscode 实现windows 远程 控制ubuntu
学习使人快乐!
音乐使人愉悦!
日积月累使人充实和自信!