泰山派GPIO编译 ADB下载 万用表测量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立创·泰山派开发板资料\&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 权限才能修改。你可以尝试以下方法解决:

  1. 先获取 root 权限:
bash 复制代码
su

(如果系统有密码,需要输入 root 密码)

  1. 然后再执行你的命令:
bash 复制代码
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 还有一些常用场景:

  1. 输出变量值:比如 echo $PATH 可以显示环境变量 PATH 的内容
  2. 向文件写入内容:例如 echo "test" > file.txt 会将 "test" 写入 file.txt(覆盖原有内容)
  3. 配合管道符 | 传递内容:比如 echo "hello" | grep "h" 会将 "hello" 作为输入传递给 grep 命令

echo 是命令行中最基础、最常用的指令之一,主要用于调试、输出信息或简单的文本处理。

二、使用步骤

测试步骤参考官方例程

https://wiki.lckfb.com/zh-hans/tspi-rk3566/system-usage/buildroot-system-usage.html#adb调试工具

Samba搭建

为什么要使用Samba

很简单,其实就是为了把虚拟机ubuntu中的文件目录映射到windows盘符下,这样你就可以和访问windows盘符目录一样去访问ubuntu系统里面的内容。

0.安装samba

安装

c 复制代码
sudo apt-get install samba

sudo apt-get install smbclient


安装完成后执行


samba -V

打开虚拟机,新建共享文件夹,并进入要共享的文件夹,获取其路径

看一下目录,打开终端窗口

c 复制代码
gan@gan:~/tspi$ pwd
/home/gan/tspi
gan@gan:~/tspi$ 

修改共享配置文件

c 复制代码
sudo vim /etc/samba/smb.conf

写入配置

c 复制代码
[EX_DISK_A]
   comment = share folder
   browseable = yes
   path = /home/gan/tspi
   valid users = gan, gan
   write list = gan, gan
   inherit owner = yes
   browsable = yes
   admin users = gan, gan
   public = yes
   writable = yes
   create mask = 0755
   read only = No
   directory mode = 0755

ESC 推出配置文件

输入: :wq Enter 保存退出文件

0.1 测试smaba

设置用户远程访问密码(gan是我的同样也养设置成你自己的)

c 复制代码
sudo smbpasswd -a gan
c 复制代码
gan@gan:~/tspi$ sudo smbpasswd -a gan
New SMB password:
Retype new SMB password:
Added user gan.
gan@gan:~/tspi$ 

重启

c 复制代码
sudo /etc/init.d/samba restart

或者 前面失败,后面成功

c 复制代码
sudo service smbd restart
c 复制代码
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

c 复制代码
gan@gan:~/桌面$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.3.117  netmask 255.255.255.0  broadcast 192.168.3.255
        inet6 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 0
        TX packets 2125  bytes 208564 (208.5 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::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 0
        TX 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盘考来考去啦。

c 复制代码
adb push

1

在使用"adb push"命令将文件推送到 Android 设备之前,有时需要先执行 remount 操作,以便将设备的文件系统以可写模式挂载。默认情况下,Android 设备的文件系统通常以只读模式挂载,这是为了保护系统的完整性和安全性。这意味着你无法直接向设备的文件系统写入文件或修改系统文件。通过执行 remount 操作,可以将文件系统从只读模式切换为可写模式,允许向设备的文件系统写入文件或修改系统文件。因为执行remount需要root权限所有先执行root在执行remount

#执行root

c 复制代码
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 文件目录 开发板中的目录"

自己测试

c 复制代码
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:\>
c 复制代码
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 复制代码
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-2~all~ElasticSearch\~search_v2-1-135025419-null-null.142^v102^pc_search_result_base9\&utm_term=泰山派 点亮LED\&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

c 复制代码
#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

c 复制代码
根据自己的文件名编译

arm-linux-gnueabihf-gcc ./led.c -o led -static

c 复制代码
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 device

C:\Users\LENOVO>adb root
adb: unable to connect for root: no devices/emulators found

C:\Users\LENOVO>adb root
adb: unable to connect for root: no devices/emulators found

C:\Users\LENOVO>adb root
adbd is already running as root

C:\Users\LENOVO>adb remount
remount succeeded

C:\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 复制代码
C:\Users\LENOVO>adb root
adbd is already running as root

C:\Users\LENOVO>adb remount
remount succeeded

C:\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 复制代码
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

学习使人快乐!

音乐使人愉悦!

日积月累使人充实和自信!

相关推荐
泰勒疯狂展开21 小时前
Linux研学-MySQL安装
linux·mysql·adb
qq_316837751 天前
win11 使用adb 获取安卓系统日志
android·adb
mykyle1 天前
Canal 1.1.7的安装
网络协议·tcp/ip·adb
Themberfue2 天前
Redis ①⑦-分布式锁
数据库·redis·分布式·adb·缓存
诺浅2 天前
如何恢复mysql,避免被研发删库跑路
android·mysql·adb
吢禅2 天前
MySQL基础02
android·adb
-SOLO-2 天前
使用adb 发送广播 动态改变app内的值
adb
速易达网络2 天前
使用phpstudy极简快速安装mysql
数据库·mysql·adb
爬山算法3 天前
MySQL(147)如何进行跨平台迁移?
数据库·mysql·adb