课堂笔记

  1. 源代码

    /*file: hello.c*/
    
    #ifndef _KERNEL_
    #define _KERNEL_
    #endif
    #ifndef MODULE
    #define MODULE
    #endif #include <linux/module.h>
    #include <linux/kernel.h>
    #include <linux/init.h> static hello_init(void); //需要添加额外的函数申明
    void hello_exit(void); //_init and _exit is the special macro
    static int hello_init(void){ //去掉了函数名前的_init printk("Hello, world!\n");
    return 0;
    } void hello_exit(void){ //去掉了函数名前的_exit,否则编译无法完成
    printk("Good bye, world!\n");
    return 0;
    } module_init(hello_init);
    module_exit(hello_exit); MODULE_LICENSE("GPL"); // 开源协议许可

    注:

    • printk与printf类似,但是是运行在内核态,打印的日志文件在/var/log/messages
  2. 编写Makefile文件并运行

    obj-m += hello.o
    
    all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

    注:

    • 必须用该操作编译,否则会出现找不到asm/linkage.h的错误

    • 如果/lib/modules/3.10.0-514.26.2.el7.x86_64目录下的build文件为红色,则执行以下操作

    rm -f build  #删除build文件
    ln -s /usr/src/kernels/3.10.0-1160.11.1.el7.x86_64/ ./build #新建build文件并建立软链接

    make构建的文件

  3. 尝试添加和移除模块

    insmod hello.ko
    rmmod hello.ko

    如果执行成功,可以在/var/log/messages下查看是否有对应的日志打印

    注:

    • printk与printf类似,但是是运行在内核态,打印的日志文件在/var/log/messages
  4. 编写Makefile文件并运行

    obj-m += hello.o
    
    all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

    注:

    • 必须用该操作编译,否则会出现找不到asm/linkage.h的错误

    • 如果/lib/modules/3.10.0-514.26.2.el7.x86_64目录下的build文件为红色,则执行以下操作

        rm -f build  #删除build文件
      ln -s /usr/src/kernels/3.10.0-1160.11.1.el7.x86_64/ ./build #新建build文件并建立软链接

    make构建的文件

  5. 尝试添加和移除模块

    insmod hello.ko
    rmmod hello.ko

    如果执行成功,可以在/var/log/messages下查看是否有对应的日志打印

Linux内核驱动模块编写尝试的更多相关文章

  1. xmake v2.6.2 发布,新增 Linux 内核驱动模块构建支持

    Xmake 是一个基于 Lua 的轻量级跨平台构建工具. 它非常的轻量,没有任何依赖,因为它内置了 Lua 运行时. 它使用 xmake.lua 维护项目构建,相比 makefile/CMakeLis ...

  2. Linux 内核源码外编译 linux模块--编译驱动模块的基本方法

    1.先编写一个简单的hello模块,hello.c 源码如下: #ifndef __KERNEL__ # define __KERNEL__ #endif #ifndef MODULE # defin ...

  3. 向linux内核中添加外部中断驱动模块

    本文主要介绍外部中断驱动模块的编写,包括:1.linux模块的框架及混杂设备的注册.卸载.操作函数集.2.中断的申请及释放.3.等待队列的使用.4.工作队列的使用.5.定时器的使用.6.向linux内 ...

  4. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #3 如何编写内核模块

    HACK #3 如何编写内核模块 本节将介绍向Linux内核中动态添加功能的结构—内核模块的编写方法.内核模块Linux内核是单内核(monolithic kernel),也就是所有的内核功能都集成在 ...

  5. 编写一个简单的内核驱动模块时报错 “/lib/modules/3.13.0-32-generic/bulid: 没有那个文件或目录。 停止。”

    编写一个简单的内核驱动模块 static int hello_init() { printk(“hello,I am in kernel now\n”); ; } void addfunc(int a ...

  6. 在Ubuntu上为Android系统编写Linux内核驱动程序(老罗学习笔记1)

    这里,我们不会为真实的硬件设备编写内核驱动程序.为了方便描述为Android系统编写内核驱动程序的过程,我们使用一个虚拟的硬件设备,这个设备只有一个4字节的寄存器,它可读可写.想起我们第一次学习程序语 ...

  7. 在Ubuntu上为Android系统编写Linux内核驱动程序

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6568411 在智能手机时代,每个品牌的手机都有 ...

  8. linux内核代码的编写初步以及makefile的配置

    在linux内核代码开发中,头文件不能包含标准C头文件,只能采用GNC标准 而且内核开发中没有main函数,只有init 和 exit ,这是每个内核模块中必须要包含的函数模块. 在GNU C标准中, ...

  9. 【转载】黑客内核:编写属于你的第一个Linux内核模块

    黑客内核:编写属于你的第一个Linux内核模块

随机推荐

  1. LVS负载均衡群集部署——NAT模式

    LVS负载均衡群集部署--NAT模式 1.群集应用概述 2.NAT模式LVS负载均衡群集部署 1.群集应用概述: 存在的问题: 互联网应用中,随着站点对硬件性能.响应速度.服务稳定性.数据可靠性等要求 ...

  2. html页面动效

    找到了一个喜欢的黑客帝国动效"https://files.cnblogs.com/files/blogs/718959/codeMatrix-master.zip?t=1643081202& ...

  3. 2022寒假集训day5

    day5 五道栈的题加上字符串. 单调队列. T1 表达式括号匹配   洛谷P1739 题目描述 假设一个表达式有英文字母(小写).运算符(+,-,*,/)和左右小(圆)括号构成,以"@&q ...

  4. opencv安装实录附十几行C++实现的一个人脸识别demo

    前言: 之前写过一篇在nano上使用opencv,nano上默认是安装了opencv的库,除了nano,我们自己电脑上也想使用opencv做一些平时图像处理验证. 本来也是看一些资料安装好的,觉得也没 ...

  5. 用实例带你深入理解Java内存模型

    摘要:本文的目的来理解 J V M 与我们的内存两者之间是如何协调工作的. 本文分享自华为云社区<一文带你图解Java内存模型>,作者: 龙哥手记 . 我们今天要特别重点讲的,也就是我们本 ...

  6. 手写一个Java程序输出HelloWorld

    ` 创建一个Hello.java文件使用记事本打开 public class Hello{ public static void main(String [] args){ System.out.pr ...

  7. VS Code 在线运行:code-server部署(系列一)

    偶然间发现VS Code可以在线运行,闲来无事部署了一套试试效果,先上图,是不是很熟悉的感觉,初步体验基本跟本地运行效果一样. 进入正题 首先要准备一套linux环境,环境配置最低是1G内存.2核CP ...

  8. 使用 WebView2 封装一个生成 PDF 的 WPF 控件

    使用 WebView2 封装一个生成 PDF 的 WPF 控件 最近在迁移项目到 .net6,发现项目中用的 PDF 库不支持 .net6,于是想着换一个库.结果找了一大圈,发现不是版本不支持,就是收 ...

  9. wmware15安装centos7.9

    详细步骤如下: 下面位置应该写:D:\k8s\k8s-master01 也可以桥接 下面可以删除 从官方下载的,不需要test,所以选择第一个 默认英文的即可 改为上海 保持默认 配置静态ip 主机名 ...

  10. Vulhub-漏洞环境的搭建(详细版)

    安装Vulhub需要的基础环境 更新现有的软件 复制代码 1 2 sudo apt-get update sudo apt-get upgrade 安装Docker 复制代码 1 2 3 4 5 6 ...