泰山派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

学习使人快乐!

音乐使人愉悦!

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

相关推荐
STER labo9 小时前
mysql配置环境变量——(‘mysql‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件解决办法)
数据库·mysql·adb
sjmaysee13 小时前
CentOS7安装Mysql5.7(ARM64架构)
adb·架构
AtOR CUES1 天前
MySQL——表操作及查询
android·mysql·adb
mOok ONSC1 天前
mysql9.0windows安装
windows·adb
xxjj998a1 天前
Laravel8.x核心特性详解
数据库·mysql·adb
TeDi TIVE1 天前
Linux下MySQL的简单使用
linux·mysql·adb
TeDi TIVE1 天前
MySQL四种备份表的方式
mysql·adb·oracle
rleS IONS1 天前
Linux系统离线部署MySQL详细教程(带每步骤图文教程)
linux·mysql·adb
计算机安禾2 天前
【Linux从入门到精通】第40篇:LAMP/LNMP环境一键部署脚本实战
android·linux·adb
xxjj998a2 天前
Laravel7.x核心特性全解析
数据库·mysql·adb