Linux字符设备驱动程序总结(一)

简介:

在这之前我们已经把字符设备驱动框架和模型,包括一些机制我们都讲的非常清楚了,在这里我在给大家总结一下。

首先大家理解几个概念,像物理地址和虚拟地址,IO映射和内存映射,操作IO我总结了有以下三种方法:

第一种方法:用的时候加上 *
volatile unsigned long  *adccon=NULL;
volatile unsigned long  *adcdat=NULL;
adccon=(volatile unsigned long *)ioremap(0x58000000,8);
adcdat=adccon+4;
iounmap(adccon);
iounmap(adcdat);

第二种方法:
 __raw_readl(S3C2410_GPBCON);//S3C2410_GPBCON你可以看作是物理地址,本质是一个对IO管教的基地址加上一些偏移量。
  __raw_writel(temp, S3C2410_GPBCON);//_raw_write
 //自动将地址转化成虚拟地址

第三种方法:


static unsigned long led_table [] = {
S3C2410_GPB5,
S3C2410_GPB6,
S3C2410_GPB8,
S3C2410_GPB10,
};

static unsigned int led_cfg_table [] = {
S3C2410_GPB5_OUTP, //0x01<<10 defined in refg-gpio.h
S3C2410_GPB6_OUTP,
S3C2410_GPB8_OUTP,
S3C2410_GPB10_OUTP,
};

s3c2410_gpio_setpin(unsigned int pin,unsigned int to)
s3c2410_gpio_getpin(unsigned int pin)
s3c2410_gpio_cfgpin(unsigned int pin,unsigned int function)


这三种后两种其实是一样的,自己一定要深入去理解。

然后我们来总结按键驱动程序:

第一:查询方法,read一直去读,这样是非常消耗cpu的。

第二:中断方法,我们还是去读,当没有按键发生的时候,我在此休眠,挂进队列,当按键发生了我们唤醒休眠,在去读按键。

第三:poll机制法,我们去读的时候,如果没有按键发生,开始的时候我们是让进程一直休眠下去,但是poll机制可以提供给定一个时间去读一次数据。

第四:异步通知,当我们没有按键按下的时候,应用程序不会来读取,当按键发生中断函数里面就通知应用程序来读。

紧接着我们讲了同步机制:信号量,自旋锁,互斥锁,原子变量,顺序锁,阻塞,非阻塞,RCU,完成接口等,(这些自己不懂得在去网上看看资料)

前面有几种常用的我在前面也讲得非常详细了。

最后一个是对定时器的理解,注意观察udelay.mdelay,sleep  timer_list,这些我只是在这里提出来,给你们一些思路,全部写下来的话东西太多了。

在下一篇文章中我准备总结下我对input输入子系统,分离的理解,还有LCD,触摸屏。


目录
相关文章
|
4月前
|
安全 Linux Shell
Linux上执行内存中的脚本和程序
【9月更文挑战第3天】在 Linux 系统中,可以通过多种方式执行内存中的脚本和程序:一是使用 `eval` 命令直接执行内存中的脚本内容;二是利用管道将脚本内容传递给 `bash` 解释器执行;三是将编译好的程序复制到 `/dev/shm` 并执行。这些方法虽便捷,但也需谨慎操作以避免安全风险。
245 6
|
5月前
|
网络协议 Linux
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
746 2
|
5月前
|
Linux Python
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
81 2
|
2月前
|
Linux 开发工具 Perl
在Linux中,有一个文件,如何删除包含“www“字样的字符?
在Linux中,如果你想删除一个文件中包含特定字样(如“www”)的所有字符或行,你可以使用多种文本处理工具来实现。以下是一些常见的方法:
45 5
|
3月前
|
Linux 开发工具 Perl
Linux命令替换目录下所有文件里有"\n"的字符为""如何操作?
【10月更文挑战第20天】Linux命令替换目录下所有文件里有"\n"的字符为""如何操作?
53 4
|
3月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
95 1
|
4月前
|
消息中间件 分布式计算 Java
Linux环境下 java程序提交spark任务到Yarn报错
Linux环境下 java程序提交spark任务到Yarn报错
56 5
|
4月前
|
Linux 程序员 编译器
Linux内核驱动程序接口 【ChatGPT】
Linux内核驱动程序接口 【ChatGPT】
|
5月前
|
存储 缓存 Unix
Linux 设备驱动程序(三)(上)
Linux 设备驱动程序(三)
59 3
|
5月前
|
Linux
Linux 设备驱动程序(四)
Linux 设备驱动程序(四)
39 1