嵌入式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. 成功解决python中出现的IndentationError: expected an indented block的错误
  2. mysql主从同步简单原理_MYSQL简单主从复制原理及实现
  3. 《Kali Linux 渗透测试技术详解》笔记之 metasploit 学习纪要
  4. Hbase2.0版本安装教程
  5. win7系统关闭蓝牙服务器,Win7系统怎么关闭蓝牙功能
  6. zemax输出ies_基于ZEMAX的光学设计教程(第2版)
  7. VMware Fusion 常用内容
  8. 软件混沌工程原则以及应用介绍(PRINCIPLES OF CHAOS ENGINEERING)
  9. 树莓派YOLOV5连接手机摄像头
  10. keil5库文件安装失败_iPad iPhone如何清理垃圾 iPad iPhone清理垃圾文件办法【详解】...
  11. js常用工具类(1)
  12. 微信小程序开发-微信支付功能【WxMaService 获取openid,WxPayService建微信订单,接收微信支付异步通知回调方法,附有完整前后端代码】
  13. PATINDEX 的纯 T-SQL 全部替换函数
  14. 第07讲B文件与文件夹操作
  15. 刘润对话卫哲:阿里巴巴唯一生产的产品,就是干部
  16. VS2017 出现Miscellaneous Files
  17. Go MD5加密解密用法
  18. VB.NET读取版本信息
  19. 阿里校园招聘对java本科生的要求
  20. android设置字体为微软雅黑,css如何设置字体为微软雅黑

热门文章

  1. Python36 初步
  2. 苹果app(iOS app)的URL schemes
  3. Android11.0(R) 预置 wifi 信息自动连接
  4. 小汽车每年有哪些手续要办
  5. GSF基于PHP Swoole Framework进行二次封装
  6. No migrations to apply
  7. 光学积分球的使用随记
  8. JSPatch Convertor 实现原理详解 1
  9. Android开发之2016_最流行的Android组件、工具、框架大全
  10. python怎么读excel_python怎么读写excel