创客神器NanoPi
直播中

杨晓烁

9年用户 111经验值
擅长:可编程逻辑
私信 关注
[经验]

【NanoPi M2试用体验】一个逗逼的技术宅养成日记——第一个驱动结束!

    从这篇开始呢,准备改个辨识度高一点的名字,万一有人想看我这种逗逼写的东西呢。好了书归正传啊。
    通过这两天的不懈努力(说这话有点心虚),终于把驱动程序的头文件问题解决了,说真的在这之前从来没有好好想过关于include里面或者到底是什么意思,终于明白大概是为啥了,反正大概就是用各个层的Makefile最终找到对应SOC的文件,像mach目录就在linux-3.4.y-nanopi2-lollipop-mr1archARMmach-s5p4418includemach这个文件里,大概一下午的时间(毕竟自学嘛,走了不少弯路)终于配置好了驱动的头文件,最终头文件是这样的。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include //class_dev_create
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
解决了之前file_operations结构体不识别的问题,还有我注释掉的,如果加上的话会出现一些扩大宏的警告,导致编译出来的ko文件非常大,甚至出现错误。开始我感觉头文件是多多益善,现在看来不是这么回事啊。。
上个帖子给大家介绍了交叉编译的一些东西,在source insight里写好了驱动之后,用ftp工具把写好的驱动,我这里是first.c和makefile这个文件拉到虚拟机Ubuntu里面去。
}3R6G07O7G4~Q{I8AZ84QDU.png
在ubuntu中使用make命令编译生成.ko的驱动文件,在naonpi m2上建立好ftp服务,具体的用法可以看wiki(我是看的小狂大神的环境搭建那篇),然后同样,先把在虚拟机里生成的.ko文件拉回Windows下(当然你们可以在虚拟机和开发板之间搭建tftp),然后再用ftp工具建立一个Windows和naonpi m2之间的sftp连接。把.ko文件和我们都来写的简单应用程序复制到naonpi m2中。
~K9JOQR)1W`]XGMAMMJOYBE.png
用串口连接到naonpi2,用下面一些命令来把驱动挂载上去。
4CB45B5(2SA{K_M~A$]75.png
我们先ls /dev/led,系统会提示你没有这个文件,然后lsmod查看现在单板中已经挂载上去的驱动程序,这个时候是没有我们写的驱动的,我们cd到我们刚刚复制.ko文件的目录下,使用insmod命令将我们编写好的.ko文件挂载到系统上。(我这里是first.ko。使用insmod first.ko)这样我们的驱动程序就挂载上去了。这个时候我们再用刚刚的命令查看,先ls /dev/led,系统会提示有这个文件存在了;然后我们再看看lsmod,这个时候有没有发现刚刚的设备列表中多了一个设备?(我这里是first,大小是1127)这就说明我们的驱动程序已经成功挂载到我们的系统中去了。第一步就算是大功告成了。然后我们来说一下刚刚复制到开发板中的firsttest.c文件。
这个测试程序非常的简单,只是简单的使用了一个打开的功能。
%2X0X0WL7(O2T@%)68Y)P.png
这样他就会通过系统直接调用到驱动里的second_drv_open这个函数了。是不是非常的简单?在开发板中直接./firsttest 就可以看到gpioc的io口已经变成了高电平。

到这里,第一个简单的驱动程序就写完了,做一个小小的总结吧,说真的上手s5p4418难度真的挺大,我是一个从mini2440直接跳到cortexA9的小新手,内核也从2.6.22.6直接到3.4.y,这个难度真的很大,用了不到一周的时间才把gpio的驱动做完,而且很多东西写的太不标准了,人家都会骂我,你怎么能直接在open里面直接就把地址什么的直接就赋值了啊,我也知道自己这样写很不好,但是说真的时间挺有限的,我昨天把这个昨晚已经10点多了,学校的寝室10点就要关门了,紧赶着把这些东西做完了,今天才想好思路把这篇帖子发出来。这是第一个字符设备驱动,后续可能会把这些字符设备驱动完善一下,在字符设备里把PULL机制添加进去,还有中断各种东西,然后在准备开始写块设备驱动,我是一步一步看着韦东山大神的视频学习的,拿到新板子的话第一时间想的是把在2440上实现的驱动,先都移植过来,我相信这也是一个提高的过程。希望大家多多支持,我这个人是个24k纯逗逼,不容易严肃起来,遇到问题也容易想到逃避,如果大家喜欢,我会努力把这个驱动的专题做下去,名字我都想好了,就叫逗逼驱动专题篇,哈哈,先不说这么远了。gpio涉及到的内核层面的原理性的东西,我说的不多,如果大家喜欢的话,我会在后面的帖子中多加一些函数具体实现的过程,和大家一起看看内核,说实话,我也是个新手,领着大家看内核真的有难度,不过我会尽力的,最后谢谢大家的支持。我帖子中说的很多东西都与前两个帖子有关系,开箱的帖子没什么技术含量就不发出来丢人了,为了方便大家,我把前两个帖子的连接发在下面,希望大家多多支持!!

NanoPi M2试用体验】NanoPi M2 gpio驱动编写补充篇
https://bbs.elecfans.com/jishu_606822_1_1.html



【NanoPi M2试用体验】NanoPi M2 gpio驱动编写
https://bbs.elecfans.com/jishu_606374_1_1.html
  • MQT0HUY`8M3ON`C4O2F(EE4.png
  • WL_~0FR0)CC%}6[8Q~AVSA1.png

回帖(7)

王志睿

2016-5-14 10:52:24
楼主加油,新东西学习前期都是很难的额
举报

可乐丸子

2016-5-14 13:08:12
能移植8192cu驱动到M2的安卓吗?
举报

杨晓烁

2016-5-14 14:03:48
引用: 可乐丸子 发表于 2016-5-14 13:08
能移植8192cu驱动到M2的安卓吗?

无线网卡么?太久没弄过了。。够呛
举报

彭顺品

2016-5-14 14:10:48
不错不错,楼主加油q(≧▽≦q)
举报

更多回帖

发帖
×
20
完善资料,
赚取积分