1、首先选择Linux系统这里以Centos7.4系统为例:

2、安装好编译环境:yum, make,gcc,vim;

3、新建一个文件夹

注意:

  • Makefile 文件的命名注意M需要大写,否则会报错。
  • 在Makefile文件中make命令前应为tab制表符。

hello.c文件内容为:

//必要的头文件
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
//模块许可证声明(必须)
MODULE_LICENSE("Dual BSD/GPL");
//模块加载函数(必须)
static int hello_init(void)
{printk(KERN_ALERT "Hello World enter/n");return 0;
}
//模块卸载函数(必须)
static void hello_exit(void)
{printk(KERN_ALERT "Hello World exit/n");
}
//模块的注册
module_init(hello_init);
module_exit(hello_exit);
//声明模块的作者(可选)
MODULE_AUTHOR("XXX");
//声明模块的描述(可选)
MODULE_DESCRIPTION("This is a simple example!/n");
//声明模块的别名(可选)
MODULE_ALIAS("A simplest example");

Makefile文件内容为:

obj-m := hello.o
#generate the path
PWD:=$(shell pwd)
#the absolute path
KDIR:=/lib/modules/$(shell uname -r)/build
#complie object
all:make -C $(KDIR) M=$(PWD) modules
#clean
clean:make -C $(KDIR) M=$(PWD) clean

4、执行make命令,如果出现以下报错情况,先去/usr/src/kernels下查看是否有文件

执行:ls /usr/src/kernels 命令查看,可以看到系统没有安装内核开发包

1、执行命令:

UNAME=$(uname -r)

yum install gcc kernel-devel-${UNAME}

或者直接安装最新的包:yum install kernel-devel ;

成功之后;/usr/src/kernels文件夹下如下:

进入cd /lib/modules/目录下,该文件夹下有两个,cd 3.10.0目录下;

查看链接情况:ls -l

可以看到链接错误:

执行:rm -rfv build;删除链接;

重新执行链接:重新创建Build文件夹的软链接,目标地址从3.10.0版本的内核目录改为到3.10.0-1062.18.1.el7.x86_64版本的内核

ln -s /usr/src/kernels/3.10.0-1062.18.1.el7.x86_64  /lib/modules/3.10.0/build

进入:cd /haha重新编译:

执行:make命令之后;

lsmod:

modinfo [options] filename args

编译模块

#make

清除

#make clean

2,Makefile文件中的核心是
$(MAKE) -C $(KDIR) M=$(PWD) modules
1),-C $(KDIR)
表示在$(KERNELDIR)目录下执行make命令。
2),M=$(PWD)
表示包含$(PWD)下的Makefile文件。
3),modules
表示模块编译。
4), 用到了ifneq...else...endif语句
由于开始还没定义KERNELRELEASE,所以只能执行else分支。
而在执行
$(MAKE) -C $(KDIR) M=$(PWD) modules
后,会在内核的Makefile中定义KERNELRELEASE,当进入本Makefile时,
则只会执行ifneq的第一个分支,即
obj-m := hello.o
这一句话是非常重要的。事实上,这个Makefile做的本份工作就是它。
我们也可以用命令行的方式来编译:

在Makefile中的内容写为:
obj-m := hello.o
然后在终端敲入:
#make -C /lib/modules/2.6.10/build M=/home/tmp modules

参考文章:

https://blog.csdn.net/bingqing07/article/details/5888875

https://blog.csdn.net/weixin_38391755/article/details/80380786

https://blog.csdn.net/jiankangshiye/article/details/6665179

https://www.sibida.net/p/2828

