摘要: 本来想移植DM9000网卡的驱动,无奈硬件出了点问题,通过杜邦线链接开发板和DM9000网卡模块,系统上电,还没加载网卡驱动就直接崩溃了,找不到原因。。。刚好手上有一个enc28j60的网卡模块,于是就着手移植enc28j60的驱动。 其实移植enc28j60的驱动也十分简单,网上有现成的,只需要分 阅读全文
posted @ 2017-01-07 21:21 hackfun 阅读(2814) 评论(0) 推荐(0) 编辑
摘要: snull是《Linux Device Drivers》中的一个网络驱动的例子。这里引用这个例子学习Linux网络驱动。 因为snull的源码,网上已经更新到适合最新内核,而我自己用的还是2.6.22.6比较旧的内核。而网上好像找不到旧版的snull。因此结合《Linux Device Driver 阅读全文
posted @ 2016-12-18 18:13 hackfun 阅读(2581) 评论(0) 推荐(1) 编辑
摘要: spi子系统之驱动SSD1306 OLED 接触Linux之前,曾以为读源码可以更快的学习软件,于是前几个博客都是一边读源码一边添加注释,甚至精读到每一行代码,实际上效果并不理想,看过之后就忘记了。主要原因是没理解透程序架构,各个模块之间的关系,如何联系在一起,再加上没有实例验证。后来逐渐发现,理解 阅读全文
posted @ 2016-11-20 13:23 hackfun 阅读(6337) 评论(13) 推荐(0) 编辑
摘要: 理解I2C设备驱动框架,主要围绕四个结构体去分析就容易了。 struct i2c_algorithm:提供I2C协议的实现的操作,如:master_xfer实现数据收发的最基本方法。 struct i2c_adapter:每一个i2c_adapter都代表一个I2C物理接口,一个cpu可以有多个I2 阅读全文
posted @ 2016-10-23 15:05 hackfun 阅读(4910) 评论(1) 推荐(0) 编辑
摘要: 关于关于驱动设备模型相关概念请参考《Linux Device Drivers》等相关书籍,和内核源码目录...\Documentation\driver-model 简单来说总线(bus),驱动(driver),设备(device)这三者之间的关系就是:驱动开发者可以通过总线(bus)来将驱动(dr 阅读全文
posted @ 2016-10-11 23:45 hackfun 阅读(2171) 评论(0) 推荐(0) 编辑
摘要: 1.代码 input_subsys.drv.c 在linux输入子系统(input subsystem)之按键输入和LED控制的基础上有小改动,input_subsys_test.c不变。 input_subsys.drv.c 2. input_subsys_drv.c, input.c, evde 阅读全文
posted @ 2016-10-07 12:04 hackfun 阅读(1975) 评论(0) 推荐(0) 编辑
摘要: 使用POLL机制代替linux输入子系统(input subsystem)之按键输入和LED控制中的异步通知,实现同样的效果。 1.代码 只简单修改input_subsys_test.c, input_subsys_drv.c不变 input_subsys_test.c 2. 实验 2.1 安装驱动 阅读全文
posted @ 2016-10-03 12:34 hackfun 阅读(507) 评论(0) 推荐(0) 编辑
摘要: 实验现象:在控制台打印按键值,并且通过按键控制相应的LED亮灭。 1.代码 input_subsys_drv.c input_subsys_test.c makefile 2. 实验 2.1 安装驱动程序: insmod input_subsys_drv.ko 运行应用程序 ./input_subs 阅读全文
posted @ 2016-10-03 00:08 hackfun 阅读(3403) 评论(0) 推荐(0) 编辑
摘要: 1 int class_device_register(struct class_device *class_dev) 2 { 3 /* [cgw]: 初始化一个struct class_device */ 4 class_device_initialize(class_dev); 5 /* [cgw]: 添加一个struct class_device... 阅读全文
posted @ 2016-09-02 10:11 hackfun 阅读(313) 评论(0) 推荐(0) 编辑
摘要: 1 /* Class Device Stuff */ 2 3 int class_device_create_file(struct class_device * class_dev, 4 const struct class_device_attribute * attr) 5 { 6 int error = -EINVAL;... 阅读全文
posted @ 2016-08-26 18:08 hackfun 阅读(501) 评论(0) 推荐(0) 编辑