在看楼经典书籍<linux设备驱动程序>后,第一个程序就是编写一个hello word 模块. 原以为非常easy,真正弄起来,发现问题不少啊.前两天编过一次,因为没有记录,今天看的时候又忘了,所以无论多晚.都得记录一下. 1.首先说明一下我的系统环境:ubuntu 14.04,内核是3.13.0-29-generic 2.在我电脑里装了git版本号控制器.我clone了一个linux内核库在我的电脑上,所以我就能够随意的切换到随意的分支上去.最初是用的2.6.3,后来编译的时候遇到各种问题.…
模块的编译和装载 更多内容请参考Linux设备驱动程序学习----目录 1. 设置测试系统 第1步,要先从kernel.org的镜像网站上获取一个主线内核,并安装到自己的系统中,因为学习驱动程序的编写,最好使用标准内核. 第2步,必须在自己的系统中配置并构造好内核树,这样可以得到一个更加健壮的模块装载器,可以使内核的模块要和内核源码树中的目标文件连接.同时也需要这些目标文件存在于内核目录树中.这样,准备一个内核源代码树,构造一个新内核,并安装到自己的系统中,有利于开发工作的进行. 第3步,要决定…
原文链接:http://blog.chinaunix.net/uid-22609852-id-3506475.html 驱动常用头文件介绍 #include <linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件.#include <asm/***.h> 是在linux-2.6.29/arch/arm/include/asm下面寻找源文件.#include <mach/***.h> 是在linux-2.6.29/arch/ar…
Linux设备驱动程序 第三版 读书笔记(一) Bob Zhang 2017.08.25 编写基本的Hello World模块 #include <linux/init.h> #include <linux/module.h> // 声明模块的许可证书 MODULE_LICENSE("Dual BSD/GPL"); static __init hello_init(void) { // KERN_ALERT表示的是日志级别 printk(KERN_ALERT &…
内核为设备驱动提供了一个统一的内存管理接口,所以模块无需涉及分段和分页等问题. 我已经在第一个scull模块中使用了 kmalloc 和 kfree 来分配和释放内存空间. kmalloc 函数内幕 kmalloc 是一个功能强大且高速(除非被阻塞)的工具,所分配到的内存在物理内存中连续且保持原有的数据(不清零).原型: #include <linux/slab.h>void *kmalloc(size_t size, int flags); size 参数 内核管理系统的物理内存,物理内存只…
设备驱动程序简介 更多内容请参考Linux设备驱动程序学习----目录 1. 简介   Linux系统的优点是,系统内部实现细节对所有人都是公开的.Linux内核由大量复杂的代码组成,设备驱动程序可以作为进入Linux内核世界大门的切入口.   设备驱动程序在Linux内核中,是一个个独立的黑盒子,在调用内部接口时某个特定硬件做出响应,这些接口隐藏了设备的工作细节.用户的操作通过独立于特定驱动程序的一组标准化调用执行,将这些调用映射到作用于实际硬件的设备特有操作上,是设备驱动程序的任务.   模…
linux字符设备驱动程序--创建设备节点 基于4.14内核,运行在beagleBone green 在上一讲中,我们写了第一个linux设备驱动程序--hello_world,在驱动程序中,我们什么也没有做,仅仅是打印了两条日志消息,今天,我们就要丰富这个设备驱动程序,在/dev目录下创建一个设备节点,用户通过读写文件来与内核进行交互. 预备知识 在linux中,一切皆文件,不管用户是控制某个外设又或者是操作I/O,都是通过文件实现. 设备驱动程序被装载在内核中运行,当用户程序需要使用对应设备…
gpio驱动程序 上一章节linux设备驱动程序--创建设备节点章节主要介绍了linux字符设备驱动程序的框架,从这一章节开始我们讲解各种外设的控制,包括gpio,i2c,dma等等,既然是外设,那就涉及到具体的目标板,博主在这里使用的开发板是开源平台beagle bone green,内核版本为4.14. 今天我们来讲解gpio的设备驱动程序. gpio相关的库函数 为了linux的可移植性和统一,linux提供一套函数库供用户使用,内容涵盖了GPIO/I2C/SPI等外设的控制,关于函数库可…
linux字符设备驱动程序--hello_world 基于4.14内核, beagleBone green平台 PC端的设备驱动程序 有过电脑使用经验的人都知道,当我们将外部硬件设备比如鼠标键盘插入到电脑端口(通常是USB口)时,在windows系统右下角会弹出"安装设备驱动程序"的显示框,那么,为什么每个硬件都需要安装设备驱动程序才能使用呢? 首先,每个硬件都有相应的功能,鼠标的功能就是将鼠标的位移与点击状态转换成相应的数据,然后将数据传输给电脑,然后电脑根据收到的数据移动屏幕上的光…
linux设备驱动程序-i2c(1):i2c总线的添加与实现 (基于4.14内核版本) 在上一章节linux设备驱动程序-i2c(0)-i2c设备驱动源码实现中,我们演示了i2c设备驱动程序的源码实现,从这一章节开始,我们来剖析i2c设备驱动程序框架的实现原理. 前情回顾 在这之前,建议各位先阅读博主之前的两篇博客以建立基本linux内核串行通信框架的概念: linux设备驱动程序--串行通信驱动框架分析 linux设备驱动程序--bus i2c总线的初始化 分析i2c框架自然是从i2c总线的初…