读书笔记第八章

第八章
linux驱动的代码重用:
linux驱动的代码重用有很多种方法,可以采用标准c程序的方式。将要重用的代码放在其他的文件中。如果要使用这些功能,include相应的头文件即可(这种方式称为静态重用)。也可以使用另外一种动态重用方式,也就是一个linux驱动可以使用另外一个linux驱动中的资源。
注意如果linux驱动的代码不多,将所有的代码都放到一个文件中并没有什么不妥,但对于复杂的linux驱动,就需要使用多个源代码文件存放不同的功能代码,这样做有利于代码分类和管理,当然,如果linux驱动要使用第三方的源代码,那么就不得不编译多个源代码文件,最终生成.ko文件或编译进linux内核。
强行卸载linux驱动:
情况1:初始化函数崩溃,由于linux驱动模块的初始化函数进行了默写操作而崩溃,从而导致初始化函数无法正常返回,再这种情况下的表现是当前linux驱动模块没有被任何其他的linux驱动模块使用,但却显示已经被引用了一次。
情况2:卸载函数被阻塞,在使用rmmod命令卸载linux驱动时,系统会调用卸载函数(通过module_exit宏指定的函数),只有卸载函数返回成功时,linux驱动才会被卸载如果卸载函数被阻塞,rmmod命令也会被阻塞。

时间: 2024-10-10 00:51:21

读书笔记第八章的相关文章

Redis Essentials 读书笔记 - 第八章: Scaling Redis (Beyond a Single Instance)

Chapter 8. Scaling Redis (Beyond a Single Instance) 精彩的总在最后,终于来到这一章了! 本章讲述通过多实例来进行水平扩展,重要的概念有:persistence, replication, partitioning. Persistence 内存是临时的, 易失性存储, 为防止数据丢失, Redis提供了两种persistence的方法:Redis Database (RDB) 和 Append-only File (AOF),两种方法可以单独使

Android深度探索读书笔记 第八章

代码的重用分为静态重用跟动态重用.静态重用:采用标准的c程序的方式,将要重用的代码放在其他的文件中,如果要使用相应的某些功能,include相应头文件即可.动态重用:也就是一个linux驱动可以使用另外一个linux驱动中的资源.还有另外一种代码共享的方式:,模块依赖,也称为导出符号.在一个驱动模块里使用另外一个驱动模块里的被导出的符号(常量.变量.函数等).编译是由多个文件组成的linux驱动,如果linux驱动代码不多,可以将所有的代码放在一个文件中,如果linux驱动代码比较复杂,就需要使

《利用python进行数据分析》读书笔记--第八章 绘图和可视化

http://www.cnblogs.com/batteryhp/p/5025772.html python有许多可视化工具,本书主要讲解matplotlib.matplotlib是用于创建出版质量图表的桌面绘图包(主要是2D方面).matplotlib的目的是为了构建一个MATLAB式的绘图接口.本书中的大部分图都是用它生成的.除了图形界面显示,还可以把图片保存为pdf.svg.jpg.png.gif等形式. 1.matplotlib API入门 Ipython可以用close()关闭界面.

Sprint总结和第八九十的读书笔记

总结:经过这次的Sprint,我在从中收获了很多.作为产品负责人的我,主要责任就是合理分配任务给自己的队友,调动队友的积极性.虽然这其中也有些不尽人意的地方,但是我们都坚持的走了过来,团队合作真的很重要,在以后的工作中也会起到相当大的作用,所以,现在的团队合作就是以后工作的基础. 第八九十章的读书笔记 第八章主要是讲需求分析,而这需求分析在团队中主要涉及到用户这个角色. 需求分析是指理解用户需求,就软件功能与客户达成一致,估计软件风险和评估项目代价,最终形成开发计划的一个复杂过程.在这个过程中,

构建之法的八、九、十章读书笔记

构建之法读书笔记 第八章  需求分析 这一章主要是讲需求的分析,对于一个程序项目来说,我觉得,需求是这个项目的向导,他可以决定程序项目会发展成什么样子.书里面需求这里大致分为两个:软件需求和用户需求. 软件需求:我们不仅仅要考虑到项目功能的需求,要实现的功能,还要考虑到开发过程以及非功能方面的需求,还有综合需求. 用户需求:是针对在用户这个角度,用户最需要的东西.我觉得用户需求在需求分析中较为重要,毕竟每一个要做的程序的根本目的是满足用户的要求.      所以书里面野介绍了九种获取用户需求的调

读书笔记2014第4本:程序员修炼之道-从小工到专家(第七、八章)

第七章 在项目开始之前 36 需求之坑不为收集需求,挖掘它们.有一种能深入了解用户需求,却未得到足够利用的技术:成为用户.与用户一同工作,以像用户一样思考.描述需求文档时,要使用项目术语表.用WEB来收集和管理需求. 37 解开不可能解开的谜题遇到不可能解决的问题时,退一步问问自己如下问题:1)有更容易的方法吗?2)你是在设法解决真正的问题,还是被外围的技术问题转移了注意力?3)这件事情为什么是一个问题?4)是什么使它如此难以解决?5)它必须以这种方式完成吗?6)它真的必须完成吗? 38 等你准

Java 线程第三版 第八章 Thread与Collection Class 读书笔记

JDK1.2引入最有争议性的改变是将集合类默认为不是Thread安全性的. 一.Collection Class的概述 1. 具有Threadsafe 的Collection Class: java.util.Vector(List) 列表集合,通过索引操作. java.util.Stack(List) 继承自Vector,提供LIFO的顺序操作push进入,pop出元素. java.util.Hashtable(Map) 一个简单.无序的key与value的映射. java.util.conc

《Java并发编程实战》第八章 线程池的使用 读书笔记

一.在任务与执行策略之间的隐性解耦 有些类型的任务需要明确地指定执行策略,包括: . 依赖性任务.依赖关系对执行策略造成约束,需要注意活跃性问题.要求线程池足够大,确保任务都能放入. . 使用线程封闭机制的任务.需要串行执行. . 对响应时间敏感的任务. . 使用ThreadLocal的任务. 1. 线程饥饿死锁 线程池中如果所有正在执行任务的线程都由于等待其他仍处于工作队列中的任务而阻塞,这种现象称为线程饥饿死锁. 2. 运行时间较长的任务 Java提供了限时版本与无限时版本.例如Thread

Android深度探索——第八章读书笔记及心得

蜂鸣器驱动 ——第8章读书笔记及心得 通过本章的学习,学会了pwm的驱动实验,知道了蜂鸣器实现的原理.蜂鸣器是开发板上的一个硬件设备,可以通过向寄存器写入特定的值来控制蜂鸣器发出尖叫声.本实验将linux驱动区分成了多个实现文件.学会了编写Makefile文件.知道了linux驱动模块的依赖.通过实验学会了linux驱动常用的代码重用方式及强行卸载linux驱动的方法. 在C语言中编译多个源代码文件时,如果a.c使用了b.c文件中的函数,需要在a.c文件中使用extern预先定义b.c中的函数,