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. JavaEE之Junit单元测试

    1编写测试类,简单理解Junit可以部分用于取代java的main方法 2在测试类方法上添加注解 @Test 3 @Test修饰的方法要求:public void 方法名() {…} ,方法名自定义建 ...

  2. IE10下阿里旺旺无法快速登录解决办法

    一直都是用Chrome浏览器的,如果已经登录了旺旺,打开淘宝登录的时候都是会有快速登录的,免得手工输入用户名密码了.不经意间用IE10打开淘宝,登录时发现无法使用快速登录,一番研究后发现,IE做了保护 ...

  3. Spring boot 与mybatis 多数据源问题

    https://www.cnblogs.com/ityouknow/p/6102399.html Spring Boot 集成Mybatis实现多数据源 https://blog.csdn.net/m ...

  4. numpy数组各种乘法

    In [34]: a Out[34]: array([[1, 4], [5, 6]]) In [35]: b Out[35]: array([[4, 1], [2, 2]]) In [36]: np. ...

  5. Java_WebKit

    1. http://tieba.baidu.com/p/2807579276 下载地址: http://qtjambi.org/downloads https://qt.gitorious.org/q ...

  6. 不合法的请求字符,不能包含\uxxxx格式的字符

    不合法的请求字符,不能包含\uxxxx格式的字符 ,不支持数组转json_encode()格式, 需要直接将数组,拼合成 json格式 ** * 微信api不支持中文转义的json结构 * @para ...

  7. 四十五 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的bool组合查询

    bool查询说明 filter:[],字段的过滤,不参与打分must:[],如果有多个查询,都必须满足[并且]should:[],如果有多个查询,满足一个或者多个都匹配[或者]must_not:[], ...

  8. eclipse配置tomcat运行项目访问不加项目名

  9. 【sparkSQL】DataFrame的常用操作

    scala> import org.apache.spark.sql.SparkSession import org.apache.spark.sql.SparkSession scala> ...

  10. ElasticSearch6.0 Java API 使用 排序,分组 ,创建索引,添加索引数据,打分等(一)

    ElasticSearch6.0  Java API  使用     排序,分组 ,创建索引,添加索引数据,打分等 如果此文章对你有帮助,请关注一下哦 1.1 搭建maven 工程  创建web工程 ...