初识设备驱动程序之Hello world
2017-04-10 22:46
162 查看
设备驱动程序,就是驱动嘛,通过特定的程序驱使硬件响应一些特定的功能,也就是实现操作系统与硬件设备的通信。
linux系统将设备分成三种基本类型:
字符设备:能够像字节流一样被访问的设备,由字符设备驱动程序实现这种特性,通常实现open、close、read、write等系统调用,字符设备可以通过文件系统节点来访问,以 后要学习的LED驱动就是字符设备。
块设备:块设备也是通过文件系统节点访问,在内核中,块驱动程序具有与字符驱动程序完全不同的接口。
网络接口:由内核中的网络子系统驱动,负责发送和接受数据包。
下面先给出一个Hello World模块,一些解释已经备注上:
附上一个简单的Makefile:
将两个文件放在同一目录下,make以后会生成 “ .ko ” 文件。
接下来将.ko文件传到开发板上:
tftp -gr hello.ko 192.168.1.8 --------这里的地址是服务器的ip
然后可以加载模块 :insmod hello.ko,卸载模块可用rmmod hello。
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。
相关文章推荐
- Linux设备驱动程序,个人学习,第一个模块hello world
- [中英对照]User-Space Device Drivers in Linux: A First Look | 初识Linux用户态设备驱动程序
- 第二章 第二节 Linux设备驱动程序之--我的第一个程序 Hello World
- 初识linux字符设备驱动程序--2
- <linux设备驱动程序>hello world 模块——不用main函数的hello world
- 第一章 Windows设备驱动程序设计Hello World
- 第一章 Windows设备驱动程序设计Hello World
- 【记录】初识字符设备驱动程序
- 虚拟设备驱动程序的设计与实现
- LDD读书笔记——字符设备驱动程序
- linux字符设备驱动程序源文件
- 为多功能片上系统处理器编写 Linux 设备驱动程序
- 实战DeviceIoControl 之一:通过API访问设备驱动程序
- Linux下的硬件驱动——USB设备(下)&& Linux下PCI设备驱动程序开发
- Linux设备驱动程序学习(6)-高级字符驱动程序操作[(4)异步通知fasync]
- Linux设备驱动程序--学习笔记(1)
- linux驱动-USB驱动程序之USB设备驱动程序2鼠标用作键盘
- Linux设备驱动程序学习 高级字符驱动程序操作[阻塞型I/O和非阻塞I/O]
- usb设备驱动程序调试与测试技巧
- Linux设备驱动程序——设备驱动编程基础