练手, 第一个字符驱动.
用模块加载方法
华清远见<嵌入式linux设备驱动开发详解>的代码拿来改的.
编译过程发现很多错误.
最后发现 这本书带的驱动代码都是基于linux2.4的...目前我用的linux2.6, 代码部分需要做修改.
我的板子是 友善之臂的 2410. vmware+ubuntu nfs交叉编译
首先
linux2.6内核编译里面要打开loadable modules, 以及 unload 的选项也要选上 否则用不到rmmod命令 呵呵.
第二 (和上面第一条一样,今后写驱动都会要用到这个)
要制作linux 内核树(linux2.6必须)
在linux2.6.14.1的代码目录
make bzImage
会生成一个新文件 vmlinux
然后 make modules //编译模块
make modules install //安装模块
结束之后会在/lib/modules下生成2.6.14.1文件夹, 这个就是内核树了. 主要用到的就是里面的头文件.
第三
修改书上带的代码, 主要是改端口号, 以及部分代码基于linux2.6会不同, , 请见我提供的下载, 里面包括了 makefile, 驱动源代码, 测试程序源代码.
注意会用到ioremap()函数, 绝对地址到虚拟地址的转换, 然后用指针来对portB的寄存器赋值
第四
测试..
交叉编译, 在开发板串口终端上 insmod ./led.ko 出现提示符, rmmod led 也出现退出消息.
这个时候注意了, 要添加设备节点, 否则 test程序是打不开设备的.
mknod /dev/leds c 231 0 //创建设备节点
然后执行./test , 可以看到开发板上4个led全亮, 全黑, 轮流....说明这个驱动弄成功了.
提供源码下载.很兴奋.
感谢老何.