课堂笔记

  1. 源代码

    1. /*file: hello.c*/
    2. #ifndef _KERNEL_
    3. #define _KERNEL_
    4. #endif
    5. #ifndef MODULE
    6. #define MODULE
    7. #endif
    8. #include <linux/module.h>
    9. #include <linux/kernel.h>
    10. #include <linux/init.h>
    11. static hello_init(void); //需要添加额外的函数申明
    12. void hello_exit(void);
    13. //_init and _exit is the special macro
    14. static int hello_init(void){ //去掉了函数名前的_init
    15. printk("Hello, world!\n");
    16. return 0;
    17. }
    18. void hello_exit(void){ //去掉了函数名前的_exit,否则编译无法完成
    19. printk("Good bye, world!\n");
    20. return 0;
    21. }
    22. module_init(hello_init);
    23. module_exit(hello_exit);
    24. MODULE_LICENSE("GPL"); // 开源协议许可

    注:

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

    1. obj-m += hello.o
    2. all:
    3. make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
    4. clean:
    5. 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文件为红色,则执行以下操作

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

    make构建的文件

  3. 尝试添加和移除模块

    1. insmod hello.ko
    2. rmmod hello.ko

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

    注:

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

    1. obj-m += hello.o
    2. all:
    3. make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
    4. clean:
    5. 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文件为红色,则执行以下操作

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

    make构建的文件

  5. 尝试添加和移除模块

    1. insmod hello.ko
    2. 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. python 使用pip安装包的总结

    multiprocessing.logging模块安装 如果使用在cmd中使用 pip install multiprocessing 会报错, 将命令改为 pip3 install multipro ...

  2. axios请求配置

    全局配置示例(在js文件配置): axios.defaults.baseURL = 'https://api.example.com'; axios.defaults.headers.common[' ...

  3. ios真机弱网测试

    一.开启苹果手机开发者选项 首先你需要将iPhone和一台Mac电脑相连接,然后在Mac上打开Xcode开发工具,此时你iPhone的设置里就会出现"开发者"这个选项了. 二.进入 ...

  4. Java中==、equals、hashCode的区别

    "=="是运算符,用来比较两个值.两个对象的内存地址是否相等: "equals"是Object类的方法,默认情况下比较两个对象是否是同一个对象,内部实现是通过& ...

  5. Apache虚拟主机的搭建及相关问题解决

    在开发的过程中,很多时候项目的部署都需要在本地进行虚拟服务器的模拟搭建,所以具体的配置流程为下,并且把自己遇到的问题跟大家分享. 1.Apache配置文件httpd.conf 找到   # Virtu ...

  6. Solution -「BZOJ 3331」压力

    \(\mathcal{Description}\)   Link.   给定一个 \(n\) 个点 \(m\) 条边的连通无向图,并给出 \(q\) 个点对 \((u,v)\),令 \(u\) 到 \ ...

  7. Asp.Net Core: Swagger 与 Identity Server 4

    Swagger不用多说,可以自动生成Web Api的接口文档和客户端调用代码,方便开发人员进行测试.通常我们只需要几行代码就可以实现这个功能: ... builder.Services.AddSwag ...

  8. prometheus监控java项目(jvm等):k8s外、k8s内

    前言 虽然可以使用jvisualvm之类的工具监控java项目,但是集群环境下,还是捉襟见肘,下面介绍如何用主流的prometheus来监控java项目. java项目配置 在pom.xml中添加依赖 ...

  9. HttpClient的使用(get、post请求)

    添加pom依赖 <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <d ...

  10. 基于IPv6的RIPng路由协议测试——信而泰网络测试仪实操

    关键词 IPv6; RIPng; 协议测试; 内部网关协议; 外部网关协议 前言:在国际性网络中,如因特网,拥有很多应用于整个网络的路由选择协议.形成网络的每一个自治系统(AS),都有属于自己的路由选 ...