我是靠谱客的博主 友好招牌,最近开发中收集的这篇文章主要介绍移植内核部分驱动(小结),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近一直在搞内核驱动,什么移植按键,定时器,led;

内核移植其实也就那么点事,可是对于我这个连C语言都读起来磕磕巴巴的初学菜鸟来说,的确有时候很烦的可怜;用老鸟的话来说,内核移植不就是拿人家的代码,自己稍微改一下,然后再写一个测试程序,有什么难得呢???可是啊 ,我连读代码都不懂......老鸟又说:会用就行,没必要一句一句都读懂。这下我无语了,既然又不用读懂,还可以拿来就用代码。。。。崩溃啊。说到最后就是一个经验问题,老鸟移植的代码多了,自然知道下一步该做什么,错了也知道从哪里去改正,“无他,唯手熟尔”。

其实,这个东西真的要是靠自己多写多练自己学会找问题,自己去解决为题,别人顶多给你一个方向,那就是:百度不知道,你就问谷歌。反正无论如何要搞懂,不然下一次还是会把你难倒,虽然都是一些小问题,但足够你收拾一小时的。

比方说printf函数,我就经常忘记语句后面加上“n”,以为我觉着麻烦,而且每一句打印完都要换行,多浪费空间啊,再说,要是打印的语句多了,找起来还得翻页,多麻烦。这个问题老鸟讲过的,他说:加上“n”是将缓存区里面的数据都输出出来,不管有多少,而不加“n”,就要等到缓存区满了才会输出;所以如果是方便调试的话,你最好每个printf函数中加上一个“n”。当时就是这么糊里糊涂大听了没当回事,所以调试的时候明明写了打印的,却不能马上看到打印效果,甚郁闷抓狂

还有,内核移植,框架都懂吧。设备初始化的时候初始化用到的设备(寄存器设置,IO口设置注册(混杂)设备);然后,要读设备写设备目的是用户可以在用户空间进行调用,最后用完设备要记得释放设备。这个框架一说你就明白了,可是实现起来呢,(对于菜鸟来说)都是些什么啊,说的简单,代码一句也写不出来,不知道如何插手(只能说,谁让咱是菜鸟呢)。

当然,学习的路上,不能碰到点困难就畏缩了,碰到问题是好事,问题多说明你进步的空间大,虽然有点阿Q自欺欺人的感觉,但是,想一想,活着不就是不断的经历困难,克服困难,才有了丰富的生活。。。扯远了。。。反正就是,不要怕,别人可能学习一个东西很快,你学得慢些,但终会以你不断的量变,引发最后的质变。这种质变需要时间,是一个过程奋斗

说一下“技术”上面的小结:在混杂设备驱动移植是遇到的问题记一下,(1)设备打开open函数。首先,设备是以模块的形式编译(交叉编译工具(与内核一致))的,编译完之后,拷贝到开发板(nfs挂载的文件系统)上,安装模块(*.ko文件),运行调试程序,要注意的是,在安装模块时,本身就就创建了你申请的设备文件(名称不可以与已有设备重名),在调试程序时open(“设备文件名”),就打开了设备。(2)操作设备文件。可以通过read函数来读设备的状态(前提是你要在内核代码中把要给用户读的内容通过copy_to_user()传出来);要么就是通过ioctl函数(但参数有点复杂,要看你操作的设备具体实现过程,如果没有指定传参,系统会有一些默认值传到内核中执行)。写文件writer()跟读read()对应(3)内核中如果要打印请使用printk函数(4)如果需要加入中断处理,就需要设计中断处理函数,中断触发可以选择在内核open(),read(),ioctl()中,根据你的需要,要记得清理中断。

当然以上说的很不全面,其实需要注意的问题有很多很多,希望能够在以后的学习中的到完善。



最后

以上就是友好招牌为你收集整理的移植内核部分驱动(小结)的全部内容,希望文章能够帮你解决移植内核部分驱动(小结)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部