野火i.mx 6ull上手

目录

屏幕驱动打印信息

实现触摸屏校验

开发板连接WIFI

连接操作

申请路由器动态IP和ping网络通断

WiFi信息保存位置

常用wifi操作(wpa_cli工具)

NFS网络文件系统共享

虚拟机安装NFS服务器

开发板安装NFS客户端

控制开发板

找出硬件设备所对应的设备节点文件

找出驱动程序规定的设备文件使用方式

硬件命令行控制

文件管理控制硬件

LED灯

蜂鸣器

按键输入检测


屏幕驱动打印信息

root权限echo "1 4 1 7" > /proc/sys/kernel/printk       或

sudo sh -c "sudo echo "1 4 1 7" > /proc/sys/kernel/printk

实现触摸屏校验

第一次进入Linux系统时,会出现触摸校验提示,按提示校准5个点就可以了。

如果想重新校验,需进入root权限执行操作

rm /etc/pointercal(删除校准文件)

reboot(重启开发板)

此时就可以重新校验触摸屏了。

开发板连接WIFI

SD卡和WIFI共用同一SDIO接口(需注意跳线帽的连接),cat /etc/issue可查看镜像(不同镜像fire-config不一样)。

连接操作

终端输入sudo fire-config(打开野火配置工具),选择Network--WiFi config--Onboard Enable/Disable the on board WiFi of npi-Pro board--Enable--Finish--Yes(重启)。

重启完毕后,重新终端输入sudo fire-config,选择Network--WiFi config--WiFi scan。然后选择WiFi,输入名称、密码。返回首页,选择Finish。

终端输入sudo ifconfig查看网络连接状态。

申请路由器动态IP和ping网络通断

udhcpc -b -i wlan0

ping www.baidu.com

WiFi信息保存位置

打开WiFI账号密码配置文件:sudo vim /etc/wpa_supplicant/wpa_supplicant.conf

常用wifi操作(wpa_cli工具)

sudo ifconfig wlan0 down:关闭wifi

sudo ifconfig wlan0 up:启动wifi

wpa_cli -i wlan0 status:查看当前连接状态

wpa_cli -i wlan0 list_networks:列出输入过的网络

wpa_cli -i wlan0 disconnect AP1:断开当前连接AP1名Wifi 

wpa_cli -i wlan0 reconnect AP1:重新连接AP1名Wifi或其他 

wpa_cli -i wlan0 select_network AP2:切换连接list_networks里的AP2名Wifi 

wpa_cli -i wlan0 remove_network AP2:删除不用的AP1名Wifi(删除前需断开) 

wpa_cli -i wlan0 save_config:保存配置(如执行完上诉删除操作,需要执行保存,否则重启后重新使用上次配置)

NFS网络文件系统共享

虚拟机安装NFS服务器

更新软件列表:sudo apt-get update

安装NFS服务器:sudo apt-get install nfs-kernel-server -y(安装完成后会生成/etc/exports文件)

创建共享文件夹:sudo mkdir -p /home/couvrir/桌面/sharedir

打开/etc/exports添加配置信息:/home/couvrir/桌面/sharedir *(rw,sync,no_root_squash)

更新exports配置:sudo exportfs -arv

查看NFS共享情况:showmount -e

*代表所有网段的主机都能够访问(读写权限,同步,root权限)。同步是指对文件夹进行读写时,它是实时地写入到磁盘里,不会一直存在于缓冲区。no_root_squash是指root用户具有挂在目录的全部操作权限。

开发板安装NFS客户端

更新软件列表:sudo apt-get update

安装NFS客户端:sudo apt-get install nfs-common -y

查看NFS服务器共享文件夹目录:showmount -e "NFS服务器IP"

挂载NFS文件系统:sudo mount -t nfs "NFS服务器IP":/home/couvrir/桌面/sharedir /mnt

控制开发板

找出硬件设备所对应的设备节点文件

/dev目录:对驱动程序熟悉的工程师可以使用,一个设备节点文件控制硬件全部特性。

/sys目录:业余程序员使用,一个设备节点文件只控制硬件的一个特性。严格来说,它的文件是Linux内核导出到用户空间的硬件操作接口。

找出驱动程序规定的设备文件使用方式

Linux系统引脚编号规则(针对i.MX 6ull):(组号 - 1)* 32 + 组内引脚编码。例如GPIO1_19,组号为1,组内引脚编码为19,所以GPIO1_19在Linux内核的引脚编号为19。

/sys/class/gpio/export:导出GPIO子系统硬件操作接口。

/sys/class/gpio/gpio19/direction:控制芯片引脚的输入输出模式。in--输入,out--输出。

/sys/class/gpio/gpio19/value:控制芯片引脚的输出电平。1--高电平,0--低电平。

硬件命令行控制

