博客
关于我
4.【linux驱动】hello_world
阅读量:680 次
发布时间:2019-03-17

本文共 854 字,大约阅读时间需要 2 分钟。

hello_world模块开发指南

模块开发

我们需要将一个简单的内核模块开发出来,模块名称为hello_world。以下是实现步骤:

  • 创建与模块相关的C文件
  • 包含必要的头文件
  • 定义模块的初始化和卸载函数
  • 使用 printk输出日志信息
  • 代码示例如下:

    #include 
    #include
    #include
    MODULE_LICENSE("GPL");static int __init hello_init(void) { printk("hello init\n"); return 0;}static void __exit hello_exit(void) { printk("hello exit\n");}module_init(hello_init);module_exit(hello_exit);

    Makefile编译

    这部分将介绍如何使用Makefile来编译内核模块。我们将使用Kconfig机制来进行配置。

  • 打开终端,进入内核源码目录
  • 执行编译命令:
  • make -C /home/minicoco/Dev/Dev/nanopi/kernel/linux-3.4.y M=`pwd`
    1. Makefile中添加以下配置:
    2. hello: make -C ${KERNEL_DIR} M=`pwd` hello_world.oclean: make -C ${KERNEL_DIR} M=`pwd` cleanobj-m += hello_world.o

      这样模块将会在当前目录输出。

      加载与卸载测试

      在完成编译后,我们需要测试模块的加载与卸载过程。

    3. 使用以下命令加载模块:
    4. insmod hello_world.ko
      1. 模块加载成功后,查看日志以确认是否成功加载:
      2. dmesg | tail
        1. 卸载模块使用以下命令:
        2. rmmod hello_world

          在卸载后,再次查看日志以确认模块是否成功卸载。

    转载地址:http://ypzhz.baihongyu.com/

    你可能感兴趣的文章
    Objenesis创建类的实例
    查看>>
    OBObjective-c 多线程(锁机制) 解决资源抢夺问题
    查看>>
    OBS studio最新版配置鉴权推流
    查看>>
    Obsidian的使用-ChatGPT4o作答
    查看>>
    Obsidian笔记记录GPT回复的数学公式无缝转化插件Katex to mathjax
    查看>>
    ObsoleteAttribute 可适用于除程序集、模块、参数或返回值以外的所有程序元素。 将元素标记为过时可以通知用户:该元素在产品的未来版本中将被移除。...
    查看>>
    OC block声明和使用
    查看>>
    OC Xcode快捷键
    查看>>
    oc 中的.m和.mm文件区别
    查看>>
    OC 中的重写 OC中没有重载 以及隐藏
    查看>>
    OC 内存管理黄金法则
    查看>>
    oc57--Category 分类
    查看>>
    occi库在oracle官网的下载针对vs2008
    查看>>
    OceanBase 安装使用详细说明
    查看>>
    OceanBase详解及如何通过MySQL的lib库进行连接
    查看>>
    ocp最新题库之052新题带答案整理-36题
    查看>>
    OCP题库升级,新版的052考试题及答案整理-18
    查看>>
    OCR:文字识别(最详细教程)
    查看>>
    OCR使用总结
    查看>>
    Octotree Chrome插件离线安装
    查看>>