linux驱动之 led驱动
练手, 第一个字符驱动.
用模块加载方法
华清远见<嵌入式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全亮, 全黑, 轮流....说明这个驱动弄成功了.
提供源码下载.很兴奋.
感谢老何.
相关文档:
准备工作
qt-everywhere-opensource-src-4.6.2.tar
解压 tar xvzf qt-everywhere-opensource-src-4.6.2.tar
配置:
./configure -prefix /home/hyk/Qt_self_compiled/Qt_4_6_2
(只是改变了安装目录)
gmake
(重配置 gmake confclean , configure)
中午12 ......
中断处理
在 2.4 内核和 2.6内核中都使用 request_irq()
函数来注册中断服务函数。在 2.4
内核中,需要包含的头文件是 #include <linux/sched.h> ,2.6 内核中需要包含的头文件则是 #include
<linux/interrupt.h> 。函数原型如下:
2.4 内核
int
request_irq
(unsigned
int
irq
......
安装步骤:
Ø 安装resin前先要保证安装了JDK,可以用命令查看是否安装了JDK:
[root@wxr webapps]# java -versions
java version "1.6.0_19"
Java(TM) SE Runtime Environment (build 1.6.0_19-b04)
Java HotSpot(TM) Client VM (build 16.2-b04, mixed mode, sharing)
Ø 下载Res ......
最近在看一个开源的代码,一段代码看了很久都没有看懂,Google了一下,尽然是linux中链表的遍历。
遍历链表:
遍历链表list_for_each是一个宏,展开了就是一个for循环
#define list_for_each(pos, head) \
for (pos = (head)->next; prefetch(pos->next), pos != ( ......