嵌入式Linux系统的键盘驱动实现1引言

Linux由于其具有内核强大且稳定,易于扩展和裁减,丰富的硬件支持等诸多优点,在嵌入式系统中得到了广泛的应用。很多嵌入式Linux系统,特别是一些具有与用户强交互的嵌入式系统,往往需要配备一个特殊键盘,此时开发者需要根据实际情况,为自己的特殊键盘编写驱动程序。

2Linux键盘驱动简介

Linux中的大多数驱动程序都采用了层次型的体系结构,键盘驱动程序也不例外。在Linux中,键盘驱动被划分成两层来实现。其中,上层是一个通用的键盘抽象层,完成键盘驱动中不依赖于底层具体硬件的一些功能,并且负责为底层提供服务;下层则是硬件处理层,与具体硬件密切相关,主要负责对硬件进行直接操作。键盘驱动程序的上层公共部分都在driver/keyboard.c中。该文件中最重要的就是内核用EXPORT_SYMBOL这个宏导出的handle_scancode函数。handle_scancode完成的功能是:首先将扫描码转换成键码,接着根据shift,alt等扩展键的按下情况将键码转换成目标码,一般情况下是ASCII码,最后将该ASCII码放到终端设备的缓冲区中,并且调度一个tasklet负责将其在显示器上回显出来。可以看出,这个函数完成的是键盘驱动程序中最核心的一些工作,而这些核心的逻辑功能是不依赖于底层硬件的,所以可以将其独立出来,并且导出给底层的硬件处理函数调用。在这个文件中还定义了其它几个回调函数,它们由键盘驱动程序中的上层公共部分调用,并由底层硬件处理函数实现。比如kbd_init_hw,kbd_translate,kbd_unexpected_up等等。其中kbd_translate由handle_scancode调用,负责将扫描码转换成键码;键盘驱动程序的底层硬件处理部分则根据不同的硬件有不同的实现。例如PC平台上标准键盘的底层硬件处理函数都集中在driver/Pc_keyb.c中。这个文件包括了键盘中断处理函数keyboard_interrupt,扫描码到键码转换函数pckbd_translate等其他一些与底层硬件密切相关的函数。

在这种体系结构下,要添加一块特殊键盘到系统中就显得格外清晰。开发者只需为其编写驱动程序中的底层硬件处理函数,就可以将该键盘驱动起来。一般说来,底层硬件处理函数中最重要的工作就是在键盘中断处理中获取被按下键的扫描码,并且以它为参数调用handle_scancode,该扫描码可以自己定义,但它必须唯一地标识出被按下键在键盘上的位置。此外,开发者还需要提供对应的从自定义扫描码到键码的转换函数kbd_translate。具体的键码转换,将目标码放到终端的输入缓冲区,以及回显等工作都由handle_scancode负责完成。在此我们也可以看出,内核导出函数handle_scancode在整个键盘驱动程序中,起着将上层通用抽象层和底层硬件处理层粘和起来的关键作用。

3应用实例

下面我们将以一个具体的应用实例来说明在嵌入式Linux系统中给一个特殊键盘编写驱动程序的具体过程。

