精华内容
下载资源
问答
  • 主芯片组:Intel H110 音频芯片:集成Realtek ALC887 8声道音效芯片 内存类型:2×DDR4 DIMM,2×DDR3/DDR3L DIMM 最大内存容量:64GB 主板板型:Micro ATX板型 外形尺寸:24.4×21.3cm 电源插口:一...供电模式:
  • Linux内核驱动学习()GPIO之概览

    千次阅读 2019-05-04 07:47:44
    文章目录前言功能如何使用设备树API代码实现 前言 GPIO(General Purpose Input/Output)通用输入/输出接口,是十分灵活软件可编程的接口,功能强大,十分常用,SOC也非常依赖GPIO,在实际应用中...正如之前所说,G...

    前言

    GPIO(General Purpose Input/Output)通用输入/输出接口,是十分灵活软件可编程的接口,功能强大,十分常用,SOC也非常依赖GPIO,在实际应用中几乎都能看到它的影子,在Linux内核驱动的学习中,这部分相对来说也是比较基础的,但是涉及的东西其实相对来说也比较多,感觉还是很有必要学习和总结一下。

    功能

    正如之前所说,GPIO是通用输入输出接口,所以,相应的内核驱动中GPIO的基本功能总体可以总结为以下几点:

    • 输出设定电平:可以根据用户的需要,向驱动写入相应的值(比如1或0)然后GPIO输出高低电平(高=1;低=0);
    • 读取输入电平:可以读取GPIO上输入的高低电平;实际的应用比如按键或者其他一些传感器的信号;
    • 触发外部中断:输入信号可以作为中断信号,包括边沿触发,高电平触发,低电平触发等等;

    如何使用

    关于如何使用GPIO,从 Linux 2.6.3x以后就开始有gpiolib库了,大大简化了操作GPIO的流程,如何在内核中添加gpiolib的支持呢?可以参考下面的做法;

    make menuconfig
    
    Device Drivers  --->
        -*- GPIO Support  --->
            [*]   /sys/class/gpio/... (sysfs interface)
    

    究其原理的话,追本溯源可能篇幅会很长,后面再现学现卖,对于单纯使用GPIO,感觉应该有以下几个步骤:

    • 在你的设备节点里添加gpios属性;例如:
      gpios = <0 0 GPIO_ACTIVE_LOW>;
    • 在驱动中解析设备树中的节点gpios
    • 调用gpiolib的接口可以在驱动中对gpio进行操作;
    • 设置具体的gpio的功能:
      • 设置为输出引脚;
      • 设置为输入引脚;
      • 设置为外部中断;

    设备树

    相应的设备树可以写成

    gpio_keys {
     	compatible = “gpio-keys”;
     	...
    	button@1 {
    		wakeup-source;
    		linux,code = <KEY_ESC>;
    		label = “ESC”;
    	 	gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>;
     	};
    };
    

    API

    函数 功能
    bool gpio_is_valid(int number) 判断当前gpio是否有效
    int gpio_request(unsigned gpio, const char *label) 申请gpio的资源
    void gpio_free(unsigned gpio) 释放已经申请的gpio资源
    int gpio_direction_input(unsigned gpio) 设置为输入
    int gpio_direction_output(unsigned gpio, int value) 设置为输出
    int gpio_get_value(unsigned gpio) 获取输入值
    void gpio_set_value(unsigned gpio, int value) 设置输出值
    int gpio_to_irq(unsigned gpio) 获取gpio上的中断号
    int irq_to_gpio(unsigned int irq) 获取中断号对应的gpio
    int devm_gpio_request_one(struct device *dev, unsigned gpio,unsigned long flags, const char *label) gpio分配外部中断资源
    void devm_gpio_free(struct device *dev, unsigned int gpio) 释放已经申请的中断资源

    这里先大致介绍一下一般会用到的接口,还有一些遗漏,以后会慢慢补充。

    总结

    这里我简单介绍了gpio,罗列了一下Linux操作gpio可能会涉及到的知识点,包括需要对在设备树里注册节点,一些gpiolib的常用接口,这里还没有给出详细的实现代码,后面会对每一个部分的使用单独进行介绍,包括输入输出,中断唤醒,Input设备等等,篇幅和能力有限,如有错误,不吝赐教。

    展开全文
  • ARM——IO口驱动

    2020-12-11 10:53:46
    如32位的win7系统,内存条是8G,但是系统只能识别3.8G,装64位才能识别8G。 32位能访问2的32次方4,294,967,296bit = 4194304kb =4096Mb = 4Gb。 物理地址: 又叫做硬件的实际地址或绝对地址。 虚拟地址: 逻辑地址...

    总线地址:
    CPU能够访问内存的范围。
    如32位的win7系统,内存条是8G,但是系统只能识别3.8G,装64位才能识别8G。
    32位能访问2的32次方4,294,967,296bit = 4194304kb =4096Mb = 4Gb。

    物理地址
    又叫做硬件的实际地址或绝对地址。

    虚拟地址:
    逻辑地址(基于算法的地址,软件层面的地址)。
    当程序运行起来需要的内存超过物理地址大小,就会通过MMU把物理地址映射成虚拟地址来。

    芯片手册第六章:
    寄存器:
    GPFSEL0 GPIO Function Select 0 功能选择 输出/输入 32位

    GPSET1 GPIO Pin Output Set 1 输出1
    Set GPIO pin n //设置引脚输出高电平
    0 = No effect

    GOCLR0 GPIO Pin Output Clear 0 清0
    Clear GPIO pin n//设置引脚输出低电平
    0 = No effect

    //GPSET0 GPIO Pin Output Set 0 输出0

    volatile指令不会由于编译器的优化而省略,且要求每次直接读值。

    IO空间起始地址是0x3f000000,加上GPIO的偏移量0x2000000,所以GPIO的物理地址应该是从0x3f2000000开始的,然后在这个基础上进行Linux系统MMU内存虚拟化管理,映射到虚拟地址

    基于驱动框架编写IO口驱动程序:
    手册内配置寄存器说明:
    功能寄存器:
    引脚4的功能寄存器配置是在第12-14位
    在这里插入图片描述在这里插入图片描述

        .write = pin4_write,
    };
    
    int __init pin4_drv_init(void)   //真实驱动入口
    {
    
        int ret;
        devno = MKDEV(major,minor);  //创建设备号
        ret   = register_chrdev(major, module_name,&pin4_fops);  //注册驱动  告诉内核,把这个驱动加入到内核驱动的链表中
    
        pin4_class=class_create(THIS_MODULE,"myfirstdemo");      //让代码在dev下自动生成设备(如果用手动生成设备较麻烦指令为:sudo  mknod  名字 类型(通常为c字
    符串设备) 主设备号  次设备号)
        pin4_class_dev =device_create(pin4_class,NULL,devno,NULL,module_name);  //创建设备文件
    
        GPFSEL0 = (volatile unsigned int*)ioremap(0x3f200000,4);       //第一个参数为寄存器总线地址,第二个参数为寄存器指针大小
        GPSET0  = (volatile unsigned int*)ioremap(0x3f20001C,4);       //将寄存器地址通过ioremap映射到虚拟地址中去。
        GPCLR0  = (volatile unsigned int*)ioremap(0x3f200028,4);
    
        return 0;
    }
    
    void __exit pin4_drv_exit(void)
    {
        iounmap(GPFSEL0);         //解除虚拟地址的映射,注意与定义时相反,定义时是先生成设备文件和驱动在映射地址,
        iounmap(GPSET0);          //解除时是先解除虚拟地址的映射,在卸载驱动
        iounmap(GPCLR0);
    
        device_destroy(pin4_class,devno);    //销毁设备
        class_destroy(pin4_class);           //销毁类
        unregister_chrdev(major, module_name);  //卸载驱动
    
    }
    
    module_init(pin4_drv_init);      //入口   内核加载该驱动时,这个宏会被调用
    module_exit(pin4_drv_exit);
    MODULE_LICENSE("GPL v2");
    
    
    

    将上述代码复制到Linux内核驱动的字符设备驱动路径的文件夹内,并进行内核编译,生成驱动。
    代码存放路径:
    在这里插入图片描述对内核进项编译。如果没有在Makefile中添加配置需要在其中添加pin4启动模块。
    在这里插入图片描述编译完成之后将内核字符设备内的.ko文件复制到树莓派中
    在这里插入图片描述在树莓派中使用sudo insmod 指令对.ko 进行装载生成pin4驱动文件,装载成功后还需要对pin4使用sudo chmod +x /dev/pin4(或sudo chmod 666 /dev/pin4)修改属性。

    对上层代码进行交叉编译:
    上层代码:

    #include<stdio.h>
    #include<stdlib.h>
    #include<sys/types.h>
    #include<sys/stat.h>
    #include<fcntl.h>
    
    int main()
    {
       int fd;
       int cmd;
      fd = ("/dev/pin4",O_RDWR);
      if(fd<0){
       printf("open failed\n");
       perror("open");
       }else{
       printf("open success\n");
      }
      
       printf("input commnd:1/0\n");
      
       return 0; 
    }
    

    对上层代码进行交叉编译复制到树莓派中运行。

    展开全文
  • 地线:1)模拟地、数字地、功率器件的地在布线时分开,而最后都汇集到接地点上来,如:MIC会进行单独的AGND处理再连接到GND上。 2)接地线应尽量加粗。若接地线很细,则接地电位随电流的变化而变化,致使电子设备的...
  • 自从十年代初期步进电机面世以来,在过去几年它的重要性大大提高了 它用来驱动时钟和其 他采用指针的仪器,打印机 绘图仪 磁盘光盘驱动器 各种自动控制阀 各种工具,还有机器人等 的机械装置 关于马进电机工作原理请...
  • 一个是用来MacOS系统分区,7G以上。以上两个分区,不要格式化,或者格式化为FAT32,不能格式化为NTFS。  2、刻录MacOS镜像到安装分区  以管理员身份启动Leopard hd install helper v0.3  选择下载好的镜像,...
  • Ubuntu12.04 Nvidia显卡分屏问题

    千次阅读 2012-05-09 09:00:24
    没辙,心想肯定是nvidia显卡驱动的问题,就瞪了眼睛愣是在个小分屏下面把nvidia显卡驱动卸载了,重启,果然恢复正常。 Google之,发现ubuntu论坛里有解决方法,拿来,搞定,分享之! 屏幕损坏:”六屏”...

    昨晚性质冲冲的更新了ubuntu12.04,结果一开机傻眼了,原来屏幕变成了六个一模一样的分屏,每个都小的看不清,一时高涨的热情被泼了一盆冷水,真郁闷。没辙,心想肯定是nvidia显卡驱动的问题,就瞪大了眼睛愣是在六个小分屏下面把nvidia显卡驱动卸载了,重启,果然恢复正常。

    Google之,发现ubuntu论坛里有解决方法,拿来,搞定,分享之!

    屏幕损坏:”六屏”问题
    一些使用Geforce GT XXXM系列显卡的用户,屏幕会在X启动的时候转为损坏;分为六个限制为640×480的区域。
    为了解决这个问题,可以在Device节里启动验证模式NoTotalSizeCheck:

    代码:
    Section “Device”
     …
     Option “ModeValidation” “NoTotalSizeCheck”
     …
    EndSection
    有点晕,请看下面~
    具体操作就是:
    • 打开 ubuntu 12.04 的 系统设置 > 硬件驱动 > 安装 nvidia-current受限驱动。
    • 不要重启,请看下一步!!!
    • 终端执行: sudo gedit /etc/X11/xorg.conf
    • 在 device 段添加上这句 Option “ModeValidation” “NoTotalSizeCheck”
    • 修改后如下:
    • Section “Device”
    • Identifier “Default Device”
    • Option “NoLogo” “True”
    • Option “ModeValidation” “NoTotalSizeCheck”
    • EndSection 
    • 重启后六分屏bug搞定~~~
    具体什么原因我也不清楚,只是把问解决了,哎,看来Linux果然很高深,目前只是个小儿科,面对很多问题都没法深入的理解为什么,继续努力吧!

    参考链接
    展开全文
  • MaxDOS_71PXE_G115.rar

    2009-03-02 19:12:34
    增加多网段功能,当使用网段时,可设置超过多少台机器自动跳跃至下一网段,理论支持无 限台客户端,增加方案功能,当首次设置完毕后,方案将自动被保存,下次使用无需再次设置. MAXDOS客户端: 增加新的引导器,主要用于...
  • [Oracle.11g权威指南(第2版)].谷长勇.扫描版.pdf

    千次下载 热门讨论 2013-06-23 21:16:09
    部分为Oracle 11g数据库的备份与恢复;第七部分为Oracle 11g数据库集群技术与高可用性,包括真正应用集群(RAC)、自动存储管理(ASM)、容灾与数据卫士、故障诊断、真正应用测试等内容;第八部分为商业智能与...
  • java链接Oracle(JDBC)

    万次阅读 多人点赞 2019-05-20 13:25:17
    这里我们就按照jdbc的这六大步骤执行下去: 注册驱动 获取连接 获取执行sql语句对象 执行sql语句 处理结果集 关闭资源 URL:统一资源定位器 oracle URL: jdbc:oracle:thin:@localhost:1521:DataBaseName...

    工具:

    	eclipse
    	jdk 1.8
    	oracle 11g
    	ojdbc6.jar(数据库驱动包)
    

    JDBC的六大步骤

    这里我们就按照jdbc的这六大步骤执行下去:

    注册驱动
    获取连接
    获取执行sql语句对象
    执行sql语句
    处理结果集
    关闭资源
    

    URL:统一资源定位器

    oracle URL: jdbc:oracle:thin:@localhost:1521:DataBaseName

    jdbc:oracle:thin:@127.0.0.1:1521:DataBaseName

    MySQL URL:jdbc:mysql://localhost:3306/DataBaseName

    thin:小型驱动,驱动方式

    @localhost 本机ip地址 127.0.0.1

    DataBaseName:数据库的名字

    cmd -> ipconfig:ip地址查询

    URI:统一资源标识符

    URN:用特定命名空间的名字标识资源

    导入ojdbc6.jar

    新建项目 右键单击 -> build path ->configure build path
    在这里插入图片描述
    在这里插入图片描述

    TestClass:

    package javaOfsql;
    import oracle.jdbc.driver.OracleDriver;
    import java.sql.*;
    import java.util.Properties;
    /**
     * Created by 10412 on 2016/12/27.
     * JDBC的六大步骤
     * JAVA连接Oracle的三种方式
     */
    public class JdbcTest
    {
        public static void main(String[] args) {
            Connection connect = null;
            Statement statement = null;
            ResultSet resultSet = null;
    
            try {
                //第一步:注册驱动
                //第一种方式:类加载(常用)
                //Class.forName("oracle.jdbc.OracleDriver");
    
                //第二种方式:利用Driver对象
                Driver driver = new OracleDriver();
                DriverManager.deregisterDriver(driver);
    
                //第三种方式:利用系统参数  需在idea中配置program arguments为下面的参数
                //-Djdbc.drivers = oracle.jdbc.OracleDriver
    
    
    
                //第二步:获取连接
                //第一种方式:利用DriverManager(常用)
                //connect = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "你的oracle数据库用户名", "用户名密码");
                connect = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger");
                
                //第二种方式:直接使用Driver
    //            Properties pro = new Properties();
    //            pro.put("user", "scott");
    //            pro.put("password", "tiger");
    //            connect = driver.connect("jdbc:oracle:thin:@127.0.0.1:1521:XE", pro);
    
                //测试connect正确与否
                System.out.println(connect);  
                System.out.println("链接成功");
    
                //第三步:获取执行sql语句对象
                //第一种方式:statement
                statement = connect.createStatement();
    
                //第二种方式:PreStatement
                //PreparedStatement preState = connect.prepareStatement("select  * from student");
    
    
                //第四步:执行sql语句
                //第一种方式:
                resultSet = statement.executeQuery("select  * from student");
    
                //第二种方式:
          //      preState.setInt(1, 2);//1是指sql语句中第一个?,  2是指第一个?的values值
                //resultSet = preState.executeQuery();        //执行查询语句
                //查询任何语句,如果有结果集,返回true,没有的话返回false,注意如果是插入一条数据的话,虽然是没有结果集,返回false,但是却能成功的插入一条数据
          //      boolean execute = preState.execute();
          //      System.out.println(execute);
    
                //第五步:处理结果集
                while (resultSet.next())
                {
                    int id = resultSet.getInt("SNO");
                    String name = resultSet.getString("SNAME");
                    String sex = resultSet.getString("SSEX");
                    System.out.println(id+"   "+name+"   "+sex);  //打印输出结果集
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                //第六步:关闭资源
                    try {
                        if (resultSet!=null) resultSet.close();
                        if (statement!=null) statement.close();
                        if (connect!=null) connect.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
            }
        }
    }
    

    result:

    //DataBase中建好的student表:
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 磁盘空间:40-80 GB(越大越好,建议采用 NVMe 固态硬盘,每个月需要重新评估节点磁盘占用大小) 额外信息:尽可能在网络稳定的环境下进行测试,网络波动较的内网可能在主网运行时期给Gatekeeper带来不必要的...
  • TEST VGA CARD GPUZ

    2011-10-25 09:27:20
    * 包含绝多数的SATA,SCSI,RAID控制器驱动,支持64位处理器,支持双核处理器。 * 集成了数百种常见硬件驱动,经过作者精心测试,几乎所有驱动能自动识别并安装好。 * 独创全新的系统双恢复模式,解决了某些SATA光驱...
  • 软件测试工具

    2019-06-03 13:53:00
    Winrunner最主要的功能是自动重复执行某一固定的测试过程,它以脚本的形式记录下手工测试的一系列操作,在环境相同的情况下重放,检查其在相同的环境中有无异常的现象或与预期...WR 的测试过程分个步骤:创建 G...
  • en.x-cube-mcsdk V5.4.0.zip

    2019-05-28 11:51:09
    添加示例以演示步电机驱动. 加FreeRTOS支持F1,F43,F4,F7,L4和G4家族。 将大多数MC库例程转换为__weak功能这将进一步简化和保护代码部分的更改或替换,以满足用户的需要。 更改Curr_Components和Volt_...
  • MaxDOS 7 更新如下: 重要改进: 1. 支持繁体操作系统,自动判断是否已经安装过MAXDOS 7如果多次安装不会出现多个菜单项。. 2. 改进网卡检测程序,支持多网卡,支持手动选择网卡驱动,如果驱动失败或无法驱动时可 ...
  • 升级MaxDOS71

    2009-05-30 11:28:00
    增加多网段功能,当使用网段时,可设置超过多少台机器自动跳跃至下一网段,理论支持无 限台客户端,增加方案功能,当首次设置完毕后,方案将自动被保存,下次使用无需再次设置. MAXDOS客户端: 增加新的引导器,主要用于...
  • 排列顺序按兼容性排列的,V1-V6,相对来说V1支持部份的NF4及NF5系列网卡. V2则支持NF1-NF4系列网卡,其它V3-V5支持一些较特殊的PHY软网卡. 您可以一个一个切换测试看哪个与您的主板兼容,则使用哪个.操作方式全部一样...
  • 它的进速度有多?它的捕集效率是多少?已知条件为:粒子的介电常数(dielectric constant)为6,真空介电常数为8.85×10-12C/(V·m),电场强度为300kv/m,电除尘器的比集尘面积为0.060m/s。 你能否估算dp=3μm的...
  • 集成电路的类型很多,从的方面可以分为模拟电路和数字集成电路2 类。数字集成电路广泛用于计算机、控制与测量系统,以及其它电子设备中。 一般说来,数字系统中运行的电信号,其大小往往并不改变,但在实践分布...
  • 功率LED 光源是低电压、电流驱动的器件,其发光的强度由流过LED 的电流大小决定,电流过强会引起LED 光的衰减,电流过弱会影响LED 的发光强度,因此,LED的驱动需要提供恒流电源,以保证功率LED 使用的安全性,...
  • .软件流程图 1. 硬件初始化:时钟、I2C、DCMI、SDRAM、LTDC 2. 进入图像处理线程,启动拍照并等待拍照完成信号量 3. 完成拍照释放拍照完成信号量 4. 得到图像后,进行图像处理与图像识别 5. 将图像识别结果在LCD上...
  • 不多说废话,看题目,本教程适合练手,会python+android基础的人群,文件较,上传乃是下载链接,下面上目录: 1-1 课程导学 2-1 如何学好Android App性能测试? 2-10 详解【电量】监控值的获取方法 \' D, l" p) ...
  • 免费增值企业端(2006年):谷歌G Suite 免费增值消费者端(2008年):Spotify 2019年第一季度,亚马逊、谷歌以及微软三巨头的云服务收入同比增长58%; 第五部分:数据增长 数据收集+分析+利用=从人类向人类/计算机...
  • 明明好的显示器和好的显卡对游戏水平的影响比一个鼠标宏要的多,为什么偏偏认为是鼠标宏不公平? 杠精会说,你可以用几百块的鼠标,鼠标给你提供了宏的功能,但是你有权不使用。那么我也可以说,4000块的显示器给...
  • Ghost 8.3 系统备份软件

    2009-11-13 10:29:50
    、软件特性 1.存贮介质  Ghost 支持的存储介质超出了我们的想象,它支持对等 LPT 接口、对等 USB 接口、对等 TCP/IP 接口、SCSI磁带机、便携式设备(JAZ、ZIP、MO等)、光盘刻录机(CDR、CDRW)等。而这些特性不...
  • Ghost 8.3 Enterprise

    2009-04-15 13:32:08
     、软件特性  1.存贮介质  Ghost 支持的存储介质超出了我们的想象,它支持对等 LPT 接口、对等 USB 接口、对等 TCP/IP 接口、SCSI磁带机、便携式设备(JAZ、ZIP、MO等)、光盘刻录机(CDR、CDRW)等。而这些...
  • 还原系统ghost的方法

    2008-11-05 21:01:15
    mode=:此项参数用于设定Ghost.exe的使用模式,有种模式可供选择:copy、pcopy、load、pload、dump、pdump。其中,copy、load、dump是指硬盘到硬盘的操作,加p以后(pcopy、pload、pdump)则以相同模式针对硬盘的...
  • 硬盘播出系统说明

    2012-06-27 02:44:00
    3:对160G以上硬盘支持不好 ----------------------------- SIGA 硬 盘 播 出 2.0 软 件安 装 说 明 ----------- 安 装 包 说 明 ------------------- 1:本程序是2.0 安装包。 --- 硬 盘 播 出 系 统 安 ...
  • Ramdisk绿色中文版(gavotte开发的)

    热门讨论 2011-05-19 16:12:08
    如果你的电脑只有256兆内存,那么内存盘选择32兆就可以了,512MB内存可选择64-128MB之间,如果你有1G内存以上, 最多可以把内存盘的大小设置为784兆。 三、选择盘符 缺省是R,只要是没有使用的盘符都行。 四、...
  • 如果你的电脑只有256兆内存,那么内存盘选择32兆就可以了,512MB内存可选择64-128MB之间,如果你有1G内存以上,最多可以把内存盘的大小设置为784兆。 三、选择盘符 缺省是R,只要是没有使用的盘符都行。 四、...

空空如也

空空如也

1 2 3 4
收藏数 65
精华内容 26
关键字:

六驱大g