首页 > 系统相关 >ch2_ab1 Linux内核模块

ch2_ab1 Linux内核模块

时间:2023-08-29 16:56:49浏览次数:62  
标签:simple make modules ab1 ch2 构建 clean 内核模块

准备事项:

虚拟机 系统 文件传输工具
VMware CentOS Winscp
VitualBox Ubuntu Xftp
有222种选择,我是Virtualbox+Ubuntu+Winscp

  • [x]
#include <linux/init.h>
#include <lunux/kernel.h>
#include <linux/module.h>

/*This function is called when the module is leaded*/
int simple_init(void){

    printk(KERN_INFO "Loading Module\n");
    // LOOK careful double "" eat all the following text
    return 0;
}

//this function is called when the module is removed//

void simple_exit(void){

    printk(KER_INFO "Removing Module\n");
}

/*macros for registerin module entry and exit pints.*/

module_init(simple_init);
module_exit(simple_exit);

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Simple Module");
MODULE_AUTHOR("SGG");
obj-m += simple.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

这段代码看起来是一个 Linux 内核模块的构建和编译过程。让我为你解释一下每个部分的作用:

1. `obj-m += simple.o`:
   这一行将一个名为 `simple.o` 的目标文件添加到 `obj-m` 变量中。这指示构建系统在编译时将 `simple.o` 连接到内核模块中。

2. `all:`:
   这是一个目标名称,表示默认的构建目标。也就是说,当你运行 `make` 命令而不指定目标时,它会执行这个目标下的命令。

3. `make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules`:
   这条命令会调用 `make` 命令,进入到内核源码目录下(`/lib/modules/$(shell uname -r)/build`),并使用当前目录下的 Makefile(`M=$(PWD)`)来构建模块(`modules`)。这会编译和链接 `simple.o` 并生成内核模块文件。

4. `clean:`:
   这是一个目标名称,用于清理构建过程产生的临时文件。

5. `make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean`:
   这条命令会在内核源码目录下执行 `make` 命令,使用当前目录下的 Makefile(`M=$(PWD)`),并执行 `clean` 目标。这将清除构建过程中生成的临时文件和输出文件,以便进行干净的构建。

综合起来,这个 Makefile 的作用是编译和构建一个名为 `simple.o` 的内核模块,并提供了 `all` 和 `clean` 两个目标,分别用于构建和清理操作。执行 `make` 命令会默认执行 `all` 目标的命令,编译生成内核模块,而执行 `make clean` 命令会清理构建产生的临时文件和输出文件。

标签:simple,make,modules,ab1,ch2,构建,clean,内核模块
From: https://www.cnblogs.com/zlr585/p/17665304.html

相关文章

  • lab1
    lab1lab使用x86架构。PC'spower-onbootstrapprocedure:PC的开机引导程序。JOS是6.828的kernel名字Introductiongitdiff将显示自上次提交以来对代码的更改。gitdifforigin/lab1将显示相对于为这个实验室提供的初始代码的更改。PCAssemblyLanguageBook中使用的是NA......
  • Linux内核模块的编译和运行 - 如何让模块跑起来?
    SRCPATH:=$(shellpwd)ARCH=armCROSS_COMPILE?=/opt/toolchain/bin/arm-linux-gnueabihf-KDIR?=/home/xxx/linux-3.10/obj-m+=hello_world.oall:@echo"buildmodules..."@$(MAKE)-C$(KDIR)M=$(SRCPATH)CROSS_COMPILE=$(C......
  • 【RL】CH2-Bellman equation
    thediscountedreturn\[\begin{aligned}G_t&=R_{t+1}+\gammaR_{t+2}+\gamma^2R_{t+3}+\ldots\\&=R_{t+1}+\gamma\left(R_{t+2}+\gammaR_{t+3}+\ldots\right)\\&=R_{t+1}+\gammaG_{t+1}\end{aligned}\]state-valuefunction/the......
  • linux进阶:内核模块
    现代内核派系宏内核关键功能(基本功能,不可裁剪、扩展)和服务功能(如文件系统、设备驱动、网络服务等,可裁剪、扩展)均在内核空间提供。运行效率高。扩展性较差。systemcall(系统调用)能够先入内核态来使用内核提供的服务。微内核内核空间只提供关键功能,服务功能在用户空间提供。......
  • 使用 Elasticsearch2.1 实现博客站内搜索
    一直以来,为了优化本博客站内搜索效果和速度,我使用bing的 site:本着不折腾就浑身不自在的原则,我最终还是使用 Elasticsearch 搭建了自己的搜索服务。Elasticsearch是一个基于Lucene构建的开源、分布式、RESTful搜索引擎,很多大公司都在用,程序员的好伙伴Github的搜索也用的......
  • 如何查看加壳的恶意软件 Lab1-2 Lab1-3 恶意代码分析
    Lab1-2分析Lab1.2.exe文件目录Lab1-22.是否有这个文件被加壳或混淆的任何迹象?3.有没有任何导入函数能够暗示出这个程序的功能?4.哪些基于主机或基于网络的迹象可以被用来确定被这个恶意代码所感染的机器? 2.是否有这个文件被加壳或混淆的任何迹象?利用PEID进行查看普通扫描如下:普......
  • Xv6 Lab10: file system
    Largefiles这个作业需要我们将xv6的最大文件大小从12+256Bytes修改为11+256+256*256Bytes。为了达成这个目标,我们需要使用二级索引块,对inode的addrs字段,首先将NDIRECT从$12$修改为$11$,即前$11$个block是directblock,addrs[NDIRECT]对应的块是一......
  • 编写Linux内核模块
    Linux系统为应用程序提供了功能强大且容易扩展的API,但在某些情况下,与硬件交互或进行需要访问系统中特权信息的操作时,就需要一个内核模块。Linux内核模块是一段编译后的二进制代码,直接插入Linux内核中。在Ring0上运行。 1.安装开发环境(Ubuntu为例)sudoapt-getinsta......
  • 【cs50 2022】lab1 && problem set1
    |lab1|#include<cs50.h>#include<stdio.h>intmain(void){//TODO:Promptforstartsizeintstart_size;do{start_size=get_int("Startsize:");}while(start_size<9);//TODO:Promptforend......
  • IS220PAICH2A 336A4940CSP11通用电气模拟输入输出模块
    IS220PAICH2A336A4940CSP11通用电气模拟输入输出模块IS220PAICH2A336A4940CSP11通用电气模拟输入输出模块  但是传统的以太网是一种商用网络,要应用到工业控制中还存在一些问题,主要有以下几个方面。1、存在实时性差,不确定性的问题传统的以太网采用了CSMA/CD的介质......