sudo sh -c 'sudo echo 255 > /sys/class/leds/blue/brightness:调蓝色LED至最亮

sudo sh -c 'sudo echo 0 > /sys/class/leds/blue/brightness:调蓝色LED至最暗

sudo echo 19 > /sys/class/gpio/export

sudo sh -c "sudo echo out > /sys/class/gpio/gpio19/direction"

sudo sh -c "sudo echo 1 > /sys/class/gpio/gpi19/value"

文件管理控制硬件

LED灯

led.c文件

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>//ARM 开发板LED设备的路径
#define RLED_DEV_PATH "/sys/class/leds/red/brightness"
#define GLED_DEV_PATH "/sys/class/leds/green/brightness"
#define BLED_DEV_PATH "/sys/class/leds/blue/brightness"int main(int argc, char* argv[])
{int red_fd, green_fd, blue_fd;int res = 0;printf("This is the led demo\n");//获取红灯的设备文件描述符red_fd = open(RLED_DEV_PATH, O_WRONLY);if(r_fd < 0){printf("Fail to Open %s device\n", RLED_DEV_PATH);exit(1);}//获取绿灯的设备文件描述符green_fd = open(GLED_DEV_PATH, O_WRONLY);if(r_fd < 0){printf("Fail to Open %s device\n", GLED_DEV_PATH);exit(1);}//获取蓝灯的设备文件描述符blue_fd = open(BLED_DEV_PATH, O_WRONLY);if(r_fd < 0){printf("Fail to Open %s device\n", BLED_DEV_PATH);exit(1);}while(1){write(red_fd, "255", 3);sleep(1);write(red_fd, "0", 1);write(green_fd, "255", 3);sleep(1);write(green_fd, "0", 1);write(blue_fd, "255", 3);sleep(1);write(blue_fd, "0", 1);}
}

蜂鸣器

beep.h文件

#ifndef _BSP_BEEP_H
#define _BSP_BEEP_H//蜂鸣器的GPIO引脚号
//i.mx 6ull 计算方式:GPIOn_IOx = (n-1)*32 + x
//如GPIO1_IO19 = (1-1)*32 + 19 = 19
#define BEEP_GPIO_INDEX "19"/*** @brief 初始化蜂鸣器GPIO* @return*      @arg 0:正常*      @arg 1:export文件打开错误*      @arg 2:direction文件打开错误**/
extern int beep_init(void);/*** @brief 关闭蜂鸣器GPIO的export输出* @return*      @arg  0:正常*      @arg !0:value文件打开错误**/
extern int beep_deinit(void);/*** @brief 蜂鸣器响* @return*      @arg  0:正常*      @arg !0:value文件打开错误**/
extern int beep_on(void);/*** @brief 关闭蜂鸣器GPIO的export输出* @return*      @arg  0:正常*      @arg !0:unexport文件打开错误**/
extern int beep_off(void);#endif

beep.c文件

#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include "../include/beep.h"int beep_init(void)
{int fd;char gpio_path_direction[40] = {0};/*******************索引配置********************/fd = open("/sys/class/gpio/export", O_WRONLY);if(fd < 0)return 1;write(fd, BEEP_GPIO_INDEX, strlen(BEEP_GPIO_INDEX));close(fd);/*******************索引配置********************//*******************方向配置********************/sprintf(gpio_path_direction, "/sys/class/gpio/gpio%d/direction", BEEP_GPIO_INDEX);fd = open(gpio_path_direction, O_WRONLY);if(fd < 0)return 2;write(fd, "out", strlen("out"));close(fd);/*******************方向配置********************/return 0;
}int beep_deinit(void)
{int fd;fd = open("/sys/class/gpio/unexport", O_WRONLY);if(fd < 0)return 1;write(fd, BEEP_GPIO_INDEX, strlen(BEEP_GPIO_INDEX));close(fd);return 0;
}int beep_on(void)
{int fd;char gpio_value[40] = {0};sprintf(gpio_value, "/sys/class/gpio/gpio%d/value", BEEP_GPIO_INDEX);fd = open(gpio_value, O_WRONLY);if(fd < 0)return 1;write(fd, "1", 1);close(fd);
}int beep_off(void)
{int fd;char gpio_value[40] = {0};sprintf(gpio_value, "/sys/class/gpio/gpio%d/value", BEEP_GPIO_INDEX);fd = open(gpio_value, O_WRONLY);if(fd < 0)return 1;write(fd, "0", 1);close(fd);rerurn 0;
}

main.c文件

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include "../include/beep.h"int main(int argc, char* argv[])
{int res = 0;char buf[10];printf("This is the beep demo\n");res = beep_init();if(res){printf("beep init error, code = %d\n", res);return 0;}while(1){printf("please input the value: 0--off 1--on q--exit\n");scanf("%10s", buf);switch(buf[0]){case '0':beep_off();break;case '1':beep_on();break;case 'q':beep_deinit();printf("Exit\n");return 0;default:break;}}
}

