1 什么是linux驱动

1

目录

1

一、什么是linux驱动?

1、驱动的作用

2、

3、驱动的分类

4、linux源码

5、最简单的linux驱动

二、如何编译驱动程序

-- 有两种编译方法:

-- 什么是Linux内核模块?

-- Linux内核模块的编译


一、什么是linux驱动?

1、驱动的作用

  • 从字面上解释,驱动就是“让硬件动起来”,所以驱动是直接和硬件打交道的,是底层硬件和上层软件的桥梁

2、

-- 无操作系统时的驱动(裸机)

  • 有的时候并不一定需要操作系统,比如用单片机进行简单的通断控制,从编程角度来说,直接控制寄存器就可以了,也就是和硬件打交道。

alt text

-- 有操作系统时的驱动(linux系统)

  • 从编程的角度看: 有了操作系统以后,编写驱动就变的比较复杂,要基于Linux的各种驱动框架进行编程。但是当驱动都按照系统给出的框架进行编程以后,就可以提供一个统一的接口给应用程序调用。(这里统一的接口指的时/dev下面的设备节点)

alt text

3、驱动的分类

-- linux将驱动分为字符设备、网络设备、块设备三类。

  • 字符设备指哪些必须以串行顺序一次进行访问的设备,如鼠标。
  • 块设备可以按照任意顺序进行访问,如硬盘。
  • 网络设备是面向数据包的接收和发送

4、linux源码

-- linux源码目录结构

  • linux内核源码包含多级目录,形成一个巨大的树状结构,进入源码所在的目录,就是linux源码的顶层目录。

alt text

5、最简单的linux驱动

alt text

-- 简单的helloworld驱动代码

#include <linux/module.h>
#include <linux/init.h>

static int helloworld_init(void)
{
    printk("helloworld!\n");
    return 0;
}

static int helloworld_exit(void)
{
    printk("helloworld!\n");
}

module_init(helloworld_init);
module_exit(helloworld_exit);

MODELU_LICENSE("GPL");
MODULE_AUTHOR("fashi");
MODULE_VERSION("v1.0");

alt text

二、如何编译驱动程序

-- 有两种编译方法:

  • 第一种编译方法:将驱动放在linux内核里面,然后编译linux内核。将驱动编译到linux内核里面。

  • 第二种编译方法:将驱动编译成内核模块,独立于linux内核以外。--用他的时候再把它加载到Linux内核

-- 什么是Linux内核模块?

  • 内核模块是linux系统中一个特殊的机制,可以将一些使用频率很少或者暂时不用的功能编译成内核模块,在需要的时候再动态加载到内核里面。

  • 使用内核模块可以减小内核的体积,加快启动速度。并且可以在系统运行的时候插入或者卸载驱动,无需重启系统。内核模块的后缀是.ko。

  • 可以在系统运行的时候将ko文件插入,不用的时候将ko文件从linux系统中卸载掉,无需重启linux系统。

-- Linux内核模块的编译

-- 把驱动编译成linux内核模块需要编写一个简单的Makefile。

  • 这个模板是通用的,无论用什么开发板,想把什么驱动编译成内核模块,都可以套用这个模板。
  • obj-m +=helloworld.o
    KDIR:=/home/topeet/linux-kernel
    PWD?=$(shell pwd)
    all:
    	make -C $(KDIR) M=$(PWD) modules
    clean:
    	rm -f *.ko*.o*.mod.c*.symvers*.order

alt text

  • 20
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值