Ubuntu下内核编程之第一个模块helloworld[通俗易懂]

Ubuntu下内核编程之第一个模块helloworld[通俗易懂]模块是驱动开发的必经之路,这也是我们在前边要构建内核源码树的目的所在。因为模块属于kernel编程了,和用户空间的c语言变成不同。他要依附于内核源码树的存在而存在,下面就开始我们的第一个模块的编写吧。     Ubuntu下内核编程之第一个模块——我的叫jun_module。随你怎么起名。以下是建立的全过程:     1、首先肯定是编写模块的源代码,和Makefile。我们建立一个专用

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

      模块是驱动开发的必经之路,这也是我们在前边要构建内核源码树的目的所在。因为模块属于kernel编程了,和用户空间的c语言变成不同。他要依附于内核源码树的存在而存在,下面就开始我们的第一个模块的编写吧。

      Ubuntu下内核编程之第一个模块——我的叫jun_module。随你怎么起名。以下是建立的全过程:

      1、首先肯定是编写模块的源代码,和Makefile。我们建立一个专用目录,我这里是kernel_test,在里边需要创建jun_module.c 和 Makefile 。

 

Ubuntu下内核编程之第一个模块helloworld[通俗易懂]


 

      2、然后让我们看看源代码的内容都是什么:

      下边是jun_module.c


/* * 2011-9-13 * author:jun */ #include<linux/init.h> #include<linux/module.h> /* 编写模块必须要包含的头文件 */ //初始化函数 static int __init jun_init(void) { printk(KERN_ALERT"Hello there,I'm jun,and welcome to my blog Dreambegin.\n"); return 0; } //退出用来断后的函数 static void __exit jun_exit(void) { printk(KERN_ALERT"Goodbye,nice to see you.\n"); } //对模块函数进行绑定 module_init(jun_init); module_exit(jun_exit); //许可协议及作者信息、可以不设置 MODULE_LICENSE("Dual BSD/GPL"); MODULE_AUTHOR("Jun"); 


然后是Makefile:


obj-m += jun_module.o # XXX.o对应于你的XXX.c同时也是你的模块名称 all: make -C /usr/src/linux-headers-$(shell uname -r) M=$(shell pwd) modules # 这里通过uname -r命令获取系统信息,同时拼装出内核源码树的路径; # pwd获取当前文件夹,这就要求着在你进行make的时候要在源码目录下。 clean: make -C /usr/src/linux-headers-$(shell uname -r) M=$(shell pwd) clean # 原理同上 

这里对Makefile的一些语法和相关的shell细节不再嗷述,可以在网上找到相关文章。

创建好对应文件,我们就可以make了。

      $make

      效果如图,切记所在目录为程序源文件目录。


Ubuntu下内核编程之第一个模块helloworld[通俗易懂]


可见已经编译成功,目录下出现了一堆文件。这里的jun_module.ko 就是我们用来加载的编译好的模块了。

      通过下边命令进行加载:

      $sudo insmod ./jun_module.ko

      然后通过下边命令查看一下是否加载:

      $sudolsmod


Ubuntu下内核编程之第一个模块helloworld[通俗易懂]


啊!多么完美啊。

 

      然后用下面命令看一下模块在初始化时的输出吧:

      $dmesg

      经过一瞬间的刷屏,终端听到了你想看到的那一行上——[ 2974.417502] Hellothere,I’m jun,and welcome to my blog Dreambegin. 看,就是这样:


Ubuntu下内核编程之第一个模块helloworld[通俗易懂]


啊哈,OK了,卸载和查看退出信息的任务就交给你了,记着要卸载了这模块啊,刘它存在又没什么用。好了,今天就到这里。

网络支持:http://junkor.info


【程序源码及本文doc文档下载:点击进入下载页

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/184583.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • maven快照版本_网站首页快照不更新

    maven快照版本_网站首页快照不更新Maven快照策略,什么是Maven快照。快照版本与Realse版本的区别。修改Maven快照拉取策略。Maven拉取策略

    2022年10月4日
    0
  • Windows下使用taskkill 命令结束进程

    Windows下使用taskkill 命令结束进程Java自学的网站(Java全栈工程师|以实例驱动学习|how2j.cn)在windows下,最常使用的结束进程的方法就是打开任务管理器,找到相应的进程,选择后点击“结束进程”按钮。但是如果任务管理器被禁用或者批量结束多个进程时,是使用taskkill命令。命令介绍在命令行下输入taskkill/?就能看到这个命令的一些介绍了。命令语法:…

    2025年7月27日
    1
  • VScode快捷键设置和代码简写

    VScode快捷键设置和代码简写1常用快捷键 单行注释 ctrl+/ 多行注释 alt+shift+a 复制上一行代码到下一行 alt+shift+↓ 移动代码到上一行或下一行 alt+↑,alt+↓ 返回到上次编辑位置 alt…

    2022年6月11日
    102
  • 模电总结(一)「建议收藏」

    模电总结(一)「建议收藏」本总结用于个人复习、考研需要,也可供其他小伙伴学习、借鉴。基于GAY电期末引导,先粗略基于gay电期末写五篇。所以只为建立系统,对细节并没有深挖。第一章半导体及其器件个人概述——这一章我们学什么呢?学半导体的基本知识,pn结是什么,二极管的构造与特性,如何分析二极管的基本电路。(具体如下)但是,因为这里是现初步建立体系,我们在这讨论的是一些枝干,对部分知识忽略。gay电在此考的是半导体的基本知识和pn结和二极管基本电路。这一章我们就讲这个。首先,我们要了解半导体器件是什么?..

    2022年6月20日
    27
  • Codeforces Round #277.5 (Div. 2)-D「建议收藏」

    Codeforces Round #277.5 (Div. 2)-D

    2022年1月28日
    37
  • mysql数据库安装(详细)

    mysql数据库安装(详细)安装MySQLMySQL是目前最为流行的开放源码的数据库,是完全网络化的跨平台的关系型数据库系统,它是由瑞典MySQLAB公司开发,目前属于Oracle公司。任何人都能从Internet下载MySQL软件,而无需支付任费用,并且“开放源码”意味着任何人都可以使用和修改该软件。一、下载MySQL第一步:下载mysql,地址:https://dev.mysql.com/downloads/installer/mysql官网上提供了两种安装方式,第一种是在线版联网安装,第二种是本地安装。二者的区别是前者是

    2022年5月11日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号