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. OSTU二值化算法

    介绍 Ostu方法又名最大类间差方法,通过统计整个图像的直方图特性来实现全局阈值T的自动选取,其算法步骤为: 1) 先计算图像的直方图,即将图像所有的像素点按照0~255共256个bin,统计落在每个 ...

  2. 八步学会数据迁移:ETL工具kettle使用方法

    一.目的 将不同服务器上的表合并到另外一个服务器上.例如:将服务器1上的表A和服务器2上的表B,合并到服务器3上的表C 要求:表A需要被裁剪(去掉不必要的字段).表B需要增加一些字段 二.使用方法 ( ...

  3. Java 正则表达式 Pattern & Matcher

    通常会有这种需求: 在文档中搜索有规律的字符串,然后进行统计或者替换.Java.util.regex包下的Pattern和Matcher这两个类提供了通过正则表达式来匹配查询,甚至替换的功能.那么我们 ...

  4. Softmax回归 softMax回归与logistic回归的关系

    简介 在本节中,我们介绍Softmax回归模型,该模型是logistic回归模型在多分类问题上的推广,在多分类问题中,类标签  可以取两个以上的值. Softmax回归模型对于诸如MNIST手写数字分 ...

  5. Linux grep 命令大全

    grep: 用于模糊查找,在标准输入或者文件中 格式: grep [选项参数]...  PATTERN |FILE ... 选项参数说明: -E, --extended-regexp PATTERN ...

  6. spring3: 切面及通知实例 Aspectj的aop

    1.前置通知 接口: package chapter1.server; public interface IHelloService { public void sayAdvisorBefore(St ...

  7. Codeforces Round #394 (Div. 2) A. Dasha and Stairs

    A. Dasha and Stairs time limit per test:2 seconds memory limit per test:256 megabytes input:standard ...

  8. 释伴:Linux 上的 Shebang 符号(#!)

    使用Linux或者unix系统的同学可能都对#!这个符号并不陌生,但是你真的了解它吗? 本文了将给你简单介绍一下Shebang(”#!”)这个符号. 首先,这个符号(#!)的名称,叫做”Shebang ...

  9. Android自定义控件之仿美团下拉刷新

    美团的下拉刷新分为三个状态: 第一个状态为下拉刷新状态(pull to refresh),在这个状态下是一个绿色的椭圆随着下拉的距离动态改变其大小. 第二个部分为放开刷新状态(release to r ...

  10. New Concept English three (33)

    31 45 We have all experienced days when everything goes wrong. A day may begin well enough, but sudd ...