按键输入检测

key按键的设备文件:/dev/input/by-path/platform-gpio-keys-event

struct input_event

{

  struct timeval time;  //记录输入事件的时间戳

  __u16 type;     //记录输入事件的类型,比如按键输入、坐标输入、特殊类型(EV_SYN,同步事件,提醒我们及时处理已经发生的完成输入事件)

  __u16 code;     //记录输入类型的具体事件代号,比如键盘发生按键输入类型事件时,记录键盘哪个值被按下

  __s32 value;     //记录事件的具体值,比如按键输入类型事件里,1--按键被按下,0--按键被弹起

};

input子系统:按键、键盘、鼠标、触摸屏等。

main.c文件

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <linux/input.h>
#include <linux/input-event-codes.h>//开发板的KEY按键,请根据实际情况修改
const char default_path[] = "/dev/input/by-path/platform-gpio-keys-event";int main(int argc, char* argv[])
{int fd;struct input_event event;char *path;printf("This is a input device demo\n");//若无输入参数则使用默认事件设备if(argc > 1 )path = argv[1];elsepath = (char *)default_path;fd = open(path, O_RDONLY);if(fd < 0){printf("Fail to open device:%s\n", path);exit(1);}printf("Test device:%s\n", input);while(1){if( read(fd, &event, sizeof(event)) == sizeof(event)){//EV_SYN是事件分隔标志,不打印if(event.type != EV_SYN){printf("Event:time %ld.%ld,type %d,code %d,value %d\n",event.time.tv_sec, event.time.tv_usec,event.type,event.code,event.value);}}}close(fd);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/43944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言实现贷款计算器

等额本金&#xff0c;等额本息数学推导:贷款 买房&#xff0c;利息怎么算&#xff1f;不要被忽悠了&#xff01;李永乐老师讲等额本金和等额本息 一个心血来潮的研究&#xff0c;避免以后买房被坑。 捣鼓了半天才发现原来支付宝的那个利率是年利率不是月利率&#xff0c;坑了…

驱动开发——字符设备

字符设备 Linux 将系统设备分为&#xff1a;字符设备、块设备、网络设备。工作原理 字符设备是 Linux 驱动中最基本的一类设备驱动&#xff0c;字符设备就是一个一个字节&#xff0c; 按照字节流进行读写操作的设备&#xff0c;读写数据是分先后顺序的。在Linux的世界里面一切…

如何修复损坏的DOC和DOCX格式Word文件?

我们日常办公中&#xff0c;经常用到Word文档。但是有时会遇到word文件损坏、无法打开的情况。这时该怎么办&#xff1f;接着往下看&#xff0c;小编在这里就给大家带来最简单的Word文件修复方法&#xff01; 很多时候DOC和DOCX Word文件会无缘无故的损坏无法打开&#xff0c;一…

【福建事业单位-综合基础知识】03行政法

【福建事业单位-综合基础知识】03行政法 1.行政法概述&#xff08;原则重点&#xff09;行政主体范围 行政行为总结 二.行政处罚2.1行政处罚的种类总结 行政法框架 1.行政法概述&#xff08;原则重点&#xff09; 行政法的首要原则是合法&#xff1b;自由裁量——合理行政&…

SSM——用户、角色、权限操作

1. 数据库与表结构 1.1 用户表 1.1.1 用户表信息描述 users 1.1.2 sql语句 CREATE TABLE users( id varchar2(32) default SYS_GUID() PRIMARY KEY, email VARCHAR2(50) UNIQUE NOT NULL, username VARCHAR2(50), PASSWORD VARCHAR2(50), phoneNum VARCHAR2(20), STATUS INT…

i18n 配置vue项目中英文语言包(中英文转化)

一、实现效果 二、下载插件创建文件夹 2.1 下载cookie来存储 npm install --save js-cookienpm i vue-i18n -S 2.2 封装组件多页面应用 2.3 创建配置语言包字段 三、示例代码 3.1 main.js 引用 i18n.js import i18n from ./lang// 实现语言切换:i18n处理element&#xff0c…

Unity ARFoundation 配置工程 (Android)

注意&#xff1a; 1、AR Core是Google的产品&#xff0c;因为谷歌制裁华为&#xff0c;所以 有些 华为机可能不支持AR Core的软件&#xff1b; 2、手机在设置里搜索Google Play&#xff0c;看看是否已经安装上了&#xff0c;如果没有装此服务&#xff0c;去商城里搜索Google Pl…

互联网发展历程:跨越远方,路由器的启示

互联网的蓬勃发展&#xff0c;一直在追求更广阔的连接&#xff0c;更遥远的距离。然而&#xff0c;在早期的网络中&#xff0c;人们面临着连接距离有限的问题。一项重要的技术应运而生&#xff0c;那就是“路由器”。 连接受限的问题&#xff1a;距离有限 早期的网络受限于直接…

微服务-Nacos(注册中心)

Nacos是SpringCloud的一个功能非常强大的组件&#xff0c;想比eureka的功能更加丰富 官方的nacos简介 Nacos&#xff08;全称&#xff1a;Naming and Configuration Service&#xff09;是一个开源的动态服务发现、配置管理和服务管理平台。它由阿里巴巴集团开发并贡献给开源…

【设计模式——学习笔记】23种设计模式——策略模式Strategy(原理讲解+应用场景介绍+案例介绍+Java代码实现)

文章目录 案例引入传统方案实现实现分析 介绍基本介绍登场角色 案例实现案例一类图实现 案例二类图实现问答 策略模式在JDK源码中的使用总结文章说明 案例引入 有各种鸭子&#xff0c;比如野鸭、北京鸭、水鸭等。 鸭子有各种行为&#xff0c;比如走路、叫、飞行等。不同鸭子的…

安防监控视频云存储EasyCVR平台H.265转码功能更新:新增分辨率配置

安防视频集中存储EasyCVR视频监控综合管理平台可以根据不同的场景需求&#xff0c;让平台在内网、专网、VPN、广域网、互联网等各种环境下进行音视频的采集、接入与多端分发。在视频能力上&#xff0c;视频云存储平台EasyCVR可实现视频实时直播、云端录像、视频云存储、视频存储…

C++ string类详解

⭐️ string string 是表示字符串的字符串类&#xff0c;该类的接口与常规容器的接口基本一致&#xff0c;还有一些额外的操作 string 的常规操作&#xff0c;在使用 string 类时&#xff0c;需要使用 #include <string> 以及 using namespace std;。 ✨ 帮助文档&…

【HarmonyOS】服务卡片 API6 JSUI跳转不同页面

【引言】 “JS卡片支持为组件设置action&#xff0c;包括router事件和message事件&#xff0c;其中router事件用于应用跳。若设置router事件&#xff0c;则action属性值为"router"&#xff1b;abilityName为卡片提供方应用的跳转目标Ability名&#xff1b;params中的…

Spring Security6 最新版配置该怎么写,该如何实现动态权限管理

Spring Security 在最近几个版本中配置的写法都有一些变化&#xff0c;很多常见的方法都废弃了&#xff0c;并且将在未来的 Spring Security7 中移除&#xff0c;因此又补充了一些新的内容&#xff0c;重新发一下&#xff0c;供各位使用 Spring Security 的小伙伴们参考。 接下…

LeetCode--HOT100题(33)

目录 题目描述&#xff1a;148. 排序链表&#xff08;中等&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;148. 排序链表&#xff08;中等&#xff09; 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 LeetCode做题链接&#xff1…

VR/AR眼镜方案,MTK联发科平台智能眼镜安卓主板设计方案

随着人工智能在不同领域的逐渐深入&#xff0c;人们对一款产品的需求不再局限于某种单一的功能或单一场景&#xff0c;尤其是在工业医疗等专业领域&#xff0c;加快数字化转型才能实现产业的升级。 AR智能眼镜&#xff0c;是一个可以让现场作业更智能的综合管控设备。采用移动…

Hlang--用Python写个编程语言-函数与基本数据结构实现

文章目录 前言语法表述解析器修改词法解析函数节点函数节点解析List的解析实现解释器节点函数操作String和List处理总结前言 okey,经过一段时间的努力,接下来要实现的是函数。当然还有对应的基本数据结构,那么之后的话,我们的工作就开始进一步转换了。 那么在这块我们要实…

vscode搭建java开发环境

一、配置extensions环境变量VSCODE_EXTENSIONS 该环境变量路径下的存放安装组件&#xff1a; 二、setting配置文件 {"java.jdt.ls.java.home": "e:\\software\\jdk\\jdk17",// java运行环境"java.configuration.runtimes": [{"name":…

vscode远程连接Linux失败,提示过程试图写入的管道不存在(三种解决办法)

vscode报错如下&#xff1a; 一、第一种情况 原因是本地的known_hosts文件记录服务器信息与现服务器的信息冲突了&#xff0c;导致连接失败。 解决方案就是把本地的known_hosts的原服务器信息全部删掉&#xff0c;然后重新连接。 二、第二种情况 在编写配置文件config时&…

批量提取文件名到excel,详细的提取步骤

如何批量提取文件名到excel&#xff1f;我们的电脑中可能存储着数量非常多的电子文件&#xff0c;现在需要快速将这些文件的名称全部提取到Excel中。虽然少量数据可以通过复制粘贴的方式轻松完成&#xff0c;但是对于上万个数据而言&#xff0c;复制粘贴都是行不通的&#xff0…