zoukankan      html  css  js  c++  java
  • 迅为IMX6ULL开发板Linux驱动初探-最简单的设备驱动-helloworld

    经过前面的学习,我们了解了驱动开发的框架,本章节将带领大家实验操作,写最简单的驱动-helloworld。
    Linux 设备驱动会以内核模块的形式出现,因为 linux 内核的整体架构就非常庞大,包含的组件也非常多,如果把所有的功能都编译到 linux 内核中会使得内核非常臃肿,为了解决这个问题,更方便地新增和删除功能,linux 提供了这样的机制,这种机制被称为模块。为了大家对模块有一个感性的认识,我们先来看一个最简单的驱动-helloworld。
    驱动分为四个部分:
     头文件
     驱动模块的入口函数和出口函数
     声明信息
     功能实现
    我们在 windows 上面新建一个 helloworld.c 文件,这里使用 sourceinsight 来编辑文件,大家也可以用其他编译器来编写程序。
    第一步 包含头文件
    #include //包含宏定义的头文件
    #include //包含初始化加载模块的头文件
    第二步 驱动模块的入口函数和出口函数
    module_init();
    module_exit();
    第三步 声明模块拥有开源许可证
    MODULE_LICENSE("GPL");
    第四步 功能实现:内核模块加载的时候打印 hello world! ,内核模块卸载的时候打印 gooodbye!
    注意:内核打印函数不能用 printf,因为内核没有办法使用 C 语言库。
    static int hello_init(void){
    printk("hello world! ");
    return 0;
    }
    static void hello_exit(void){
    printk("gooodbye! ");
    }
    完整的一个最简单的 Linux 内核模块,如下图所示:

    此时,我们需要有一个感性认识,代码中的某些陌生元素都是 linux 内核为了字符设备定义的,以实现驱动与内核接口而定义的。Linux 对各类设备的驱动都定义了类似的数据结构和函数。

    核心板参数
    尺寸:38mm*42mm
    PCB:6层
    CPU:iMX6ULL   ARM Cortex-A7架构 单核
    iMX6ULL 商业级        内存:512M 存储:8G EMMC
    iMX6ULL 工业级        内存:256M 存储:512M FLASH  
    工作电压:5V~16V 电压供电
    系统支持:Linux-QT系统;Ubuntu core系统;Youcto系统;Buildroot系统;
    商业级运行温度:-20℃ ~ +80℃
    工业级运行温度:-40℃ ~ +80℃
    引脚间距:1.27mm
    引角扩展:i.MX6功能全部引出,146PIN脚
    连接方式:邮票孔

    底板参数
    尺寸:12*19cm
    PCB:2层
    POWER:5V~16V电压供电
    SWITCH:电源开关
    EEPROM 存储:256字节,掉电后数据不丢失
    4G模块:1个 全网通 (选配)
    WIFI蓝牙模块:WIFI/蓝牙二合一模块,工作频段 2.4GHz,支持 IEEE802.11bgn 等标准,支持蓝牙 4.0 协议。
    LVDS接口:1路(一个是标准HDMI 座(CON3),另一个是 30pin 的 FPC 座(J18), 两个接口实际上是同一路 LVDS 信号,用来连接迅为电子的 LVDS 屏幕)
    RGB接口:1路
    CAN:2 路 CAN 总线接口
    RS485:1 路 RS485 总线接口
    MIC:支持录音输入
    PHONE:支持耳机输出
    USB OTG:1路
    USB HOST:2路
    USB-UART:1路
    mini HDMI:1个(一路标准MINI-HDMI 接口,i.MX6ULL处理器本身没有支持HDMI,通过一个 RGB 转 HDMI 的芯片扩展出HDMI接口,通过该接口来连接HDMI显示器。 )
    网口:2路百兆以太网,RJ45 接口
    TF卡槽:1个标准TF卡接口
    SIM卡槽:1个标准SIM卡接口
    T&H接口:温湿度传感器接口
    TTL/RS485接口:TTL/RS485接口二选一
    BUZZER:1个蜂鸣器
    IRDA:1个红外一体化接收头   
    ADC电位器:支持
    DIP SWITCH:8位拨码开关
    JTAG:1个(可以通过下载/调试器来调试 i.MX6ULL 处理器)
    CAMERA接口:1个 支持500万摄像头
    TTL串口接口:20PIN (gpio引出:两个ad,一个spi,一路ttl。一路i2c,5个gpio,5v,3.3v电源)
    GPIO接口:20PIN(包括:两路ADC,一路SPI,5个GPIO,一路TTL串口,一路I2C接口。)
    重力加速度传感器:支持
    红外接收模块:支持
    光环境传感器:支持
    实时时钟:断电后系统时间不丢失
    LED:2个
    按键:3个

  • 相关阅读:
    python 网络爬虫框架scrapy使用说明
    计算机数据表示
    NoSQL 数据库应用
    什么是java序列化?什么情况下需要序列化?
    怎么实现动态代理?
    动态代理是什么?应用场景?
    什么是反射?有什么作用?
    nio中的Files类常用方法有哪些?
    什么是JAVA内部类?
    常见的异常类有哪些?
  • 原文地址:https://www.cnblogs.com/liyue3/p/15492339.html
Copyright © 2011-2022 走看看