平时调试GPIO的时候,往往是驱动写好控制接口,应用层操作,驱动配置端口->编译->烧录固件->查看现象,这样操作很繁琐,很浪费时间, 直接通过串口登录开发板,通过命令的方式控制端口,这样的方式既方便又快速...操作步骤 操作目录: sys/class/gpio /sys/class/gpio/export: 用于通知系统需要导出控制的GPIO引脚编号 /sys/class/gpio/unexport: 用于通知系统取消导出...#define GPIO_PC(n) (2*32 + n) #define GPIO_PD(n) (3*32 + n) #define GPIO_PE(n) (4*32 + n) #define.../gpio21/direction"); system("echo 1 > /sys/class/gpio/gpio21/value"); } 学会此方法,平时的工作效率又提升一倍!...参考 Linux操作GPIO(文件IO方式)
License version 2 as 10 * published by the Free Software Foundation. 11 * 12 */ 13 14 #include 15 #include 16 #include 17 #include 18 #include 19 #include 20 #include 21 #include... 22 #include 23 #include 24 #include <linux/input...Linux中输入设备的事件类型有(这里只列出了常用的一些,更多请看linux/input.h中): EV_SYN 0x00 同步事件 EV_KEY 0x01 按键事件 EV_REL 0x02 相对坐标
设备驱动设置中断 debounce 功能 6 FAQ 6.1 常用 debug 方法 6.1.1 利用 sunxi_dump 读写相应寄存器 6.1.2 利用 sunxi_pinctrl 的 debug...GPIO 开发指南 1 概述 1.1 编写目的 本文档对内核的 GPIO 接口使用进行详细的阐述,让用户明确掌握 GPIO 配置、申请等操作的编程方法。...(图中最上面一层 device driver 表示 Pinctrl 驱动的使用者) 图 2-1: pinctrl 驱动整体框架图 Pinctrl api: pinctrl 提供给上层用户调用的接口...linux-5.4 已经标准化该接口,直接采用 enum of_gpio_flags 的定义。...6 FAQ 6.1 常用 debug 方法 6.1.1 利用 sunxi_dump 读写相应寄存器 需要开启 SUNXI_DUMP 模块: make kernel_menuconfig ---> Device
1 引言 学习单片机的第一个例子通常都是点亮LED灯,对于Linux应用,我们也从LED入手,我就记得自己刚开始学的时候查了好多资料才勉强能控制一个灯亮,当时就感受到了Linux和单片机裸机有很大的差异...2.2.软件 1)需要在上一篇《Linux学习系列五:Nand Flash根文件系统制作》的基础上改动下Linux内核配置,生成新的970uimage并烧写到板子里。...用户可以通过文件系统/sys/class/gpio/…路径下的文件节点来操作对应的IO口 /sys/class/gpio/export :来告诉系统需要控制哪个GPIO /sys/class/gpio/...2)先使用我们之前的交叉工具链去编译上述代码 arm-none-linux-gnueabi-gcc gpio_demo.c -o gpio_demo 将生成的gpio_demo放到板子里去运行,提示如下错误...3)使用和板子里自带文件系统匹配的交叉工具链来重新编译 arm-linux-gcc gpio_demo.c -o gpio_demo 这时它会报一个错误: ?
本文目录: 一、gpio 与 pinctrl 二、内核里如何引用 gpio 三、gpio 子系统框架 四、应用层如何访问 gpio 一、gpio 与 pinctrl 本文主要关注 gpio 子系统,但是老吴认为必要先说明一下...完整的接口定义位于 linux/gpio/consumer.h,大约共有 70个 API。...() gpiod_set_value_cansleep() 读写一组 gpio gpiod_get_array_value() gpiod_set_array_value() 获得 gpio 对应的中断号...四、应用层如何访问 gpio 1....Linux-4.19 Documentation Linux Device Drivers Development / GPIO Controller Drivers
FPGA开源工作室将通过五篇文章来给大家讲解xilinx FPGA 使用mig IP对DDR3的读写控制,旨在让大家更快的学习和应用DDR3。...软件使用Vivado2018.1 第三篇:mig IP用户读写时序 1 mig接口说明 ? ? ? ? 对于mig与DDR3/DDR2 SDRAM的读写时序我们不需要了解太多,交给mig就可以了。...想要写好Userlogic,我们就必须清楚每一个用户控制接口的含义: a. app_addr[ADDR_WIDTH – 1:0]:此输入指示当前提交给UI的请求的地址。...了解了每个信号的作用我们来讲解mig 用户逻辑的读写时序。 2 命令与地址 ?...最多两个用户时钟(ui_clk)。 4读时序 ? ?
说明 在Linux中,可以对GPIO进行相关的控制,具体的做法就是利用字符设备驱动程序对相关的gpio进行控制。由于操作系统的限制,在Linux上又无法直接在应用程序的层面上对底层的硬件进行操作。...> #include #include #include #include #include...总结 由于应用层不能直接操作gpio,但是应用程序可以调用驱动程序的接口来操作gpio。这也是为什么控制gpio这么麻烦的原因。...通过这次的总结,对Linux的驱动的内核层与应用层要区分清楚,同时也加深对驱动程序编写流程的理解。... #include #include #include #include <linux
读写锁 与互斥量类似,但读写锁允许更高的并行性。其特性为:写独占,读共享。 读写锁状态: 一把读写锁具备三种状态: 1. 读模式下加锁状态 (读锁) 2. 写模式下加锁状态 (写锁) 3....不加锁状态 读写锁特性: 1. 读写锁是“写模式加锁”时, 解锁前,所有对该锁加锁的线程都会被阻塞。 2....那么读写锁会阻塞随后的读模式锁请求。优先满足写模式锁。读锁、写锁并行阻塞,写锁优先级高 读写锁也叫共享-独占锁。当读写锁以读模式锁住时,它是以共享模式锁住的;当它以写模式锁住时,它是以独占模式锁住的。...读写锁非常适合于对数据结构读的次数远大于写的情况。...函数 以读方式请求读写锁。
一、读写锁是什么?...读写锁其实还是一种锁,是给一段临界区代码加锁,但是此加锁是在进行写操作的时候才会互斥,而在进行读的时候是可以共享的进行访问临界区的 ps:读写锁本质上是一种自旋锁 二、为什么需要读写锁?...如果每次操作都给此段代码加锁,太浪费时间了而且也很浪费资源,降低程序的效率,因为读操作不会修改数据,只是做一些查询,所以在读的时候不用给此段代码加锁,可以共享的访问,只有涉及到写的时候,互斥的访问就好了 三、读写锁的行为...读写之间是互斥的—–>读的时候写阻塞,写的时候读阻塞,而且读和写在竞争锁的时候,写会优先得到锁 四、自旋锁&挂起等待是锁?...---->读和写在同时竞争锁的时候,写会优先的得到锁 互斥---->读的时候写阻塞,写的时候读阻塞 4.相关函数 (1)pthread_rwlock_init()—->初始化函数 功能:初始化读写锁
战略层——产品目标和用户需求的组合 知道企业与用户双方对产品的期许和目标,有助于促进战略的确立和制定 在做任何一个产品之前一定要自问两个问题: 我们要通过这个产品得到什么?...“产品目标”和“用户目标”组成了战略层,而战略层的认知会一直提示我们在设计产品体验过程中的每一个决定的方向基础,所以最关键的是【确认】,确认双方的需求如何被满足!...用户细分 我们需要把用户的需求做成若干个可管理的版块,在用户细分的时候,将按照用户类型来区分用户细分的群组,换句话说,有多少用需求类型、有多少种用户,需要按照版块分类,然后一一匹配。...在用户细分时,需要将用户划分成较小的,有共同需求的小组,可以帮助我们更好的了解用户需求。...创建细分用户群只是一种用于“揭示”用户最终需求的手段,你真正只需要得到的是和你发现的“用户需求数目”一样多的细分用户群 创建细分用户群还有个重要的原因,是因为不同用户群有着不同的需求,而且这些需求有时候是彼此矛盾的
【做某事】的能力,属于“界面设计”,用户能真正接触到哪些“在结构层的交互设计中”确定“具体功能” 提供给用户【去某个地方】的能力,属于“导航设计”信息:把一个结构应用到我们设定好的“内容需求列表”之中,...但是这种被应用于很多行业,比如ATM取款机的密码键盘、比如遥控器····我想表达的是,有些用户已经固话的模式没必要去改变,互联网本质不是改变用户,而是创建一种更合理更有效的方式,去服务用户,并且用户很喜欢...,确不知道如何选择”,所以说,设计界面中的元素,很大的挑战就是做减法,把用户现在用不到的,或者这里面其实没必要展示的全部砍掉,放在另一个用户有可能会思考的地方,才对~ 技巧:这个界面第一次呈现给用户的时候...默认值,很影响用户接下来的操作和看到的反馈~ 还有一个办法,能自动记住某个用户最后一次选择的状态 是不是突然想起微信读书?...因为用户在看书的过程中,如果碰到需要会员的地方,一定会选择,而不是各种弹框提醒的打扰~ 导航设计 任何一个网站的导航实际都必须完成以下三种目标 1、必须提供给用户一种在网站间跳转的方法(链接真实有效并且能引导用户点击打开
mx53 linux 用gpio模拟matrix keypad需要做的工作 1、在配置内核驱动的时候添加 gpiomatrix keypad DeviceDrivers —>...Inputdevice support —> Keyboards —> GPIO....keymap_size = ARRAY_SIZE(mx53_keymap), }; static const int mx53_row_gpios[] = {GPIO..._4_0}; static const int mx53_col_gpios[] = {GPIO_4_1}; static struct matrix_keypad_platform_datamx53
learn the auth of Linux....delete -2 r: read -4 x: execute -1 A file has 3 auth show: -owner -group -other 当时用sudo的时候表示使用root用户的身份...,因此,新建的文件或者dir都是root用户的而不是你自己的。...[root@bogon temp]# ll /usr/bin/passwd -rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd s表示用户在执行时暂时获得文件...owner的权限,因为passwd会操作shadow,而只有root才有shadow权限,因此需要在用户运行passwd的时候有权力写入shadow。
在调试驱动,可能需要对驱动里的某些变量进行读写,或函数调用。...需要用到函数宏DEVICE_ATTR; 另外总线对应BUS_ATTR、设备驱动对应DRIVER_ATTR、类(class)对应CLASS_ATTR,均在kernel/include/linux/device.h.../stat.h; 1 #define S_IRWXU 00700 //用户可读写和执行 2 #define S_IRUSR 00400//用户可读 3 #define S_IWUSR 00200/.../用户可写 4 #define S_IXUSR 00100//用户可执行 5 6 #define S_IRWXG 00070//用户组可读写和执行 7 #define S_IRGRP 00040...这样就建立了 android 层到 kernel 的桥梁,操作的细节在”show”和”store” 中完成的。 3.
用户体验要素中的战略层说的是用户需求和产品目标,那么将这两点转变成范围层则应该解释为产品应该提供给用户什么样的内容和功能 范围层的确认需要做两件事:一个有价值的过程中产生有价值的产品 过程:潜在冲突和产品中一些点...是否可以结合用户画像来进行思考 数据:以往的埋点数据和用户的行为路径可以更好的告诉我们我们接下来该如何做设计调整改进 竞品:真正的竞品分析是看,当我们遇到了某些问题,竞争对手是否有更好的解决方案可以借鉴...非同类竞品:我们可以根据用户的属性去找一些不是非同类的竞品,看看具有大数据的产品上,哪些设计会让用户兴奋(比如,用户会在游戏里面进行组队打怪,那么我们里面能不能这么做?...里程碑,应该是跟市场、政策、公司发展等相结合,比如不能一味地为了数据而在市场环境不好的情况下进行强推等等,要有理想,但要符合客观规律 范围层更好的连接了战略层和功能层,我们知道了要做什么,我们知道了做出来是什么...,这一层中,我们需要思考的就是做哪些,不做哪些,如何做这些···
结构层主要包含的是交互设计和信息架构 交互设计和信息架构强调的是,将各个将要呈现给用户的元素的“模式”和“顺序”。 交互设计关注影响用户执行和完成任务的元素;信息架构关注如何将信息表达给用户的元素。...整体结构层最本质的其实是要求如何去理解用户和用户可能发生的行为——思考用户的工作方式、行为和思考方式,这样可以为用户提高产品体验 ?...以前认为在用户点击某个确定之前一定要做一个提示框,或者在用户做了某个操作之后,会给用户保留一个【撤销】,虽然【撤销】这个动作可以挽回用户的动作,但是使用的时候一定要根据用户实际操作的场景应用,和操作环节...---- 结构化内容 信息架构主要是设计组织分类和导航的结构,一定是设计出让用户容易找到信息的系统,我们可以通过由上而下或由下而上的方式来建立分类体系: 由上而下:根据战略层分析,按照主次分许,建立主要分类和次级分类的层级结构...,就像一个个空槽,在里面按照顺序填满“内容和功能” 由下而上:根据范围层分析,根据已有的“内容和功能需求的分析”而来,先将所有的资料放在最低层级,然后将他们按照归属来由下而上的进行结构分类 自我思路迭代
前言 Linux内核中gpio是最简单,最常用的资源(和 interrupt ,dma,timer一样)驱动程序,应用程序都能够通过相应的接口使用gpio,gpio使用0~MAX_INT之间的整数标识,...不能使用负数,gpio与硬件体系密切相关的,不过linux有一个框架处理gpio,能够使用统一的接口来操作gpio.在讲gpio核心(gpiolib.c)之前先来看看gpio是怎么使用的 使用gpio...使用gpio接口需要包含#include ,在驱动中使用延时函数mdelay,需要包含#include 文件,Documentation/gpio.txt.../* GPIO OUTPUT */ void gpio_set_value(unsigned gpio, int value); int gpio_cansleep(unsigned gpio);...); } else { set_irq_type(gpio_to_irq(sw->gpio), IRQ_TYPE_EDGE_RISING); } } 参考文章 Linux中的gpio口使用方法
Linux 系统定义了一切皆文件的原则,甚至于硬件:磁盘,软盘,等……,这样的好处是,在不同的平台和硬件上都能形成统一的调用方式。...接触过 Linux 的,应该都了解 echo "0" > test.txt 是将一个字符串 0 输入到当前目录的 test.txt 文件中,那么下面所有的操作,均基于这个操作形式。...GPIO端口 自 Linux 2.6.21 起,GPIO 作为一个基础组件包含到Linux 内,我们可以根据 GPIO 规范直接使用。...控制 GPIO 的目录位于 /sys/class/gpio。 /sys/class/gpio/export 文件用于通知系统需要导出控制的 GPIO 引脚编号。...# export gpiochip0 unexport # GPIO操作接口从内核空间暴露到用户空间 # 执行该操作之后,该目录下会增加一个gpio18文件目录 echo 18 > export #
使用hdparm工具或者time、dd命令测试硬盘读写性能 # hdparm for i in {0..9}; do hdparm -tT /dev/sdc; done root in summer
浅析 Linux 文件 IO 读写 Linux的文件IO子系统是Linux中最复杂的一个子系统(没有之一)。...读者可以参考以下这个图: image.png https://www.thomas-krenn.com/de/wikiDE/images/2/2d/Linux-storage-stack-diagram_v4.0...Linux的IO调度器称为evelator(电梯),因为Linus开始实现这个系统的时候,使用的就是电梯算法。...在传统的文件IO操作中,我们都是调用操作系统提供的底层标准IO系统调用函数 read()、write() ,此时调用此函数的进程(在JAVA中即java进程)由当前的用户态切换到内核态,然后OS的内核代码负责将相应的文件数据读取到内核的
领取专属 10元无门槛券
手把手带您无忧上云