Linux内核小笔记:spin_lock锁内不能使用sleep休眠

有一个字符驱动,内部ioctl函数不同的分支均使用spin_lock和spin_unlock,以保证对外设操作的原子性。但是,有一个功能需要对一个GPIO引脚设置上下沿,于是就使用msplee来延时。结果应用层程序在多个线程中调用该驱动提供的ioctl接口时,发现系列卡死了,只能手动复位。原来不能在spin lock中使用sleep。

阅读全文>>

我的内核学习笔记11:linux leds-gpio驱动应用实例

linux内核的leds-gpio是使用GPIO控制LED的驱动,只要将板子上LED灯对接的GPIO引脚号进行适当的配置,就能使用这个驱动了,十分方便。网上有很多文章分析这个驱动,就不献丑——或者后面闲时再写写吧。本文仅本着“实用”的目的,介绍从内核配置到应用实例,以期对leds-gpio驱动有一个整体概念。

阅读全文>>

ieee802.11数据radiotap介绍

之前写有文章介绍了在Linux系统用wireshark或tcpdump抓无线网卡数据包。分析包时发现每一数据帧前面都有一个叫radiotap的东西。它包含了如信号强度、频率等信息。当时没有研究,直接跳过。本文就对此介绍补充。首先介绍radiotap,然后利用radiotap解析库对一段radiotap数据进行解析,获取其中的信息。

阅读全文>>

一个内核调试函数的实现

最近在研究内核,主要使用printk来跟踪函数的调用过程。但直接使用printk来打印的话,各种信息太多太杂。而且又不想把已经加了的东西删除。于是决定使用打印等级的方式来实现不同各类信息的显示。

阅读全文>>