您的位置:首页 > 其它

fl2440内核自带按键驱动移植及hexdump命令

2017-04-29 19:47 495 查看


主机操作系统:Centos 6.7
交叉编译器版本:buildroot-2012.08 
开发板平台: FL2440 
Linux内核版本: linux-3.0 
开发模块: linux内核自带按键驱动移植

1、修改arch/arm/mach-s3c2440/mach-smdk2440.c添加button驱动

添加头文件
#include <linux/gpio.h>

#include <linux/gpio_keys.h>
#include <linux/input.h>



#if defined(CONFIG_KEYBOARD_GPIO)||defined(CONFIG_KEYBOARD_GPIO_MODULE)
static struct gpio_keys_button s3c2440_buttons[] = {
{
.gpio = S3C2410_GPF(0),
.code = KEY_F1,
.desc = "button 1",
.active_low = 0,
},
{
.gpio = S3C2410_GPF(2),
.code = KEY_F2,
.desc = "button 2",
.active_low = 0,
},
{
.gpio = S3C2410_GPF(3),
.code = KEY_F3,
.desc = "button 3",
.active_low = 0,
},
{
.gpio = S3C2410_GPF(4),
.code = KEY_F4,
.desc = "button 4",
.active_low = 0,
},
};

static struct gpio_keys_platform_data s3c2440_button_data = {
.buttons    = s3c2440_buttons,
.nbuttons   = ARRAY_SIZE(s3c2440_buttons),
};

static struct platform_device s3c2440_button_device = {
.name = "gpio-keys",
.id   = -1,
.dev  = {
.platform_data  = &s3c2440_button_data,
}
};
#endif
修改结构体smdk2440_devices[],添加button的驱动




306 static struct platform_device *smdk2440_devices[] __initdata = {
307     &s3c_device_ohci,
308     &s3c_device_lcd,
309     &s3c_device_wdt,
310     &s3c_device_i2c0,
311     &s3c_device_iis,
312     &s3c_device_dm9000,
313     &uda1340_codec,
314     &s3c24xx_uda134x,
315     &samsung_asoc_dma,
316     &s3c_device_timer,//add by fanmaolin 2017.4.23
317     &smdk2440_beeper_device,//add by fanmaolin 2017.4.23
318      &s3c2440_button_device,//add by fanmaolin 2017.4.29
319 };


修改smdk2440_machine_init函数,加入如下代码:

for (i = 0; i < ARRAY_SIZE(s3c2440_buttons); i++) {
s3c_gpio_setpull(s3c2440_buttons[i].gpio, S3C_GPIO_PULL_UP);
s3c_gpio_cfgpin(s3c2440_buttons[i].gpio, S3C2410_GPIO_INPUT);
}


2、在内核中添加对按键的支持

[fanmaolin@Centeros linux-3.0]$ make menuconfig



Device Drivers  --->
Input device support  --->
 <*>   Event interface
 [*]   Keyboards  --->
<*>   GPIO Buttons
 
<*>   Polled GPIO buttons


3、make后在开发板上用hexdump命令进行测试



hexdump是Linux下的一个二进制文件查看工具,它可以将二进制文件转换为ASCII、八进制、十进制、十六进制格式进行查看。

指令所在路径:/usr/bin/hexdump

命令语法:



hexdump: [-bcCdovx] [-e fmt] [-f fmt_file] [-n length] [-s skip] [file ...]
命令参数:

参数
长参数
描叙
-b
 
每个字节显示为8进制。一行共16个字节,一行开始以十六进制显示偏移值
-c
 
每个字节显示为ASCII字符
-C
 
每个字节显示为16进制和相应的ASCII字符
-d
 
两个字节显示为10进制
-e
 
格式化输出
-f
 
Specify a file that contains one or more newline separated format strings.  Empty lines and lines whose first non-blank character is a hash mark (#) are ignored.
-n
 
只格式前n个长度的字符
-o
 
两个字节显示为8进制
-s
 
从偏移量开始输出
-v
 
The -v option causes hexdump to display all input data.  Without the -v option, any number of groups of output lines, which would be identical to the immediately preceding group of output lines
-x
 
双字节十六进制显示
 

由于gpio-keys驱动将按键事件映射到了/dev/input/event0设备节点上,因此,对该设备节点使用hexdump工具可以读取到按键事件。

我们在这里用hexdump测试按键





上面是依次按下4个按键所得到的结果,每按一个键,会出现4行数据,这是因为每按一次键包括键的按下和键的抬起两个动作,而每个动作结束后还会有一个同步事件发生,因此会出现4行数据。

        每行的倒数第四个数据到倒数第二数据分别对应input_event数据结构中的type
,code ,value


struct input_event {

   struct timeval time;

   __u16 type; //按键类型

   __u16 code; //按键代码

    __s32 value; //按键的值

};

  结合之前设置的linux,code分析可知,hexdump打印的各列数据含义如下:

第一列:行号

第2~5列:输入事件时间戳,即结构体中的time。

第6列:输入事件类型,即结构体中的type。

第7列:按键的键值,即结构体中的code。

第8列:按键的状态,即结构体中的value,1表示按下,0表示松开。

我们也可以用10进制显示




经过计算或直接看图可知按键代码

button1    003b    转换为10进制为  59 

button2   003c    转换为10进制为  60   以此类推 。。。

hexdump 以ASCII字符显示时,可以输出换行符,这个功能可以用来检查文件是Linux的换行符格式还是Widows格式换行符。

问题总结:

关于内核自带驱动的移植方法大同小异,套路都是修改make menuconfig,然后修改设备信息并添加,如果你不知道该怎么写,就去内核里找找,参考别人的代码,比如按键驱动,

[fanmaolin@Centeros ~]$ cd fl2440/kernel/linux-3.0/arch/arm/mach-s3c2440/mach-
mach-anubis.c      mach-gta02.c       mach-nexcoder.c    mach-osiris-dvs.c  mach-rx3715.c      mach-smdk2440.o
mach-at2440evb.c   mach-mini2440.c    mach-osiris.c      mach-rx1950.c      mach-smdk2440.c

在这里你可以看到不同型号的开发板,
[fanmaolin@Centeros ~]$ vim fl2440/kernel/linux-3.0/arch/arm/mach-s3c2440/mach-mini2440.c
找到按键信息





对照着自己的原理图修改一下红色标记的部分放到[b]mach-smdk2440.c就Ok了,我们要好好利用别人的资源哦。。。毕竟linux是开源的。[/b]
http://www.cnblogs.com/kerrycode/p/5077687.html    (hexdump命令)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: