移植内核部分驱动(小结)

最近一直在搞内核驱动,什么移植按键,定时器,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()中,根据你的需要,要记得清理中断。

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



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值