嵌入式Linux下LED报警灯驱动设计及编程(2)

2020-04-14 01:28

南京邮电大学计算机学院《嵌入式系统与开发》实验报告

. unlocked_ioctl=___ s3c6410_led_ioctl____, };

(3)添加模块标记代码

static int __init led_dev_init(void) {

int ret;

ret = _____ register_chrdev(0,\注册设备 printk (DEVICE_NAME\

return ret; }

static void __exit led_dev_exit(void) {

//注销设备 //add your code ____unregister_chrdev(leddevNo,\ }

module_init(led_dev_init); module_exit(led_dev_exit); MODULE_LICENSE(\

MODULE_AUTHOR(\5.2 编写Makefile并加载到内核 (1)编写Makefile如下:

obj-m:=_______ leddrv.o____________________ all:

make –C _ /opt/FriendlyARM/linux-2.6.38 _SUBDIRS=$(shell pwd) modules clean:

rm -rf *.ko *.o (3) 编译

使用命令编译:

_____#make_____________________________

编译完成后生成驱动文件_____leddrv.ko__________________。 (3) 加载驱动

使用命令进行驱动加载____#insmod leddrv.ko___________________。 (4)创建设备文件,将驱动设备号和设备文件名关联 相关命令为: _____#mknod /dev/leddev c 253 0___________________________。 5.3 编写应用程序 任务:要求每5秒点亮所有的LED灯,然后熄灭,过5秒再点亮LED灯 #include

南京邮电大学计算机学院《嵌入式系统与开发》实验报告

#include #include #include #include

#define ON 1 #define OFF 0

void main() {

fd=open(___”/dev/leddev”___,O_RDWR); if(fd<0) exit(1); while(1) { //点亮LED灯 ioctl(fd, ON); sleep(5); //熄灭LED灯 __ ioctl(fd, OFF);_____ sleep(5); }

close (fd); }

5.4 按照现在的驱动设计,假设要完成LED跑马灯实验,请问是否可行___B___[A.可行 B.不可行]。如果不可行的话,应该怎样改造驱动代码和应用程序。

驱动代码修改部分:

应用程序修改部分:

六. 实验5.2步骤

南京邮电大学计算机学院《嵌入式系统与开发》实验报告

6.1 实验预备知识

(1)相关硬件

看门狗硬件主要用于监控系统软件或者应用软件是否发生故障,如发生故障则可以通过发出硬件复位信号,使得系统能够重启,如果再配合相关自动加载应用程序等措施,则可以保证应用程序在发生故障后能够自恢复和重启。

看门狗硬件由看门狗控制器组成,位于S3C6410处理器内部,无须处理器外其它硬件配合,因此仅需直接编程端口寄存器,并封装成文件系统接口即可。

(2)端口寄存器及相关操作

在内核代码文件中已经定义好看门狗相关端口寄存器对应的虚地址,/opt/FriendlyARM/linux-2.6.38/arch/arm/plat-samsung/include/plat/regs-watchdog.h,下:

#define S3C2410_WTCON S3C_WDOGREG(0x00) #define S3C2410_WTDAT S3C_WDOGREG(0x04) #define S3C2410_WTCNT S3C_WDOGREG(0x08) 读寄存器函数

readl(寄存器虚地址); 写寄存器函数

writel(值(无符号整型), 寄存器虚地址);

6.2 看门狗驱动代码(s3c6410_wdtdrv.c)设计 (1)头文件包含和相关宏定义 #include

#include #include #include

#include #include #include #include

#include #include #include

#include #include

#include #include

#include

#undef S3C_VA_WATCHDOG #define S3C_VA_WATCHDOG (0)

#include

见如南京邮电大学计算机学院《嵌入式系统与开发》实验报告

(2)编写驱动接口函数

/*

功能:打开看门狗,允许复位,禁止看门狗中断,并设置看门狗最长看门时间 参数:无 返回值:无 */

void WdtConfig(void) {

//读出看门狗控制寄存器S3C2410_WTCON,保存原值,并按照要求修改 //最后写回看门狗端口控制寄存器S3C2410_WTCON //add your code unsigned int tmp;

tmp=(0XFF<<8)|(0X0<<6)|(0X1<<5)|(0X2<<3)|(0XFF<<8)|(0X0<<2)|(0X1<<1)|(0XFF<<8)|(0X1<<0); writel(tmp,S3C2410_WTCON); }

(2)和文件系统接口对接

static int s3c6410_wdt_open(struct inode *inode, struct file *filp) {

//打开看门狗,允许复位,禁止看门狗中断,并设置看门狗最长看门时间

//add your code

old_wdtcon_val=readl(S3C2410_WTCON); WdtConfig();

}

static ssize_t s3c6410_wdt_write(struct file *file, const char __user *data,size_t len, loff_t *ppos)

{

//把data指针所指向的用户空间值更新到看门狗计数寄存器S3C2410_WTCNT中

//add your code

unsigned int val; copy_from_user(&val,data,4); writel(val,S3C2410_WTCNT); return 0; }

static int s3c6410_wdt_release(struct inode *inode, struct file *filp) {

//恢复之前的看门狗端口控制寄存器的原始值

//add your code

writel(old_wdtcon_val,S3C2410_WTCON); return 0;

}

南京邮电大学计算机学院《嵌入式系统与开发》实验报告

struct file_operations wdt_fops= {

.open=_ s3c6410_wdt_open__, .release=_ s3c6410_wdt_release_, . write=_ s3c6410_wdt_write_, };

(3)添加模块标记代码

static int __init wdt_dev_init(void) {

int ret;

ret = __ register_chrdev(0,\注册设备 printk (DEVICE_NAME\

return ret; }

static void __exit wdt_dev_exit(void) {

//注销设备 //add your code ___ unregister_chrdev(wdtdevNo,\ }

module_init(wdt_dev_init); module_exit(wdt_dev_exit); MODULE_LICENSE(\

MODULE_AUTHOR(\5.2 编写Makefile并加载到内核 (1)编写Makefile如下: obj-m:=_______ wdtdrv.o______ all:

make –C ___ /opt/FriendlyARM/linux-2.6.38___SUBDIRS=$(shell pwd) clean:

rm -rf *.ko *.o (3) 编译

使用命令编译:

________#make_______________

编译完成后生成驱动文件______wdtdrv.ko_______。 (3) 加载驱动

使用命令进行驱动加载___# insmod wdtdrv.ko____________________。 (4)创建设备文件,将驱动设备号和设备文件名关联 相关命令为:

modules


嵌入式Linux下LED报警灯驱动设计及编程(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:学士论文 任务书

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: