野火i.mx 6ull上手

news2024/9/24 15:27:18

目录

屏幕驱动打印信息

实现触摸屏校验

开发板连接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];
        else
                path = (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.coloradmin.cn/o/900413.html

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

相关文章

Debian10: 安装nut服务器(UPS)

UPS说明&#xff1a; UPS的作用就不必讲了&#xff0c;我选择是SANTAKTGBOX-850&#xff0c;规格为 850VA/510W&#xff0c;可以满足所需&#xff0c;关键是Debian10自带了驱动可以支持&#xff0c;免去安装驱动&#xff0c;将UPS通过USB线连接服务器即可&#xff0c;如下图所示…

wvp-gb28181-pro较新版本的调整说明

gitee地址 wvp-GB28181-pro: WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的网络视频平台&#xff0c;负责实现核心信令与设备管理后台部分&#xff0c;支持NAT穿透&#xff0c;支持海康、大华、宇视等品牌的IPC、NVR、DVR接入。支持国标级联&#xff0c;支持rtsp/rtmp等…

Git判断本地是否最新

场景需求 需要判断是否有新内容更新,确定有更新之后执行pull操作&#xff0c;然后pull成功之后再将新内容进行复制到其他地方 pgit log -1 --prettyformat:"%H" HEAD -- . "origin/HEAD" rgit rev-parse origin/HEAD if [[ $p $r ]];thenecho "Is La…

【java毕业设计】基于ssm+mysql+jsp的大学生兼职信息系统设计与实现(程序源码)-大学生兼职信息系统

基于ssmmysqljsp的大学生兼职信息系统设计与实现&#xff08;程序源码毕业论文&#xff09; 大家好&#xff0c;今天给大家介绍基于ssmmysqljsp的大学生兼职信息系统设计与实现&#xff0c;本论文只截取部分文章重点&#xff0c;文章末尾附有本毕业设计完整源码及论文的获取方式…

简单理解Linux中的一切皆文件

一款操作系统要管理各种各样不同的硬件&#xff0c;因为硬件的不同所以它们使用的文件系统也不同。但是按道理来说&#xff0c;文件系统的不同对于用户来说可不是一件好事&#xff0c;操作不同的硬件就要使用不同的方法。 但是Linux有一切皆文件。 简单来说&#xff0c;Linux…

React快速入门

最近需要学到react&#xff0c;这里进行一个快速的入门&#xff0c;参考react官网 1.创建和嵌套组件 react的组件封装是个思想&#xff0c;我这里快速演示代码&#xff0c;自己本身也不太熟悉。 代码的路径是src底下的App.js function MyButton() {return (<button>I…

chapter 4 能带理论 energy band

继承自chapter 3 的自由电子模型&#xff1a; 4.1 单电子近似 One electron approximation 列出电子运动的薛定谔方程&#xff1a; E Ψ − ℏ 2 2 m ∇ 2 Ψ U Ψ E \Psi -\frac{\hbar^2}{2m} \nabla^2 \Psi U \Psi EΨ−2mℏ2​∇2ΨUΨ 根据电子在晶体中运动的实际情…

Python编程——列表解析与常用操作

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 本文专栏&#xff1a;Python专栏 专栏介绍&#xff1a;本专栏为免费专栏&#xff0c;并且会持续更新python基础知识&#xff0c;欢迎各位订阅关注。 目录 一、列表是什么&#xff1f; 二、列表的特点 1、元素…

构建C语言开发环境

有些C/C项目开发周期极长。在处理此类项目过程中&#xff0c;构建开发环境就像施展魔法一样&#xff1a;测试框架被巧妙集成在一起&#xff0c;CI/CD流程将开发者从繁琐重复的工作中解脱出来。 作为程序员&#xff0c;在开发过程中&#xff0c;我只有一个简单的愿望&#xff1…

干翻Dubbo系列第十二篇:Dubbo协议介绍

文章目录 文章说明 一&#xff1a;Dubbo协议 1&#xff1a;Dubbo协议简介 2&#xff1a;Dubbo协议优点 3&#xff1a;Dubbo协议帧的组成 (一)&#xff1a;幻数 (二)&#xff1a;2Way (三)&#xff1a;event (四)&#xff1a;Serilization ID (五)&#xff1a;status …

react之react-redux的介绍、基本使用、获取状态、分发动作、数据流、reducer的分离与合并等

react之react-redux的介绍、基本使用、获取状态、分发动作、数据流、reducer的分离与合并等 一、react-redux介绍二、React-Redux-基本使用三、获取状态useSelector四、分发动作useDispatch五、 Redux 数据流六、代码结构七、ActionType的使用八、Reducer的分离与合并九、购物挣…

python:tkinter + cef 模仿 mdict 界面

cefpython3 其上游是C开发的CEF&#xff08;基于webkit、V8&#xff09;&#xff0c; CEF 即 (Chromium Embedder Framework)&#xff0c; 是基于Google Chromium项目的开源 Web browser控件(WebView)。 可查看github文档&#xff1a;cefpython api pip install cefpython3 c…

信号灯集和共享内存的综合应用小例子

要求&#xff1a;使用信号灯集和共享内存实现&#xff1a;一个进程对共享内存存放数据"Nice to meet you"循环倒置&#xff0c;一个进程循环输出共享内存的内容&#xff0c;要确保倒置一次打印一次。 分析&#xff1a;这两个进程可以写成两个源文件&#xff0c;一个…

回归预测 | MATLAB实现SSA-SVM麻雀搜索算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现SSA-SVM麻雀搜索算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现SSA-SVM麻雀搜索算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基…

VCRUNTIME140_1.dll丢失是怎么回事?三个解决方法分享

最近打开软件或者游戏的时出现了以下问题一开始以为是自己手残又误删了什么&#xff0c;重新安装了两次也没有解决&#xff0c;看网上有许多朋友安装其他软件时会出现缺少VCRUNTIME140.dll&#xff0c;其实VCRUNTIME140_1.dll是微软Visual C Redistributable安装包中的一个动态…

AgentBench——AI智能体基准测试和排行榜

如果您有兴趣了解有关如何对AI大型语言模型或LLM进行基准测试的更多信息,那么一种新的基准测试工具Agent Bench已成为游戏规则的改变者。这个创新工具经过精心设计,将大型语言模型列为代理,对其性能进行全面评估。该工具的首次亮相已经在AI社区掀起了波澜,揭示了ChatGPT-4目…

音视频 FFmpeg音视频处理流程

ffmpeg -i test_1920x1080.mp4 -acodec copy -vcodec libx264 -s 1280x720 test_1280x720.flv推荐一个零声学院项目课&#xff0c;个人觉得老师讲得不错&#xff0c;分享给大家&#xff1a; 零声白金学习卡&#xff08;含基础架构/高性能存储/golang云原生/音视频/Linux内核&am…

修复由于找不到vcruntime140.dll,无法继续执行代码的问题方法

提示“由于找不到 VCRUNTIME140.dll&#xff0c;无法继续执行代码。重新安装程序可能会解决此问题。”&#xff0c;这一般是什么原因导致了这个问题&#xff0c;我们要如何解决&#xff1f; 下面分享一下由于找不到vcruntime140.dll无法继续执行代码的解决方法。 解决方法&…

【C++】C++入门基础:引用详解

本篇继续分享关于C入门的相关知识&#xff0c;有关命名空间、缺省参数和函数重载的部分欢迎阅读我的上一篇文章【C】C入门基础详解&#xff08;1&#xff09;_王笃笃的博客-CSDN博客 继续我们的学习 引用 在C语言中我们接触过指针&#xff0c;很多人都或多或少为他感到头痛过…

开源后台管理系统Geekplus Admin

本系统采用前后端分离开发模式&#xff0c;后端采用springboot开发技术栈&#xff0c;mybatis持久层框架&#xff0c;redis缓存&#xff0c;shiro认证授权框架&#xff0c;freemarker模版在线生成代码&#xff0c;websocket消息推送等&#xff0c;后台管理包含用户管理&#xf…