Linux-2.6.39在Tiny6410上的移植 - 外设驱动移植

发布者:DelightfulGaze最新更新时间:2024-09-20 来源: cnblogs关键字:Linux-2  6  Tiny6410 手机看文章 扫描二维码
随时随地手机看文章

Linux内核版本号:linux 2.6.39


交叉编译工具:arm-linux-gcc 4.5.1


Linux内核下载:www.kernel.org


开发板:友善之臂Tiny6410


LCD:友善之臂S70


一、移植LED驱动


打开arch/arm/mach-s3c64xx/mach-mini6410.c添加下列代码:


 1 static struct gpio_led tiny6410_gpio_led[] = {

 2     [0] = {

 3         .name = 'led1',              //设备名

 4         .gpio = S3C64XX_GPK(4),      //GPK4  

 5         .active_low = 1,             //低电平点亮

 6         .default_state = LEDS_GPIO_DEFSTATE_ON,        //系统启动后默认为打开

 7     },

 8     [1] = {

 9         .name = 'led2',

10         .gpio = S3C64XX_GPK(5),

11         .active_low = 1,

12         .default_state = LEDS_GPIO_DEFSTATE_OFF,       //系统启动后默认关闭

13     },

14     [2] = {

15         .name = 'led3',

16         .gpio = S3C64XX_GPK(6),

17         .active_low = 1,

18         .default_state = LEDS_GPIO_DEFSTATE_ON,

19     },

20     [3] = {

21         .name = 'led4',

22         .gpio = S3C64XX_GPK(7),

23         .active_low = 1,

24         .default_state = LEDS_GPIO_DEFSTATE_OFF,

25     },

26 };

27 

28 static struct gpio_led_platform_data tiny6410_leds_data = {

29     .num_leds = ARRAY_SIZE(tiny6410_gpio_led),

30     .leds = &tiny6410_gpio_led,

31 };

32 

33 static struct platform_device tiny6410_device_leds = {

34     .name = 'leds-gpio',

35     .id = -1,

36     .dev = {

37         .platform_data = &tiny6410_leds_data,

38     },

39 };


在mini6410_devices中添加tiny6410_device_leds,系统启动时将自动注册LED平台设备:


1 static struct platform_device *mini6410_devices[] __initdata = {

2     ...

3     &tiny6410_device_leds,

4 };

执行make menuconfig修改内核配置,添加对LED设备的支持:


Device Drivers  ---> 


│ │    [*] LED Support  --->  


        │ │ [*] LED Class Support 

        │ │ *** LED drivers *** 

        │ │ <*> LED Support for GPIO connected LEDs 

        │ │ [*] Platform device bindings for GPIO LEDs


编译并烧写内核,启动开发板可以看到第一、第三个LED被点亮。


编写应用程序控制LED:


系统LED设备名为每个LED设备创建了一个节点文件夹,位于/sys/devices/platform/leds-gpio/leds/目录下,对设备文件夹里面的brightness 文件写0或写非0即可对LED进行操作。


 1 #include

 2 #include

 3 #include

 4 #include

 5 #include

 6 #include

 7 

 8 

 9 int main(int argc,char** argv)

10 {

11     int fd = 0;

12     char path[64] = '/sys/devices/platform/leds-gpio/leds/';

13     

14     if(argc != 3)

15     {

16         printf('format error!n');

17         return -1;

18     }

19     

20     strcat(path,argv[1]);

21     strcat(path,'/brightness');

22     

23     printf('%sn',path);

24     fd = open(path,O_RDWR);

25     if(fd == -1)

26     {

27         printf('open file failure!n');

28         return -1;

29     }

30     if(atoi(argv[2]))

31         write(fd,'1',1);

32     else

33         write(fd,'0',1);

34     

35     close(fd);

36     return 0;

37 }


二、按键驱动移植


在arch/arm/mach-s3c64xx/mach-mini6410.c添加下列代码:


 1 static struct gpio_keys_button tiny6410_gpio_keys[] = {

 2     [0] = {

 3         .code            = KEY_F1,        //键值

 4         .type            = EV_KEY,        //按键输入类型

 5         .gpio            = S3C64XX_GPN(0),

 6         .active_low        = 1,           //低电平表示按下

 7         .wakeup            = 0,

 8         .debounce_interval    = 5, /* ms */    //延时消抖

 9         .desc            = 'Button 1',

10     },

11     [1] = {

12         .code            = KEY_F2,

13         .type            = EV_KEY,

14         .gpio            = S3C64XX_GPN(1),

15         .active_low        = 1,

16         .wakeup            = 0,

17         .debounce_interval    = 5, /* ms */

18         .desc            = 'Button 2',

19     },

20     [2] = {

21         .code            = KEY_F3,

22         .type            = EV_KEY,

23         .gpio            = S3C64XX_GPN(2),

24         .active_low        = 1,

25         .wakeup            = 0,

26         .debounce_interval    = 5, /* ms */

27         .desc            = 'Button 3',

28     },

29     [3] = {

30         .code            = KEY_F4,

31         .type            = EV_KEY,

32         .gpio            = S3C64XX_GPN(3),

33         .active_low        = 1,

34         .wakeup            = 0,

35         .debounce_interval    = 5, /* ms */

36         .desc            = 'Button 4',

37     },

38     

39 };