linux 键盘驱动下载,嵌入式Linux系统的键盘驱动实现相关推荐

  1. linux内核培训广州,嵌入式Linux驱动开发高级培训班-华清远见嵌入式培训中心

    课程目标 本课程以案例教学为主,系统地介绍Linux下有关FrameBuffer.MMC卡.USB设备的驱动程序开发.参加本课程学习的学员,因为具备了Linux设备驱动开发基础,所以本课程针对性较强, ...

  2. linux 直流电机驱动设计,嵌入式Linux直流电机驱动.PPT

    嵌入式Linux直流电机驱动.PPT 嵌入式Linux直流电机驱动实验 开发平台中直流电机驱动的实现 S3C2410芯片自带定时器,所以控制部分省去了三角波产生电路.脉冲调制电路和PWM信号延迟及信号 ...

  3. 嵌入式linux的发展历程,嵌入式Linux论文(历史发展分类及应用)

    嵌入式Linux 一.嵌入式Linux简介 1.1 嵌入式Linux历史 随着社会的发展,信息化技术的成熟和数字化产品的普及,让以计算机技术.芯片技术和软件技术为核心的嵌入式系统再度成为当前研究和应用 ...

  4. FTDI FT232驱动下载安装 高速转换器UIC系列驱动安装详细教程

    FTDI FT232驱动下载安装 高速转换器UIC系列驱动安装教程 在使用FTDI FT232串口设备时,如果电脑没有对应的驱动就无法使用.新版的Windows 10有的已经自带驱动就无需安装(能识别 ...

  5. Win11系统没有声卡驱动怎么解决 Win11系统没有声卡驱动解决方法

    Win11系统没有声卡驱动如何解决?现在很多用户都升级Win11系统了,最近有些朋友在升级更新win11系统之后,发现电脑没有声音,检查后才发现原来是没有声卡驱动.那么,安装Win11安装后没有声卡驱 ...

  6. 魅族 linux驱动下载,魅族Meizu MX Flyme手机驱动官方正式版下载,适用于手机系统-驱动精灵...

    驱动说明: [驱动名称]Meizu魅族MX手机Flyme固件1.1.6版(2012年12月28日发布) [驱动描述]魅族对于新品的态度那是不言而喻的,MX刚刚发布没多久,就连续出了数个固件进行改进,当 ...

  7. 嵌入式linux开发环境 cpu,嵌入式Linux开发环境的搭建之:U-Boot移植-嵌入式系统-与非网...

    5.2  U-Boot移植 5.2.1  Bootloader介绍 1.概念 简单地说,Bootloader就是在操作系统内核运行之前运行的一段程序,它类似于PC机中的BIOS程序.通过这段程序,可以 ...

  8. 深度实践嵌入式linux系,深度实践嵌入式Linux系统移植 完整pdf_操作系统教程_源雷技术空间...

    资源名称:深度实践嵌入式Linux系统移植 完整pdf 第1章嵌入式系统架构与移植环境搭建2 第2章u-boot工程与编译系统14 第3章u-boot启动流程分析41 第4章ARM9/S3C2440 ...

  9. Linux播放器MPlayer嵌入式开发系统中的应用

    摘要:本文论述了MPlayer在嵌入式开发系统中的应用,说明了如何在嵌入式开发板的平台上实现MPlayer的配置.编译.安装及调试过程. 关键词:嵌入式系统:MPlayer:MEncoder 引言 嵌 ...

最新文章

  1. wp实例开发精品文章源码推荐
  2. Lucene入门的基本知识(四)
  3. vue处理json数据的原理_Vue解析json数据的渲染
  4. SAP UI5 函数节流和异步完成令牌的应用
  5. 解决想从证书导出p12文件但是该证书中没有密码无法导出P12文件的问题
  6. java se官网_Java下载|Java SE Development Kit官方下载-太平洋下载中心
  7. java实现萤石云截图保存上传到ftp功能
  8. python(1)汇率换算
  9. 内存卡坏了怎么修复?内存卡恢复也不难
  10. RabbitMQ基础入门教程(从安装到SpringBoot整合)
  11. 【学习笔记】投资理财,基金基础知识科普入门学习,凭运气赚回来的钱,会凭实力亏掉_20210115
  12. wlop一张多少钱_回答:小白有个问题,为什么很多人都说 WLOP鬼刀 的画不够好?...
  13. 三星Galaxy S20:将侧面按钮更改为电源按钮
  14. L0、L1、L2 范数
  15. 湖南大学计算机研究生值不值得读,一个很现实的问题:二本院校的研究生究竟值不值得去读?...
  16. Android Studio 3.5 怎样获取MD5签名
  17. Facenet 原理介绍
  18. csv用excel打开中文乱码
  19. 中国版GDPR《个人信息安全规范》解读:国内企业如何保障信息安全?
  20. 后台缓存收回进程无法释放上下文[/BUSINESS的缓存的[10]%-请考虑增加缓存的最大大小

热门文章

  1. 模型解释 -- Guided-Backpropagation、CAM、Grad-CAM、Grad-CAM++ 及 pyTorch Hook
  2. [人体图像相关技术] -(一)概述
  3. python3 修饰器_Python3基础之: Decorator (修饰器)
  4. 计算机与科学 研究生考试试卷,2018年全国硕士研究生入学统一考试计算机科学与技术学科联考计算机学科专业基础综合试题及答案...
  5. 计算机毕业设计ssm二手车交易平台设计6b7sc系统+程序+源码+lw+远程部署
  6. 【模型推理加速系列】06: 基于resnet18加速方案评测
  7. iOS小技能:自定义时间格式(适配iOS15.4之后12/24小时制的问题)
  8. 我的Linux虚拟机的安装过程
  9. 妈耶,讲得好详细,十分钟彻底看懂深度学习常用优化器SGD、RMSProp、Adam详解分析
  10. 类的数据,成员函数,声明