- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
android底层开发流程_从linux驱动到APK调用_图文详解
第一步:在 Linux 下编写驱动程序
1,在 Linux3.0/driver/ -mkdir hello_me
2,在 hello_me 目录下,新建编写 makefiel 和 Kconfig
makefile 如下:
[csharp] view plaincopyprint?
1. #
2. # Makefile for HELLO_ME_LEDS
3. #
4.
5. # SPI testing only for (using spidev driver)
6. # \file - spi_test.c
7.
8. # \version 1.0.0
9.
10. # \date 2014年 04月 23日
11.
12. # \author jiangdou jiangdouu88@126.com
13.
14. # Copyright (c) 2014 jiangdou. All Rights Reserved.
15.
16. obj-$(CONFIG_HELLO_ME_LEDS) += leds.o64. .owner = THIS_MODULE, /* 这是一个宏,推向编译模块时自动创建的__this_module变量
*/
65. .open = led_drv_open, /*函数指针赋值*/
66. .write = led_drv_write, /*函数指针赋值*/
67. };
68. /*主设备号变量*/
69. int major;
70. /*当执行 insmod命令的时候这个函数会被执行 */
71. static int led_drv_init(void)
72. {
73.
74.
75. pr_err(leds_init by jiangdoun);
76. /*注册一个 LED设备,参数 0表示让操作系统分配主设备号,分配好了之后返回给 major */
77. major = register_chrdev(0, jiangdou_led, led_drv_fops);
78. /*创建设备节点,有了这两个函数,我们在文件系统里面就会看到/dev/led */
79. leddrv_class = class_create(THIS_MODULE,jiangdou_led);
80. device_create(leddrv_class,NULL,MKDEV(major,0),NULL,jiangdou_led);
81. /*linux系统里面都是虚拟地址 ioremap就是将虚拟地址转换为物理地址,然后我们可以对寄存器
进行操作
82. *第一个参数表示需要映射的基地址,第二个参数表示长度,即基地址+0×10*/
83. gpe_cfg0 = (volatile unsigned long *)ioremap(GPE_CFG0,20);//20表示 20 byte,5个
32
84. // /*0×A0 = 0×90 +4*4*/
85. gpe_date = gpe_cfg0 + 4;
86. return 0;
87. }
88. /*当执行 rmmod的时候会被执行*/
89. static void led_drv_exit(void)
90. {
91. /*注销 LED设备*/
92. unregister_chrdev(major, led); // 卸载
93. /*释放申请的地址*/
94. iounmap(gpe_cfg0);
95. /*销毁创建的设备节点*/
96. device_destroy(leddrv_class,MKDEV(major,0));
97. class_destroy(leddrv_class);
98. printk(KERN_ALERTleds unregister\n);
99. }
100./*linux设备驱动的两个修饰符*/
101.module_init(led_drv_init);
102.module_exit(led_drv_exit);103.
104./*遵循 GPL协议*/
105.MODULE_AUTHOR(by jiangdou);
106.MODULE_LICENSE(GPL);
5,在 Linux3.0/driver/makefile 的修改,如下:
[cpp] view plaincopyprint?
1. #
2. # Makefile for the Linux kernel device drivers.
3. #
4. # 15 Sep 2000, Christoph Hellwig hch@
5. # Rewritten to use lists instead o
您可能关注的文档
- 05第五章 稳态工况法.doc
- 07-经颈静脉肝内门体静脉分流术临床技术指南.doc
- 08P15T0A_900090(地毯).doc
- 09李有余:援赤道几内亚马拉博电视中心项目施工组织设计目录.doc
- 09 重要旅客运输.pdf
- 09补充定额说明及费率汇总整理.doc
- 08_技术标准和要求专用部分内容.doc
- 0AWA6218C型噪声统计分析仪.doc
- 10 中国凯娅尼营运模式-06.16-简体中文-CN.doc
- 09-大连医科大学附属第一医院同泰住院部.doc
- 2021-2022学年陕西省三原县北城中学高一月考数学试卷.docx
- 2021-2022学年吉林省辉南县第六中学高一上学期周测数学试卷.docx
- 安徽省亳州市第五完全中学2021-2022学年高一上学期期中考试历史试题.doc
- 2021-2022学年黑龙江绥化市第一中学高一上学期期中考试数学试卷.doc
- 2021-2022学年河南省商丘一中高一上学期期中语文试题.docx
- 2020-2021学年河北省衡水市第二中学高一上学期期中语文试题(解析版).doc
- 2020-2021学年河北省衡水市第二中学高一上学期期中语文试题.doc
- 2020-2021学年四川省资阳市高一上学期期末语文试题.docx
- 2021-2022学年福建省泉州市永春县一中高一上学期期中语文试题(解析版).doc
- 2020-2021学年四川省资阳市高一下学期期末语文试题.docx
文档评论(0)