摘要:
在linux内核中经常看到可变参数函数,如我们熟悉的printf、printk、scanf、sscanf.....这些函数都使用了va_start,va_arg,va_end。 我们首先得知道调用一个含参数的函数时,输入参数少的利用通用寄存器存储,输入参数多的一部分存入通用寄存器,一部分存入堆栈。在 阅读全文
摘要:
二、工具 之前驱动已经好了,下面就得利用工具,工具编译之前也得像驱动一样修改部分变量。 (1)利用wpa_supplicant让无线网卡接入附近热点。 修改Makefile,如下: 改为CC=arm-linux-gcc,或者编译时输入make CC=arm-linux-gcc,编译后生成wpa_su 阅读全文
摘要:
今天找来了一个上一年在TB上买来的水星无线网卡(MW150UH),之前用在台式电脑上,现在想试下能否在tiny6410开发板上使用呢。把无线网卡接入开发板上,SecureCRT就出现下面几行字: 之前也有了解过USB子系统与热拔插,出现这几行是由于USB控制器发现总线电压变化(有USB设备接入),然 阅读全文
摘要:
最近在研究linux的i2c驱动,从最底层i2c控制器初始化到应用层与i2c设备交互基本打通了。 一、linux的i2c架构可以用下图表示: IIC适配器对应一条i2c总线,linux里面用i2c_adapter结构表示。总线下的i2c设备用i2c_client结构表示。algorithm是i2c的 阅读全文
摘要:
最近在研究总线的注册、设备与驱动在总线上的注册、驱动如何找到总线上的设备进行匹配、设备又如何找到总线上的设备进行匹配,在linux2.6以后,这些过程都离不开设备驱动模型,所以也与kset、kobjcet有关。 kobject就是一个对象,kset就是所有相同对象的集合,linux的设备驱动模型是用 阅读全文
摘要:
一、idr构建的结构可以看成是32叉树, 它需要用到2个结构体: struct idr { struct idr_layer __rcu *top; /*根节点*/ struct idr_layer *id_free; /*空闲节点*/ int layers; /*树的高度*/ int id_fre 阅读全文
摘要:
今天在看mtd驱动的时候发现idr, 之后网上找了很多资料, 其中我觉得这份参考资料比较好:http://www.2cto.com/kf/201301/186066.html. idr主要是实现id与数据结构地址的绑定, 一般是结构体的地址. 如果地址比较少的情况下, 可以直接定义一个全局的指针数组 阅读全文
摘要:
cat > config.h#define CONFIG_BOARDDIR board/$BOARDDIR#include #include #include #include #include #include EOF 输入任何东西放入config.h结尾,以EOF为结束标志。 阅读全文
摘要:
void down(struct semaphore *sem){ unsigned long flags; raw_spin_lock_irqsave(&sem->lock, flags); if (likely(sem->count > 0)) sem->coun... 阅读全文
摘要:
//自选锁static inline void spin_lock(spinlock_t *lock){ raw_spin_lock(&lock->rlock);}#define raw_spin_lock(lock) _raw_spin_lock(lock)void __lockfun... 阅读全文