迅为IMX6ULL开发板Linux驱动初探-最简单的设备驱动-helloworld
发布时间:2021-11-1 10:17
发布者:落风
经过前面的学习,我们了解了驱动开发的框架,本章节将带领大家实验操作,写最简单的驱动-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! \n"); return 0; } static void hello_exit(void){ printk("gooodbye! \n"); } 完整的一个最简单的 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个 |
网友评论