Linux内核编程《一》相关推荐

  1. 初探linux内核编程,参数传递以及模块间函数调用

    一.前言 我们一起从3个小例子来体验一下linux内核编程.如下: 1. 内核编程之hello world 2. 模块参数传递 3. 模块间函数调用 二.准备工作 首先,在你的linux系统上面安装l ...

  2. linux内核_Linux驱动编程的本质就是Linux内核编程

    由于Linux驱动编程的本质属于Linux内核编程,因此我们非常有必要熟悉Linux内核以及Linux内核的特点. 这篇文章将会帮助读者打下Linux驱动编程的基础知识. 本篇文章分为如下三个小节进行 ...

  3. 【华为云技术分享】Linux内核编程环境 (1)

    在上一期中,我们介绍了Linux内核的源码结构,这一期我们介绍Linux内核编程环境,首先介绍的是Linux内核的编译方法. 一.Linux内核编译方法 本期中我们以Linux 4.19.94版内核来 ...

  4. Linux内核编程接口函数

    Linux内核编程接口函数 转载请注明出处: http://blog.csdn.net/drivelinux/article/details/8656280 字符设备相关函数 1.alloc_chrd ...

  5. linux内核编程(hello world示例程序)

    linux内核编程(hello world) Linux可加载内核模块是 Linux 内核的最重要创新之一.它们提供了可伸缩的.动态的内核.其它开发者可以不用重新编译整个内核便可以开发内核层的程序,极 ...

  6. Linux 内核编程指南

    Linux 内核编程指南   PeterJay Salzman MichaelBurian OriPomerantz Copyright© 2001 Peter Jay Salzman 2007−05 ...

  7. Linux 内核编程风格

    Linux 内核编程风格 (518 个字於此篇帖子) (已阅读: 1177 次) 这篇短小的文章是对Linux内核编程风格的建议.编程风格非常的个性化,而且,我并不想将我的观点强加给任何人,但是为了变 ...

  8. linux内核编程(一)

    这些天在学习linux内核编程,就在这里小小的show以下. 首先编写如下的linux代码.并命名为hello.c 这里你应该注意亮点: 第一.linux内核编程,不同于普通的用户态下的编程:有一个入 ...

  9. linux进程睡眠编程,linux内核编程-可睡眠锁之SRCU

    linux内核编程-可睡眠锁之SRCU DEFINE_SRCU DEFINE_SRCU_STATIC static修饰的定义只能在该c文件中使用,用于保护命名空间. 如果一个函数里面使用了static ...

  10. linux内核编程_内核线程kthread_run

    linux内核编程_内核线程kthread_run 1. 简述: 2. 使用示例: 3. 详述: 1. 简述: 头文件: include/linux/kthread.h 数据类型: struct ta ...

最新文章

  1. 北京大学信息科学技术学院招收2022级博士生
  2. MysqL数据库密码的管理
  3. oracle PL/SQL
  4. MY_Log,无缝替换原生Log,支持日志输出到文件、FirePHP
  5. 学典教育计算机二级,层次化分类的离线中文签名真伪鉴别方法-计算机工程与应用.PDF...
  6. 数据库日期时间显示在页面上格式错误的解决方案
  7. 修改hostname有几种方式?(转)
  8. 案例:对比使用Java代码与EL表达式获取信息
  9. 【前端】相信你会用到的一篇笔记---HTML篇
  10. MATLAB下载教程
  11. Unity3D工程源码目录
  12. Visual Foxpro 6.0教程
  13. 好记性不如烂笔头,要保持学习
  14. 微信支付中的p12证书提取公钥、私钥、证书、序列号等
  15. 文本上划线_如何在Word中对文本进行上划线
  16. pgsql修改表中字段属性
  17. 国内TeamViewer正版授权的代理商有哪些?如何查询?
  18. mcafee怎么添加信任区_如何免费将McAfee SECURE Seal添加到您的WordPress网站
  19. 华为铁三角:浅聊铁三角模式的角色边界
  20. LILO使用指南(中)

热门文章

  1. 2013CSDN全国高校巡讲之四川托普信息技术职业学院
  2. 图片轮播,鼠标放上去即停止,鼠标移除即播放下一张图片
  3. 仿小米php,我的仿小米商城代码
  4. 斗地主Java课程设计_Java课程设计---web版斗地主
  5. vmware服务器虚拟机重新安装系统教程,在VMware虚拟机装系统教程_vmware装系统_U盘工具_装系统教程_课课家...
  6. pr用什么显卡比较好_用视频剪辑软件pr,电脑要什么配置最好
  7. python百度文库源码_Python源码剖析3
  8. 中级软件测试笔试题100精讲_软件测试工程师笔试题目(含答案)
  9. 斗鱼VS虎牙,谁才是直播之王?一文带你看看两家平台 的竞品报告
  10. KALI应用篇(一)压力测试