linux设备驱动开发详解 笔记
在目录的 Makefile 中关于 RTC_DRV_S3C 的编译脚本为:
obj -$(CONFIG_RTC_DRV_S3C) += rtc-s3c.o
上述脚本意味着如果 RTC_DRV_S3C 配置选项被选择为“Y” 或“M”,即 obj-$(CONFIG_RTC_
DRV_S3C)等同于 obj-y 或 obj-m 时,则编译 rtc-s3c.c,选“ Y” 的情况直接会将生成的目标代码
直接连接到内核,为“ M” 的情况则会生成模块 rtc-s3c.ko;如果 RTC_DRV_S3C 配置选项被选择
为“ N”,即 obj-$(CONFIG_RTC_DRV_S3C)等同于 obj-n 时,则不编译 rtc-s3c.c。
一般而言,驱动工程师只会在内核源代码的 drivers 目录的相应子目录中增加新设备驱动的源
代码,并增加或修改 Kconfig 配置脚本和 Makefile 脚本,完全仿照上述过程执行即可
多文件模块Makefile:
obj -m := modulename.o
modulename-objs := file1.o file2.o
不加MODULE_LICENSE 会警告
MODULE_LICENSE("Dual BSD/GPL");
第6章
insmod: error inserting 'globalmem.ko': -1 Device or resource busy
设备号冲突, cat /proc/devices 可以看到已经使用的设备号。 换个设备号,或者alloc_chrdev_region 动态分配
error: implicit declaration of function ‘kmalloc’
#include <linux/slab.h>
手动建立设备文件
mknod /dev/globalmem c 248 0
第7章
error: implicit declaration of function ‘init_MUTEX’
2.6.25及以后的linux内核版本废除了init_MUTEX函数
新版本使用sema_init函数
将原来使用 init_MUTEX(sem)的地方统统替换为sema_init(sem, 1); 即可
/**
* down_interruptible - acquire the semaphore unless interrupted
* @sem: the semaphore to be acquired
*
* Attempts to acquire the semaphore. If no more tasks are allowed to
* acquire the semaphore, calling this function will put the task to sleep.
* If the sleep is interrupted by a signal, this function will return -EINTR.
* If the semaphore is successfully acquired, this function returns 0.
*/
得不到信号量,就会进入睡眠。 可被信号中断(如ctrl+c)
第23章
可以通过LINUX_VERSION_CODE判断linux版本, 同时支持多个 Linux 版本.入2.6.36后面, ioctl函数名称和签名都改变了:
/*文件操作结构体*/
static const struct file_operations globalfifo_fops =
{
.owner = THIS_MODULE,
.read = globalfifo_read,
.write = globalfifo_write,
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,36)
.unlocked_ioctl = globalmem_ioctl,
#else
.ioctl = globalmem_ioctl,
#endif
.poll = globalfifo_poll,
.open = globalfifo_open,
.release = globalfifo_release,
};
#include <linux/version.h>
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,36)
/* ioctl设备控制函数 */
static long globalmem_ioctl(struct file *filp, unsigned
int cmd, unsigned long arg)
#else
static int globalmem_ioctl(struct inode *inodep, struct file *filp, unsigned
int cmd, unsigned long arg)
#endif
Linux 内核的移植主要含义是将 Linux 内核运行于一块新的 SoC 芯片或一块新的电路板之上,
其实质含义就是建立 Linux 的板级支持包( BSP)。 BSP 的本质作用有二:为内核的运行提供底层
支撑;屏蔽与板相关的硬件细节。对于 ARM 而言, BSP 代码位于 arch/arm/的各个 plat 和 mach
目录下,
板文件都位于 arch/arm/mach-
BSP 公用的部分又被提炼到 arch/arm/plat-
linux设备驱动开发详解 笔记的更多相关文章
- Linux设备驱动开发详解
Linux设备驱动开发详解 http://download.csdn.net/detail/wuyouzi067/9581380
- 《Linux设备驱动开发详解(第2版)》配套视频登录51cto教育频道
http://edu.51cto.com/course/course_id-379-page-1.html http://edu.51cto.com/course/course_id-379-page ...
- 《linux设备驱动开发详解》笔记——15 linux i2c驱动
结合实际代码和书中描述,可能跟书上有一定出入.本文后续芯片相关代码参考ZYNQ. 15.1 总体结构 如下图,i2c驱动分为如下几个重要模块 核心层core,完成i2c总线.设备.驱动模型,对用户提供 ...
- 《linux设备驱动开发详解》笔记——14 linux网络设备驱动
14.1 网络设备驱动结构 网络协议接口层:硬件无关,标准收发函数dev_queue_xmit()和netif_rx(); 注意,netif_rx是将接收到的数据给上层,有时也在驱动收到数据以后调用 ...
- 《linux设备驱动开发详解》笔记——12linux设备驱动的软件架构思想
本章重点讲解思想.思想.思想. 12.1 linux驱动的软件架构 下述三种思想,在linux的spi.iic.usb等复杂驱动里广泛使用.后面几节分别对这些思想进行详细说明. 思想1:驱动与设备分离 ...
- 《linux设备驱动开发详解》笔记——6字符设备驱动
6.1 字符设备驱动结构 先看看字符设备驱动的架构: 6.1.1 cdev cdev结构体是字符设备的核心数据结构,用于描述一个字符设备,cdev定义如下: #include <linux/cd ...
- Linux设备驱动开发详解-Note(11)--- Linux 文件系统与设备文件系统(3)
Linux 文件系统与设备文件系统(3) 成于坚持,败于止步 sysfs 文件系统与 Linux 设备模型 1.sysfs 文件系统 Linux 2.6 内核引入了 sysfs 文件系统,sysfs ...
- Linux设备驱动开发详解-Note(5)---Linux 内核及内核编程(1)
Linux 内核及内核编程(1) 成于坚持,败于止步 Linux 2.6 内核的特点 Linux 2.6 相对于 Linux 2.4 有相当大的改进,主要体现在如下几个方面. 1.新的调度器 2.6 ...
- 《linux设备驱动开发详解》笔记——18 ARM linux设备树
18.1 设备树的起源 linux 2.6及之前,大量板级信息被硬编码到内核里,十分庞大,大量冗余代码: linux 2.6之前,引入了设备树: 设备树源于OpenFirmware,描述硬件的数据结构 ...
随机推荐
- 基础控制器MVC ,全局判断
public class BaseController : Controller { // // GET: /Base/ protected override voi ...
- CleanMyMac 4破解版-最强中文版_破解版_激活码_注册码
最新版CleanMyMac 4中文版本已经发布了,也受到了广大用户的喜爱.众所周知, 注册码是开启软件的钥匙,在获取软件安装包之后需要有效的注册码才能激活软件.但是关于CleanMyMac 4注册码的 ...
- c++ double float 数值比较
浮点数在内存中的存储机制和整型数不同,其有舍入误差,在计算机中用近似表示任意某个实数.具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基 ...
- SharePoint 2013 一次性上传文件大小限制
默认是250MB,最大一次上传文件不超过2G The defaut size is 250MB and maximun upload size is 2047MB. It's can't greate ...
- 【View】之【SimplePillarsView】可多色可圆角柱状图【demo】
当前版本:SimplePillarsView_v1.0.20140613 直接看效果图. 下附图片的设置方法:myview.setPillars(15, 0xffff00ff, 15, 5); 下附图 ...
- 【观点】“马云:金融是要为外行人服务",这个观点其实并不新鲜
不久前,马云在外滩国际金融峰会演讲,称金融行业需要“搅局者”.他说:“今天的金融,确实做得不错,没有今天这样的金融机构,中国的经济30年来不可能发展到今天,但是靠今天银行的机制,我不相信能支撑30年以 ...
- swift--添加新手引导页
swift和oc逻辑上都是一样的,只是写法不一样,可以使用一个view,也可以使用一个viewController,两种都可以的,使用view注意初始化的时候给他一个frame,vc的话,直接在本控制 ...
- hadoop程序MapReduce之SingletonTableJoin
需求:单表关联问题.从文件中孩子和父母的关系挖掘出孙子和爷奶关系 样板:child-parent.txt xiaoming daxiong daxiong alice daxiong jack 输出: ...
- Dubbo(四) -- telnet命令
一.telnet的作用 当dubbo服务(即生产者)发布之后,我们可以通过telnet命令来来进行调试和管理,以及跟踪服务调用的次数. 注意:2.0.5以上版本服务提供端口支持telnet命令,协议一 ...
- Linux dstat 命令
dstat 是一个监控系统资源使用情况的工具,常见用法如下: [root@localhost ~]$ yum install -y dstat [root@localhost ~]$ dstat -- ...