文章转自:http://blog.chinaunix.net/space.php?uid=25014876&do=blog&id=59420
根据学习时的笔记(李杨老师授课)、《linux内核设计与实现》第三版、《linux设备驱动程序》第三版和《linux设备驱动开发详解》第一版来归纳的
除了第一章外,其他的代码都是通过交叉编译后在ARM9上运行,我使用的内核版本是我学习时候使用的2.6.29内核。
以下的文章若有侵权,请马上与我联系,我一定立即删除。
·linux设备驱动归纳...
阅读全文
实例解析linux内核I2C体系结构
作者:刘洪涛,华清远见嵌入式学院讲师。
一、概述
谈到在linux系统下编写I2C驱动,目前主要有两种方式,一种是把I2C设备当作一个普通的字符设备来处理,另一种是利用linux I2C驱动体系结构来完成。下面比较下这两种驱动。
第一种方法的好处(对应第二种方法的劣势)有:
● 思路比较直接,不需要花时间去了解linux内核中复杂的I2C子系统的操作方法。
第一种方法问题(对应第二种方法的...
阅读全文
绝对菜鸟在ubuntu下编译了arm的c程序
1、
直接gcc -o hciwr hciwr.c
执行程序报如下错误:
/system # ./hciwr
./hciwr: line 1: syntax error: unexpected "("
编译器的问题,可能gcc应该是x86的
2、所以用arm的gcc编译:
arm-linux-gcc-4.5.1 -o hciwr hciwr.c
3、执行2步得到的hciwr执行程序
# cp hciwr bin/
/system # hciwr
sh: hciwr: not found
应该是缺少库文件,在ubuntu下执行:
arm-linux-readelf -a h...
阅读全文
一. 常用编译命令选项
假设源程序文件名为test.c。
1. 无选项编译链接
用法:#gcc test.c
作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。
2. 选项 -o
用法:#gcc test.c -o test
作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。
3. 选项 -E
用法:#gcc -E test.c -o test.i
作用:将te...
阅读全文
# define __user __attribute__((noderef, address_space(1)))
__user这个特性,即__attribute__((noderef, address_space(1))),是用来修饰一个变量的,这个变量必须是非解除参考(no dereference)的,即这个变量地址必须是有效的,而且变量所在的地址空间必须是1,即用户程序空间的。
这里把程序空间分成了3个部分,0表示normal space,即普通地址空间,对内核代码来说,当然就是内核空间地址了。1表示用户地址空间,这个...
阅读全文
当进程以阻塞的方式通信,在得到结果前进程会挂起休眠。
为了将进程以一种安全的方式进入休眠,我们需要牢记两条规则:
一、永远不要在原子上下文中进入休眠。
二、进程休眠后,对环境一无所知。唤醒后,必须再次检查以确保我们等待的条件真正为真
简单休眠
完成唤醒任务的代码还必须能够找到我们的进程,这样才能唤醒休眠的进程。需要维护一个称为等待队列的数据结构。等待队列就是一个进程链表,其中包含了等待某个特定事件...
阅读全文
当你在用户空间需要读写一大片数据的时候,这个就用上了。
以下来自:http://www.yuanma.org/data/2006/1207/article_1916.htm
假设我们在 kernel 里产生一个 buffer,user 可以经由 read,write 等 system call 来读取或写资料到这个 buffer 里。如果有一个 user 写资料到 buffer 时,此时 buffer 已经满了。那请问你要如何去处理这种情形呢 ? 第一种,传给 user 一个错误讯息,说 buffer 已经满了,不能再写入。第二种,...
阅读全文
1.在主机的vm1网下设置ip、掩码和网关。
eg:192.168.2.23 255.255.255.0 192.168.2.1
2.虚拟机中设置连接方式为host-only
3.netconfig配置ip与vm1为同一网段,网管为vm1的ip。
eg:192.168.2.24 255.255.255.0 192.168.2.23
4.service vsftpd start
5.关闭防火墙service iptables stop
6.ifup eth0
阅读全文