3.我的第一个内核驱动

本文介绍了Linux内核驱动的基本结构和加载流程,包括头文件包含、模块的入口和出口、许可证声明。通过示例展示了如何编写一个简单的hello世界驱动,并详细解释了Makefile的内容及编译、加载、移除模块的命令。同时提到了使用modprobe加载模块的方法,并强调了驱动编译的注意事项,如内核源码版本匹配和架构差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.首先介绍一下内核驱动包含的内容

    头文件包含
    驱动模块的入口和出口
    声明信息
    功能实现


一般步骤

第一步,包含头文件:
    #include <linux/init.h> //包含宏定义的头文件
    #include <linux/module.h> //包含初始化加载模块的头文件

第二步,驱动模块的入口和出口
    module_init();
    module_exit();

第三步,声明模块拥有开源许可证
    MODULE_LICENSE("GPL");
#include <linux/init.h>
#include <linux/module.h>

static int hello_init(void){
    printk("hello kitty\n");
    return 0;
}

stataic void hello_exit(void){
    printk("bye bye\n");
    return;
}



module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL");
# @makefile
# 内核模块的Makefile文件名必须大写(Ubuntu上小写会报错,no such file or directory)
# 入口函数没有参数,要传入void 否则编译报错
#

LINUX_PATH=/lib/modules/$(shell uname    -r)/build

CURRENT_PATH=$(shell pwd)


obj-m += hello.o

all:
    make -C $(LINUX_PATH)  M=$(CURRENT_PATH)  modules
clean:
    make -C $(LINUX_PATH)  M=$(CURRENT_PATH)  clean

完成之后,执行命令

        sudo  make

即可看到生成的模块文件   hello.ko

插入模块执行命令:

         sudo    insmod   hello.ko

查看打印信息使用命令:

        sudo     dmesg

移除模块使用命令:

        sudo    rmmod    hello.ko

查看打印信息:

        sudo    dmesg

Makefile的说明

LINUX_PATH  #内核源码的路径
CURRENT_PATH  #当前路径

obj-m += hello.o  #编译生成模块


all:
    #进入内核源码路径,把当前的代码编译生成模块
    make -C  $(LINUX_PATH)  M=$(CURRENT_PATH) modules 
clean:
    make -C  $(LINUX_PATH)  M=$(CURRENT_PATH) clean

2.加载模块的另一种方式:modprobe

        a)把上面编译生成的hello.ko 拷贝到内核源码的目录:

               cp     hello.ko  /lib/modules/(你的内核目录 使用命令uname   -r获得)/

        b)执行命令  demod -a  

        c) 在任意目录下,执行 modprobe    hello  

                这里需要注意,使用命令  modprobe  只需要给出模块的名称即可。查看打印信息同i能insmod的方式

编译驱动注意事项:

        1.内核源码一定要先编译通过。

        2.编译驱动模块的内核源码一定要和开发板上运行的内核镜像是同一套

        3.注意ARM和 x86架构区别 

                进入到 /lib/modules/【内核源码路径】/build下,执行  sudo make menuconfig查看

                如果缺少对应的pkg包,请手动安装,如:sudo apt-get install libncurses5-dev

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值