驱动之制作s3c_led.ko

来源:互联网 发布:java string split函数 编辑:程序博客网 时间:2024/05/29 17:16

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

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

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

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

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


Hello World模块,解释已经备注上:

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

创建一个Makefile

  1. 1 obj-m := s3c_led. o
  2. 2 KERNEL_DIR := ~/kernel/linux-3.0.54/  
  3. 3 PWD := $(shell pwd)  
  4. 4 all:    
  5. 5     make -C $(KERNEL_DIR) SUBDIRS=$(PWD) modules    
  6. 6 clean:    
  7. 7     rm *.o *.ko *.mod.c    
  8. 8   
  9. 9 .PHONY:clean  


然后保存退出   make一下


然后可以看见生成的s3c_led.ko文件

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

然后可以加载模块 :insmod,卸载模块可用rmmod 

有一个前提  你安装了网卡驱动  才能使用tftp

0 0