1、hello_drv.c

(1) 初始化和卸载函数的格式是固定的,函数名自定义

(2) printk是内核的打印函数,用法与printf一致

(3) MODULE_LICENSE:模块代码支持开源协议(必须包含此项)

MODULE_AUTHOR:模块作者

MODULE_DESCRIPTION:模块简单描述

MODULE_VERSION:模块代码版本

MODULE_ALIAS:模块的别名

MODULE_DEVICE_TABLE:模块支持什么设备

// 模块化程序必须包含的两个头文件
#include <linux/module.h>
#include <linux/init.h> // __init 标记为初始化代码,仅在初始化时使用
static int __init hello_init(void)
{
printk("-----%s-----\n", __FUNCTION__); return 0;
} // __exit 标记为卸载函数,仅在卸载时使用
static void __exit hello_exit(void)
{
printk("-----%s-----\n", __FUNCTION__);
} // 模块入口函数,insmod会调用hello_init
module_init(hello_init);
// 模块出口函数,rmmod会调用hello_exit
module_exit(hello_exit); // 模块遵循开源协议
MODULE_LICENSE("GPL");
// 模块的开发者
MODULE_AUTHOR("Aaron Lee");

2、Makefile

在模块源码目录下使用make指令会自动调用当前目录下的Makefile文件来编译生成hello_drv.ko

# KERNEL_DIR为内核源码路径变量,根据实际情况选择编译过的源码路径
KERNEL_DIR = /home/lialong/iTop4412_Kernel_3.0
# CUR_DIR为需要编译的文件路径,$表示取变量值
CUR_DIR = $(shell pwd) # 驱动代码文件名
DRV_NAME = hello_drv
# 应用代码文件名
#USR_NAME = hello_app # -C 指定内核Makefile文件的路径
# M 指定要编译代码的路径
# modules 将程序编译成.ko文件
# arm-none-linux-gnueabi-gcc使用交叉编译工具编译应用层代码
all:
make -C $(KERNEL_DIR) M=$(CUR_DIR) modules
# arm-none-linux-gnueabi-gcc $(USR_NAME).c -o $(USR_NAME) # make clean
# 调用内核中make clean方法在本目录下使用
# 删除编译产生的后缀为.o的文件
clean:
make -C $(KERNEL_DIR) M=$(CUR_DIR) clean
rm -rf *.o # 需要编译的的文件
obj-m += $(DRV_NAME).o

3、加载模块 insmod hello_drv.ko

打印 -----hello_init-----

4、卸载模块 rmmod hello_drv (卸载不加.ko后缀)

打印 -----hello_exit-----

Linux 简单字符设备驱动的更多相关文章

  1. 【Linux-驱动】简单字符设备驱动结构和初始化

    (1)在编写简单字符设备驱动的时候,首先要申请一个设备结构struct cdev: struct cdev { struct kobject kobj; struct module *owner; / ...

  2. 【转】linux设备驱动程序之简单字符设备驱动

    原文网址:http://www.cnblogs.com/geneil/archive/2011/12/03/2272869.html 一.linux系统将设备分为3类:字符设备.块设备.网络设备.使用 ...

  3. Linux 简单字符设备驱动程序 (自顶向下)

    第零章:扯扯淡 特此总结一下写的一个简单字符设备驱动程序的过程,我要强调一下“自顶向下”这个介绍方法,因为我觉得这样更容易让没有接触过设备驱动程序的童鞋更容易理解,“自顶向下”最初从<计算机网络 ...

  4. linux学习--字符设备驱动

    目录 1.字符设备驱动抽象结构 2.设备号及设备节点 2.1 设备号分配与管理 2.2 设备节点的生成 3.打开设备文件 linux驱动有基本的接口进行注册和卸载,这里不再做详细说明,本文主要关注li ...

  5. arm-linux字符设备驱动开发之---简单字符设备驱动

    一.linux系统将设备分为3类:字符设备.块设备.网络设备.使用驱动程序: 1.字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据.字符设备是面 ...

  6. Linux实现字符设备驱动的基础步骤

    Linux应用层想要操作kernel层的API,比方想操作相关GPIO或寄存器,能够通过写一个字符设备驱动来实现. 1.先在rootfs中的 /dev/ 下生成一个字符设备.注意主设备号 和 从设备号 ...

  7. linux driver ------ 字符设备驱动 之 “ 创建设备节点流程 ”

    在字符设备驱动开发的入门教程中,最常见的就是用device_create()函数来创建设备节点了,但是在之后阅读内核源码的过程中却很少见device_create()的踪影了,取而代之的是device ...

  8. 【Linux 驱动】简单字符设备驱动架构(LED驱动)

    本文基于icool210开发板,内核版本:linux2.6.35: 驱动代码: (1)头文件:led.h #ifndef __LED_H__ #define __LED_H__ #define LED ...

  9. Linux高级字符设备驱动

    转载:http://www.linuxidc.com/Linux/2012-05/60469p4.htm 1.什么是Poll方法,功能是什么? 2.Select系统调用(功能)      Select ...

随机推荐

  1. angularjs Dom方式访问疑似可以访问ifame结构项目

    一.定位需要访问控制器元素 var currObj = document.querySelector('[ng-controller="munuListCtrl"]'); 或者 v ...

  2. 解析WEB开发编码问题

    解析WEB开发编码问题 URL: http://tcking.javaeye.com/blog/726643 在进行web开发的时候经常会遇到乱码的问题,乱码一般出现在: 1.写在jsp文件中的中文变 ...

  3. NO.3 Android SDK 高效更新

      一.修改协议 SDK Manager下Tools->Options,选中  “Force https://… sources to be fetched using http://…”  既 ...

  4. SSO 证书配置

    ssodev.crt为开发环境证书ssotest.crt为测试环境证书 将证书拷贝到目录:{JDK}\jre\lib\security 其中 {JDK} 是实际安装JDK的位置.然后cmd进入命令窗口 ...

  5. Valid Number,判断是否为合法数字

    问题描述: Validate if a given string is numeric. Some examples:"0" => true" 0.1 " ...

  6. 矩阵螺旋遍历Spiral Matrix,Spiral Matrix2

    SpiralMatrix: Given a matrix of m x n elements (m rows, n columns), return all elements of the matri ...

  7. 画龙点睛 之RabbitMQ 初来乍到

    消息队列解决了什么问题 1. 异步处理 2. 应用解耦 3. 流量削峰 4. 日志处理...... 安装RabbitMQ (这里的安装我只仅仅说一下linux 的安装 如果想安装windows 版 可 ...

  8. Reflection01_获取Class对象

    1.java 代码: package reflectionZ; public class TreflectionZ { public static void main(String[] args) t ...

  9. codeforces 820A. Mister B and Book Reading 解题报告

    题目链接:http://codeforces.com/problemset/problem/820/A 坑爹题目,坑爹题目,坑爹题目....汗 = =!  后台还110个 test 有个地方需要注意下 ...

  10. 为啥YII2 会出现 mcrypt_generic_init(): Key size is 0

    解决方案如下: (关键) 示例代码中,加密解密类的实例创见通过 Class 同名方法 的方式创建. public function WXBizMsgCrypt($token, $encodingAes ...