40 

41 static struct gpio_keys_platform_data tiny6410_key_data = {

42     .buttons = &tiny6410_gpio_keys,

43     .nbuttons = ARRAY_SIZE(tiny6410_gpio_keys),

44 };

45 

46 static struct platform_device tiny6410_device_keys = {

47     .name = 'gpio-keys',

48     .id = -1,

49     .dev = {

50         .platform_data = &tiny6410_key_data,

51     },

52 };


在mini6410_devices中添加tiny6410_device_keys:


1 static struct platform_device *mini6410_devices[] __initdata = {

2     ....

3     &tiny6410_device_leds,

4     &tiny6410_device_keys,

5 };

执行make menuconfig修改内核配置,添加对LED设备的支持:


Device Drivers  ---> 


 │ │        Input device support  ---> 


        │ │    [*]   Keyboards  ---> 

        │ │    <*>   GPIO Buttons 

同时在Input device support里面添加event interface的支持,在/dev/下面就能生成一个event设备文件:


Device Drivers  ---> 


│ │        Input device support  ---> 


        │ │    <*>   Event interface   


编译并烧写内核,启动开发板可以在/dev/目录下生成了event0设备文件,对按键驱动进行简单的测试:


执行hexdump /dev/event0


每次按下按键可以看到如下所示按键信息,表明按键是工作正常的。


1 /dev # hexdump event0

2 0000000 034d 0000 0e3b 000c 0001 003b 0001 0000

3 0000010 034d 0000 0e4c 000c 0000 0000 0000 0000

4 0000020 034d 0000 cd5f 000e 0001 003b 0000 0000

5 0000030 034d 0000 cd6b 000e 0000 0000 0000 0000

编写应用程序测试按键驱动:


