mini2440 led驱动调试

mini2440 led驱动调试
mini2440 led驱动调试

Mini2440调试总结

从网上190RMB淘的mini2440开发板一块,当然什么配件都没有,要想学习必须自己找资料,找教程。写这篇文章就是想记录我从0开始是如何学习arm-linux的,同时也为以后学习留下一些脚印。下面是我自拿到开发板,在学习过程中所遇到的困难和自己的一小小总结。在mini2440 上学习arm-linux,我主要经历了以下几个阶段(说是阶段,让大家见笑了。对于arm-linux大神来说简直就是几分钟就能解决的事。)

1、烧写linux kernel

2、搭建交叉编译环境

3、编写led驱动

4、下载至目标板观察、调试。

下面我来说说我在以上4阶段所遇到的问题,以及自己是如何解决的。

一、烧写linux kernel

linux kernel的烧写,我参照mini2440的手册步骤,结构我的系统是win7的usb驱动怎么安都安不上,DNW当然也用不上。最后我在网上找到了“SuperVivi-Transfer-Tool-Complete”和“SuperVivi-Transfer-Tool”,参照网上一篇“mini2440在win7下安装usb驱动”(网址https://www.360docs.net/doc/ff10769779.html,/link?url=-AUR42L_7B4ywrmUF7mZo6J16b-0jbQ6qyZPBKzn4hbYfJfTVf2j XOjS2Zl07DSerppztQHPUFZSfCMgWnx9jth7-kSEL4w3TNkH-IiWNPy)的文章,成功安装了usb 驱动,并替换了DNW实现了vivi128M的下载,内核/文件系统的烧写。就这样我的第一个linux系统烧写成功(具体步骤参照mini2440手册)

二、搭建交叉编译环境

这一步我也比较顺利的完成了,主要是得益于网上的一篇文章。在此我灰常感谢百度贴吧里一位叫做“0000只是朱颜改”的网友,他写的“基于mini2440开发板的交叉编译环境及内核树配置”这篇文章详细描写了交叉编译环境的构建,我之后将会把此文章结合我自己的情况修改转载至我的网站。

三、编写led驱动

我是借鉴韦东山jz2440开发板的first_drv源码,在他的基础上修改得来,并且重写了Makefile。(程序我也会贴在我的网站)

四、下载至目标板观察/调试

我并没有参照手册上修改任何ftp方面的配置文件,一次偶然的机会我用“FileZilla FTP Client”连接上了mini2440板,进入了系统,发现共享目录是/home/plg。登录名是plg密码是plg .ip就不用说了,正是由于这次使用FileZilla FTP Client,让我在以下的调试中选入了深深的漩涡。

调试这一步耗费了我很多时间。其中花费时间最多的是错误“segmentation fault”上,当加载驱动,创建节点完成后,运行测试程序firstdrvtest时显示“segmentation fault”,查了N多资料,都说是内存读写错误,于是乎我就修改了无数次ioremap用到的指针都宣告失败,一次不经意的机会,我发现将ko文件经FileZilla FTP Client上传至目标板时,目标板上的KO文件要比虚拟机上编译生成的文件小20多b,于是上网查,发现有人说“segmentation fault”错吴是ftp传输导致文件不完整造成的,于是我就下载了8uftp试了一下,偶的神啊!同一个KO文件经不同ftp文件传输后运行结果完全不一样。至此我的第一个驱动程序算是顺利通过。

下面是我调试时的一些截图:

1、驱动文件和测试文件上传至目标板后,经过chmod修改权限后,加载运行。

经过insmod加载后,显示注册成功。通过cat指令可以查看到已经注册的文件号如下:

从结果可以看出注册后的主设备号为253。下一步就是创建节点xyz.

输入mknod –m 777 /dev/xyz c 253 0 后查看节点是否创建成功。

从结果可以看出xyz节点创建成功,驱动成功安装。下面就是测试驱动。

测试结果如下:

运行测试程序就是输入./firstdrvtest on或者./firstdrvtest off.开关mini2440上的4个led灯。在这之前必须将mini2440启动文件中的led启动项停止。

通过终端可以看出我们输入./firstdrvtest on时驱动能正确打开val=1 led灯亮;输入./firstdrvtest off时驱动能正确打开val=0 led灯灭;那么红色框框里面为什么命令是off灯却亮了呢!这是因为我输命令的时候在off时后面多输了一个空格,结果测试程序将off 命令当else处理,保留了val初始值1。详见驱动源码!

以上所所涉及到的文章源码均在

可以找到!

相关主题
相关文档
最新文档