课堂笔记

  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. 解决"Uncaught (in promise) Error: Navigation cancelled from "/" to "/login" with a new navigation"报错处理

    Uncaught (in promise) Error: Navigation cancelled from "/" to "/login" with a ne ...

  2. 浅谈Java之反射

    反射 四种获取Class实例的方法 定义测试结构 获取属性结构 获取方法结构 获取构造器结构(包括父类泛型) 获取实现的接口 获取所在包 获取注解 获取并创建指定构造器 获取指定属性 获取并运行指定方 ...

  3. Kubernetes 集群日志 和 EFK 架构日志方案

    目录 第一部分:Kubernetes 日志 Kubernetes Logging 是如何工作的 Kubernetes Pod 日志存储位置 Kubelet Logs Kubernetes 容器日志格式 ...

  4. NVDA、争渡读屏语音开放API接口

    什么是读屏软件? 读屏软件是一种专为视力障碍人士设计的,能够辅助视障人士操作计算机的工具,它可以将屏幕上显示的内容用语音朗读出来,这样视障人士就可以正常使用电脑了. 知名的屏幕阅读软件国内有争渡读屏. ...

  5. 通过Dapr实现一个简单的基于.net的微服务电商系统(十八)——服务保护之多级缓存

    很久没有更新dapr系列了.今天带来的是一个小的组件集成,通过多级缓存框架来实现对服务的缓存保护,依旧是一个简易的演示以及对其设计原理思路的讲解,欢迎大家转发留言和star 目录:一.通过Dapr实现 ...

  6. 深入MySQL(二):MySQL的数据类型

    前言 对于MySQL中的数据类型的选择,不同的数据类型看起来可能是相同的效果,但是其实很多时候天差地别. 本章从MySQL中的常用类型出发,结合类型选择的常见错误,贯彻MySQL的常用类型选择. 常用 ...

  7. 超详细的Cookie增删改查

    目录 1,什么是 Cookie? 1.1,存储形式 1.2,常用属性 1.3,大小限制 2,增 or 改Cookie 3,查Cookie 4,删Cookie 1,什么是 Cookie? Cookie是 ...

  8. 聊聊几个阿里 P8、P9 程序员的故事

    大家好,我是对白. 阿里 P8 程序员年薪百万已经是公开的秘密了,有人关心他们年薪百万,而我更加关注阿里这些 P8.P9 程序员的成长故事,在聊这些大牛的故事之前,跟大家稍微简单聊下阿里技术人等级制度 ...

  9. jenkins针对不同用户显示不同项目

    网上看了别人写的博客有点头晕 比如:https://www.cnblogs.com/kazihuo/p/9022899.html  典型的权限混乱,te用户可以读re用户的项目,re用户可以读te用户 ...

  10. CentOS7安装及配置 Zabbix全步骤,超详细教程

    服务器太多,还在不同的平台和账户,监控不便 整个 Zabbix 监控,开始吧 一.关闭防火墙并开机不启动 sudo setenforce 0 sudo sed -i "s/SELINUX=e ...