初识设备驱动程序之Hello world

设备驱动程序,就是驱动嘛,通过特定的程序驱使硬件响应一些特定的功能,也就是实现操作系统与硬件设备的通信。

linux系统将设备分成三种基本类型:

   字符设备:能够像字节流一样被访问的设备,由字符设备驱动程序实现这种特性,通常实现open、close、read、write等系统调用,字符设备可以通过文件系统节点来访问,以    后要学习的LED驱动就是字符设备。

   块设备:块设备也是通过文件系统节点访问,在内核中,块驱动程序具有与字符驱动程序完全不同的接口。

   网络接口:由内核中的网络子系统驱动,负责发送和接受数据包。


下面先给出一个Hello World模块,一些解释已经备注上:

/*********************************************************************************
  2  *      Copyright:  (C) 2017 minda
  3  *                  All rights reserved.
  4  *
  5  *       Filename:  hello.c
  6  *    Description:  This file 
  7  *                 
  8  *        Version:  1.0.0(04/09/2017)
  9  *         Author:  tangyanjun <519656780@qq.com>
 10  *      ChangeLog:  1, Release initial version on "04/09/2017 03:22:01 AM"
 11  *                 
 12  ********************************************************************************/
 13 #include <linux/init.h>            //指定初始化和清除函数
 14 #include <linux/kernel.h>       //包含内核打印函数printk函数
 15 #include <linux/module.h>     //包含有可装载模块需要的大量符号和函数的定义
 16 
 17 #define MOD_AUTHOR                "TangYanJun <519656780@qq.com>"     //模块作者
 18 #define MOD_DESC                  "It's just a Linux kernel module sample!"       //模块用途说明
 19 
 20 
 21 static int __init hello_init(void)          //初始化函数
 22 {
 23     printk("Welcome to Lingyun Embedded System Trainning!\n");
 24     printk("Official Website:  http://mcuos.com/thread-7178-1-1.html\n");
 25     return 0;             //成功运行返回0
 26 }
 27 
 28 static void __exit hello_exit(void)     //清除函数
 29 {
 30     printk("Wow! It's very good and I have learn much from it, thanks!\n");
 31     return ;
 32 }
 33 
 34 module_init(hello_init);      //说明内核初始化函数所在的位置
 35 module_exit(hello_exit);     //帮助内核找到模块的清除函数
 36 
 37 MODULE_AUTHOR(MOD_AUTHOR);               //模块作者
 38 MODULE_DESCRIPTION(MOD_DESC);            //模块用途说明
 39 MODULE_LICENSE("GPL");                   //代码所使用的许可证    
 40 
附上一个简单的Makefile:
  1 obj-m := hello.o
  2 KERNEL_DIR := ~/kernel/linux-3.0.54/
  3 PWD := $(shell pwd)
  4 all:  
  5     make -C $(KERNEL_DIR) SUBDIRS=$(PWD) modules  
  6 clean:  
  7     rm *.o *.ko *.mod.c  
  8 
  9 .PHONY:clean
将两个文件放在同一目录下,make以后会生成 “ .ko  ” 文件。

接下来将.ko文件传到开发板上:
tftp -gr hello.ko 192.168.1.8    --------这里的地址是服务器的ip

然后可以加载模块 :insmod hello.ko,卸载模块可用rmmod hello。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值