当前位置: 首页 > news >正文

实现第一个内核程序的Hello World

背景

在内核的开发中,总要先入个门。那么就要来编写第一个内核程序

入门

一个 module_init 程序是Linux内核模块的一部分,通过module_init 方法就能将程序载入内核。

module_init 方法需要以下步骤

  1. 编写module_init 的代码,并将其保存为 *.c 文件。
  2. 在代码中包含必要的头文件,如 <linux/module.h> 和 <linux/kernel.h>
  3. 定义 module_init() 函数,该函数将在模块加载时被调用。
  4. 使用 MODULE_LICENSE() 宏指定您的代码的许可证。
  5. 在终端上使用 make 命令来编译代码。如果还没有安装内核头文件,则需要先安装它们。
  6. 将编译后的模块加载到内核中,使用 insmod 命令加载模块。如果需要卸载模块,则可以使用 rmmod 命令。

环境准备

本实验使用的Ubuntu 22.04,不过不关键。

sudo apt-get install build-essential
sudo apt-get install linux-headers-$(uname -r)
sudo apt-get install dkms

编码 

将以下程序写入     hello.c

#include <linux/module.h>
#include <linux/kernel.h>int __init hello_init(void)
{printk(KERN_INFO "Hello world!\n");return 0;
}void __exit hello_exit(void)
{printk(KERN_INFO "Goodbye world!\n");
}MODULE_LICENSE("GPL");module_init(hello_init);
module_exit(hello_exit);

将以下程序写入 Makefile

obj-m := hello.oCONFIG_MODULE_SIG=n
CONFIG_DEBUG_INFO=y
KERNEL_DIR := /lib/modules/$(shell uname -r)/build   #指定内核源码PWD := $(shell pwd)  #指向当前目录all:make -C $(KERNEL_DIR) M=$(PWD) modules 
clean:make -C $(KERNEL_DIR) M=$(PWD) clean

 将以上两个文件放入一个单独的目录

 编译

在文件的目录下进行编译,仅执行命令 

make

运行

insmod hello.ko
lsmod | grep hello
rmmod hello.ko

 其中 insmod 是加载模块、lsmod是查看模块,rmmod是删除模块

 

查看结果

dmesg -T

 

http://www.lryc.cn/news/90703.html

相关文章:

  • python基于协同过滤推荐算法的电影观后感推荐管理系统的设计
  • Vue——状态管理库Pinia
  • Linux:忘记root密码解决办法
  • Dockerfile(4) - RUN 指令详解
  • 一个完整的APP定制开发流程是怎样的?
  • 【数据结构】24王道考研笔记——线性表
  • 【Linux C】基于树莓派/香橙派的蓝牙服务端——支持多蓝牙设备接入
  • 鸿蒙App开发选择Java还是JavaScript?
  • 【Android】CountDownTimer的使用
  • Linux :: 【基础指令篇 :: 文件及目录操作:(1)】:: ls :: 查看指定目录下的内容
  • 【商品详情 +关键词搜索】API 接口系列
  • RabbitMQ学习-发布确认高级
  • 重载和内联函数
  • 从零学算法
  • 《Linux0.11源码解读》理解(四) head之重新设置IDT/GDT
  • <SQL>《SQL命令(含例句)精心整理版(4)》
  • C++死锁
  • [自学记录02|百人计划]纹理压缩
  • C++泛型编程之模板
  • 极氪汽车 APP 系统云原生架构转型实践
  • 一个UDP下载服务器的实现(模拟下载文件)
  • 01.hadoop上课笔记之hadoop介绍
  • 小鹏汽车Q1财报:押注G6、大力降本,明年智驾BOM降半
  • VMware ESXi 8.0U1a 发布 - 领先的裸机 Hypervisor
  • Unity的IPreprocessBuild:深入解析与实用案例
  • htmlCSS-----CSS选择器(下)
  • RDK X3 Module发布,全新软硬件平台加速实现量产级产品落地
  • 【面试实战】Redis缓存设计
  • 如何解决js定时器不准确问题
  • 学习笔记——vue中使用el-dropdown组件报错