按键驱动为输入子系统,应用程序中需要对event进行循环检测看系统有没有上报输入事件,按键的输入事件类型为EV_KEY,键值分别问KEY_F1、KEY_F2、KEY_F3、KEY_F4,数值为1表示按键按下为0表示按键释放。


 1 #include

 2 #include

 3 #include

 4 #include

 5 #include

 6 #include

 7 

 8 int main(void)

 9 {

10     int fd = 0;

11     struct input_event event_key;

12     int count = 0;

13     

14     fd = open('/dev/event0',O_RDONLY);

15     if(fd == -1)

16     {

17         printf('open file failedn');

18         return -1;

19     }

20     

21     while(1)

22     {

23         count = read(fd,&event_key,sizeof(struct input_event));

24         if(count < 0)

25         {

26             printf('read failedn');

27             break;

28         }

29         if(event_key.type == EV_KEY)

[1] [2]
关键字:Linux-2  6  Tiny6410 引用地址:Linux-2.6.39在Tiny6410上的移植 - 外设驱动移植

上一篇:应用程序调用tslib出现segmentation fault
下一篇:Linux-2.6.39在Tiny6410上的移植

推荐阅读最新更新时间:2024-11-12 10:46

三星Galaxy S6采用Powermat无线充电技术
Powermat Technologies 今日宣布就无线电源技术与三星 (Samsung) 达成战略合作协议,快速发展的 Powermat Network 将被用来优化三星的设备。此次合作的首个成果就是将符合 PMA (电源事项联盟)要求的 Powermat 无线充电技术用于 Galaxy s6。 为了向其客户提供方便的无线充电方案,Powermat 和三星计划就未来在更多的设备中嵌入 Powermat 无线充电方案而开展合作。 通过将 Powermat 无线充电技术嵌入 Galaxy s6,消费者可以无缝地访问全球公共场所中不断增多的任何无线充电 热点 。其中包括精选的美国星巴克(Starbucks)门店(Pow
[手机便携]
研究:固态电池可使碳排放减少39%
据外媒报道,运输与环境(T&E)运动组织在一份声明中表示,与当前的液态锂离子电池相比,固态电池可以减少 电动汽车 电池的碳足迹,特别是在使用可持续原材料的情况下。 T&E在7月19日表示,对固态电池与锂离子技术的比较显示,在使用可持续的锂材料的情况下,固态电池可以将碳足迹削减多达39%。 当前欧洲议会和欧盟成员国正在敲定新电动车电池法规,欧洲气候组织呼吁他们在新法规中采取激励措施,以减少碳足迹。 图片来源:三星SDI T&E清洁汽车官员Cecilia Mattea在声明中称:“电动汽车已经对地球更加友好了,但是固态电池仍然是一个进步,因为它们有着更高的能量密度,意味着制造固态电池所需的材料要少得多,因此制造时的排
[汽车电子]
研究:固态电池可使碳排放减少<font color='red'>39</font>%
特斯拉车载神经网络电脑更新预计将在大约6个月内投产
特斯拉 首席执行官Elon Musk,在其个人推特上更新了特斯拉车载 神经网络 电脑进度,预计将在大约6个月内投产,其运算能力比现在的特斯拉车载电脑增加5-10倍。马斯克称之为“世界上最先进的 自动驾驶 车载电脑”。 缘起2016 早在2016年,特斯拉悄悄的聘请了 AMD 的传奇芯片架构师Jim Keller,特斯拉此举显然是为自己研发芯片做准备。随着Keller的加盟,AMD的芯片架构师和高管团队相继来到特斯拉,这也进一步佐证了特斯拉要开发芯片的意愿。 后来,马斯克证实了特斯拉正在开发自己的芯片。随后,Keller离开了特斯拉,但这并不影响特斯拉芯片计划的推进。现在特斯拉芯片负责人是Pe te r Bannon,Bann
[汽车电子]
AMOLED 需求起飞,6 年预估出货量狂翻逾 3 倍
主动有机发光二极体(AMOLED)手机荧幕越来越普及,且尺寸越做越大,未来需求将大幅成长。 Businesskorea 引述产业消息报导指出,AMOLED 面板今年出货量预估为 4.74 亿单位,2022 年出货更上看 11.54 亿单位,狂翻逾 3 倍。 今年拜 iPhone X 首度导入 AMOLED 面板至之赐,出货量预估成长 12.3%。2018、2019 年随着能见度提升,加上智慧型手表、平板等渗透率提高,AMOLED 出货成长率更分别上看 34.1% 与 39.3%。 小尺寸 AMOLED 面板目前呈现三星 Display 一家独大的局面,其市占率在至少为 98.5%。三星 Display 为维持领先优势,明年资本支出
[手机便携]
精准一投:vivo Xplay6库里TVC正式发布
3月17日,vivo官方放出了NBA当红球星斯蒂芬·库里为vivo Xplay6拍摄的TVC。自去年vivo Xplay6问世以来,库里一直担当Xplay6系列代言人。在这支TVC里展示了库里手持vivo Xplay6,运用专业级双摄技术拍照,最后精准一投,干净利落的球技,更是令众多粉丝尖叫。   现今消费者对手机产品的需求不断增加,除了外观、品质及体验,也更加讲究品牌精神的表达及共鸣。此次,vivo邀请库里作为新品代言人,其年轻、时尚、活力的风格与vivo的品牌契合度一致。作为NBA最好的三分球手,库里的投篮秘籍并不复杂。就是更专注地训练,采用更科学的投篮方式。正是由于他一直以来奉行的专注精神,专注成为更好的自己,让自己的每
[手机便携]
STM32F103C8T6学习笔记_串口USART的使用
1、 M bps 兆 比特每秒 Million bits per second (形容传输速率) 波特率(BaudRate)(bound ) 单位 Bd (形容传输速率时 Bd/s) 如果是二进制的话 , 都表示单位时间内传输的二进制数 2、波特率计算公式 baud=串口时钟(APB1 or APB1) / USART_BRR寄存器的值 Example 时钟108M (108000000 六个0) baud=115200MHz 则得寄存器值938 (0XA3AA) 3、 GPIO的复用 TXD Transmit(t
[单片机]
谷歌Nexus 6概念图曝光:5.7寸屏幕
    全新的谷歌Nexus 6将会配备更大的显示屏   新浪手机讯 5月7日上午消息,近日国外媒体曝光了一组谷歌Nexus 6概念设计图,并透露了Nexus 6的一些配置信息。   全新的谷歌Nexus 6将会配备更大的显示屏——5.7英寸,搭载高通骁龙810 64位处理器,内置3GB内存,有16、32、64GB三个容量版本可选,内置500万前置+1200万后置摄像头,支持4K视频录制。   同时,全新谷歌Nexus 6将很有可有由HTC代工,将于今年下半年发布。(基德)
[手机便携]
MediaTek助力三星推出首款支持Wi-Fi 6E的8K电视
2021年4月7日—— MediaTek携手三星推出首款支持Wi-Fi 6E的8K QLED 智能电视——三星 8K QLED Y21,它搭载了MediaTek MT7921AU 芯片组,通过先进的Wi-Fi 6E 功能为用户提供更高速的无线网络连接体验。继2020年双方合作推出三星首款支持Wi-Fi 6的8K电视之后,此次合作凭借最先进的无线连接特性和高品质的8K影像,将为用户带来更好的家庭娱乐体验。 MediaTek资深副总经理暨智能设备事业群总经理游人杰表示:“无论消费者用电视播放流媒体、玩游戏,还是运动健身等娱乐,都需要高速且可靠的网络连接。我们与三星的合作为消费者带来了最新的智能电视技术,支持丰富的场景应用。 Med
[新品]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved