完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 jackeyt 于 2017-4-19 09:41 编辑
试用目录: 1、【EVB-T335开发板试用体验】+1开箱上电 2、【EVB-T335开发板试用体验】2、开发环境搭建+踩坑纪录 3、【EVB-T335开发板试用体验】3、建立linux内核source insight工程 4、【EVB-T335开发板试用体验】4、linux驱动篇:点亮一盏LED灯(上) 此贴是【EVB-T335开发板试用体验】的第五篇:Linux驱动篇:点亮一盏LED灯(中) 该系列主要有三篇文章,主要介绍在Linux下如何编写LED(IO)驱动的三种主流方法: 1、使ioremap/unremap实现虚拟地址到物理地址的映射,以实现对芯片物理寄存器的读写操作从而实现IO控制; 2、使用Linux的GPIO库实现对IO的直接操作从而实现LED的亮灭控制; 3、利用平台总线(platform)实现IO操作,该方法易用,移植方法,主推方法。 本篇是该系列的第二篇,主讲如何通过Linux的库函数的方法实现Linux下对IO的操作实现。 主要包括以下内容: 一、硬件部分 (硬件部分原理主要参考上篇文章的描述,这里不再赘述,本篇主要讲软件编写部分) 二、软件部分 1、Linux 下IO分组原理 2、Linux 驱动实现 三、应用层测试程序 1、应用层测试程序实现 2、交叉编译结果与测试 二、软件部分 1、Linux 下IO分组原理 EVB-T335开发板的板载BSP已经实现了GPIO的底层函数接口,可以直接调用gpio_request,gpio_free,gpio_get_value,gpio_set_value等函数,实现对GPIO接口的申请、释放、设置输出值和获取输入值。由于BSP实现了标准的GPIO接口函数,我们编写的上层驱动无需关注实现的细节,可以直接调用,这样也大大提高了我们开发简单字符设备驱动程序的效率。 使用GPIO标准函数接口,我们需要知道当前使用板卡的GPIO编号规则。对于AM335X系列的板卡,其将GPIO分为4个组,GPIO0~GPIO3,每个组32个引脚,引脚编号从GPIO0依次递增,引脚编号算法为: GPIO_PORT_NUM = GPIO_GROUP_NUM*32 +GPIO_SUB_NUM 其中GPIO_GROUP_NUM为组号(0,1,2,3),GPIO_SUB_NUM为GPIO在这一组中的序号(0,1,2,...,31)。 根据上述思路,我们可以通过一个宏定义来实现对IO口的预定义以便编程使用。
以我们使用LED所在的IO口为例,其所对应的IO口为GPIO3_4,则其对应的GPIO号为:3*32 + 4 =100。 2、Linux 驱动实现 在上一篇中,我们已经介绍过了现应的Linux驱动框架,这里不再赘述了,接下来,我们使用MISC DEV机制来实现加载我们的驱动进入内核中,其使用方法较为简单,不再需要像字符驱动那么繁琐。 有了之前的基础,看下以下代码就很清晰明了了。
三、应用层测试程序 1、应用层测试程序实现 我们知道,在linux系统下,一切皆文件! 并且按照上文所述,我们最终需要通过底层write函数进行实际IO控制。因此,我们的思路大概是:先打开一个设备文件,然后向其写入对应的数据,使其IO输出相应的电平。 应用程序比较简单,这里不再赘述,大家看看代码就知道了:
我们使用上节讲过的Makefile来进行编译管理即可:
可根据实际情况将内核目录以及相应的驱动文件改成实际的。 2、交叉编译结果与测试 将上述文件都放至相同的目录下,输入编译指令进入内核模块编译:
交叉编译应用层程序:
然后,直接在开发板上,执行:
便可以观察到开发板上的LED一亮一灭了,同时,串口终端上会输出: |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
【盈鹏飞RK3399安卓主板 XPC-3399Pro免费试用】+烧写出厂固件
10289 浏览 0 评论
【盈鹏飞EVB-T335开发板试用体验】debian系统烧写
3317 浏览 1 评论
【盈鹏飞I.MX6UL工控开发板试用体验】linux can 测试
3204 浏览 0 评论
278浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 03:37 , Processed in 0.805748 second(s), Total 66, Slave 49 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号