《ARM11 6410--嵌入式Linux驱动程序开发实验》由会员分享,可在线阅读,更多相关《ARM11 6410--嵌入式Linux驱动程序开发实验(6页珍藏版)》请在金锄头文库上搜索。
1、 咨询热线:0769-26980668 地址:东莞市莞太路 34 号创意产业园传 真:0769-26980673 网址: 嵌入式学院目录实验 2-2Linux驱动程序开发 . 2 咨询热线:0769-26980668 地址:东莞市莞太路 34 号创意产业园传 真:0769-26980673 网址: 嵌入式学院实验 2-2Linux 驱动程序开发 实验目的体验 Linux 驱动程序开发 实验要求1、 在 PC 机上编写 Linux 驱动代码,并交叉编译2、 将驱动模块拷贝到开发板加载验证 实验步骤1、 Linux 驱动模块开发(1) 、源码位置: 实验代码/2-2Linux 驱动程序/1_模块演
2、示(2) 、源码分析: dev.c:#include#include#includestaticintdev_init(void) printk(loaddriver!n); return0;staticvoiddev_exit(void) printk(unloaddriver!n);module_init(dev_init);/注册模块加载函数module_exit(dev_exit);/注册模块卸载函数MODULE_LICENSE(DualBSD/GPL);/许可权限说明 咨询热线:0769-26980668 地址:东莞市莞太路 34 号创意产业园传 真:0769-26980673 网址
3、: 嵌入式学院 Makefile:obj-m:=demo.o#使用demo.o建立模块demo.kodemo-objs:=dev.o #使用 dev.o(有多个的话列在这里)建立 demo.oKDIR:=/KDIR-X86#内 核源码目录PWD:=$(shellpwd)#当前目录defalt: $(MAKE)-C$(KDIR)M=$(PWD)modules #编译模块clean: $(MAKE)-C$(KDIR)M=$(PWD)clean #清空编译(3) 、编译模块:make生成驱动模块文件:demo.ko(4) 、在 PC 上加载模块:insmoddemo.ko 可以看到控制台上打印出模块
4、加载内核信息:loaddriver!如果是远程登录控制台(如 putty 登录),可以用 dmesg 显示该内核信息(5) 、卸载模块:rmmoddemo 可以看到控制台上打印出模块卸载内核信息:unloaddriver!2、 Linux 字符设备驱动开发(1) 、源码位置: 实验代码/2-2Linux 驱动程序/2_LED 控制演示(2) 、源码分析: dev.c#include#include#include#include#include#include 咨询热线:0769-26980668 地址:东莞市莞太路 34 号创意产业园传 真:0769-26980673 网址: 嵌入式学院#i
5、ncludeleds.h#defineLEDS_DEV_NAMEdevleds/led 灯设备文件#defineLEDS_DEV_MAJOR240/led灯主设备号/LED 灯写操作ssize_tleds_write(structfile*filep,constchar*buf,size_tcount,loff_t*f_pos) intret=0; unsignedchardata=0; ret=get_user(data,buf);/从应用层获得 LED 灯端口数据 if(ret#include#include#include/初始化 LED 灯voidinit_leds(void) uns
6、ignedinttmp=0; tmp=readl(S3C64XX_GPKCON);/读出原始值 tmp=(tmp/GPK4-7 配置为输 出 writel(tmp,S3C64XX_GPKCON);/设置更改值 /显示 LED 灯/data:LED 灯对应端口值,只取后 4 位,相应位为 0 则点亮 LEDvoidset_leds(unsignedchardata) unsignedinttmp=0; tmp=readl(S3C64XX_GPKDAT); /读出原始值 tmp/LED4-7对应端口清0 tmp|=(data /设置 LED4-7 对应端口值 咨询热线:0769-26980668
7、地址:东莞市莞太路 34 号创意产业园传 真:0769-26980673 网址: 嵌入式学院 writel(tmp,S3C64XX_GPKDAT); leds.h#ifndef_LED_PORT_H#define_LED_PORT_H/初始化 LED 灯voidinit_leds(void);/设置 LED 灯voidset_leds(unsignedchardata);#endif Makefileobj-m:=demo.o demo-objs:=dev.oleds.oKDIR:=/KDIR-ARM #内核源码目录PWD:=$(shellpwd)#当前目录defalt: $(MAKE)-C$(KDIR)M=$(PWD)modulesclean: $(MAKE)-C$(KDIR)M=$(PWD)clean(3) 、编译模块:make生成驱动模块文件:demo.ko(4)、关闭开发板上的 LED 流水灯服务:killallled-player(5) 、在开发板上加载模块:insmoddemo.ko,开发板 LED1-4 被初始化为全灭(6) 、创建设备文件:mknod/dev/devledsc24032(7) 、等待应用程序操作 LED 流水灯