LED灯驱动编写----对寄存器操作

本文详细介绍了如何编写LED灯驱动,通过直接操作寄存器,包括模块初始化、设备注册、struct cdev结构、file_operations操作以及ioctl命令的使用。通过内核模块和应用程序交互,实现了对LED灯的控制。
摘要由CSDN通过智能技术生成

LED灯驱动编写--寄存器操作


(转载请写明出处: http://blog.csdn.net/yby19870627/article/details/7407130 )


这里没有用的内存映射的方法,而是直接对寄存器进行操作,我建议在开发驱动的时候,用NFS挂载的方式进行开发,这样可以节省很多时间,NFS挂载方法可以从我以前的文章中找到。

平台:Fedora14

内核:linux-2.632.2

 

一、首先要编写最基本的模块,因为编程就是要一步一步调试的,这样才能发现问题,如果一开始不管三七二十一,先把代码写完再说,那当你make完看到那些错误的时候,那个时候,我估计你连死的心都有了。

 

1.        添加最基本的头文件:#include <linux/module.h>

                                                   #include <linux/init.h>

2.        编写模块初始化函数和模块推出函数

static      int   __init   Led_init(void)

{

                  printk("<0>module--->Led_init\n");

}
//--------------------------------------------------------------------------------

static    void   __exit   Led_exit(void)

{

             printk("<0>module--->exitok!\n");

}

//---------------------------------------------------------------------------------

module_init(Led_init);

module_exit(Led_exit);

 

3.        编译程序,然后再insmod led.ko/rmmod led

看看是否输出了代码里面的两条打印语句。

 

二、第一步通过之后,那么就要开始添加新的代码了,我们是要注册设备的,所以需要定义一个设备号变量,同时要注册到内核中还需要一个struct cdev结构的变量,所以要定义     

             struct  cdev  led_cdev;   

             dev_t   led_devno;

定义完之后还需要考虑到要有一个变量来存储主设备号,所以还要定义一个主设备号变量。而且还要定义主设备号和次设备号两个宏。

             #define   MAINLEDNO   108

            #define   MINORLEDNO   0 

            static   int   led_major;

 

 

定义struct  file_operations结构,一开始里面可以什么都不写。

 

struct  file_operations  led_ops={

         

 };

修改模块初始化函数。

static   int   __init   Led_init(void)

{

         printk("<0>module--->Led_init\n");

         int  result;

         /

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值