[国嵌攻略][104][Linux内核模块设计]

时间:2022-09-23 14:36:51

内核模块示例

#inlcude <linux/init.h>
#inlcude <linux/module.h> static int hello_init(){
printk(KERN_WARNING”hello_init\n”);
return ;
} static void hello_exit(){
printk(KERN_INFO”hello_exit\n”);
} module_init(hello_init);
module_exit(hello_exit);

特点:

内核模块代码没有main函数,内核模块的入口由module_init()指明。当使用insmod命令加载内核模块时,宏module_init()所指明的函数hello_init会得到调用。当使用rmmod命令卸载内核模块时,宏module_exit()所指明的函数hello_exit会被调用。内核模块包含<linux/init.h>和<linux/module.h>两个头文件。

编译内核模块

obj-m := hello.o

hello-objs = file1.o file2.o file3.o

KDIR := .../linux_kernel

all:

make –C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-

clean:

rm –f *.o *.ko *.order *.symvers

说明:

1.目标文件

obj-m表示要生成的模块名,如果有多个文件生成一个模块,需要加上xxx-objs来指明依赖的文件。

2.内核路径

KDIR用来指明生成生成的内核模块依赖的内核代码。

3.编译规则

–C $(KDIR)表示进入依赖的内核文件,M=$(PWD)表示要编译的内核模块,modules ARCH=arm CROSS_COMPILE=arm-linux-表要编译的内核模块使用的处理器架构和交叉工具链。

hello.c

#include <linux/init.h>
#include <linux/module.h> //加载函数
static int hello_init(){
printk(KERN_WARNING"hello_init\n"); return ;
} //卸载函数
static void hello_exit(){
printk(KERN_WARNING"hello_exit\n");
} module_init(hello_init);
module_exit(hello_exit);

Makefile

obj-m := hello.o

KDIR := /space/work/guoqian/liunxkernel//kernel/linux-mini2440

all :
make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux- clean :
@rm -f *.o *.ko *.mod.* *.order *.symvers

[国嵌攻略][104][Linux内核模块设计]的更多相关文章

  1. &lbrack;国嵌攻略&rsqb;&lbrack;103&rsqb;&lbrack;Linux内核模块基础&rsqb;

    什么是内核模块 Linux内核的整体结构非常庞大,其中包含的组件也非常多,如何使用这些组件.一种方式是把所有的组件都编译进内核文件,即zImage或bzImage,但这样会导致一个问题,占用内存过多. ...

  2. &lbrack;国嵌攻略&rsqb;&lbrack;099&rsqb;&lbrack;Linux内核配置与编译&rsqb;

    为什么要配置内核 基于硬件和软件的需求选出需要的功能,去掉不要的功能. 内核配置的方法 make config:基于文本交互的配置. make menuconfig:基于图形菜单的配置. make m ...

  3. &lbrack;国嵌攻略&rsqb;&lbrack;119&rsqb;&lbrack;Linux中断处理程序设计&rsqb;

    裸机中断: 1.中断统一入口. 2.注册中断处理程序. 3.根据中断源编号,调用中断处理程序. Linux中断 1.在entry-armv.S中的_irq_svc是中断统一入口. 2.获取产生中断源的 ...

  4. &lbrack;国嵌攻略&rsqb;&lbrack;108&rsqb;&lbrack;Linux内核链表&rsqb;

    链表简介 链表是一种常见的数据结构,它通过指针将一系列数据节点连接成一条数据链.相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入 ...

  5. &lbrack;国嵌攻略&rsqb;&lbrack;107&rsqb;&lbrack;Linux进程管理子系统&rsqb;

    进程与程序 1.程序:存放在磁盘上的一系列代码和数据的可执行映像,是一个静止的实体. 2.进程:是一个执行中的程序,它是一个动态的实体. 进程四要素 1.有一段程序供其执行.这段程序不一定是某个进程所 ...

  6. &lbrack;国嵌攻略&rsqb;&lbrack;106&rsqb;&lbrack;Linux内存管理子系统&rsqb;

    内存管理子系统 1.虚拟地址与物理地址的映射 2.物理内存的分配 Linux虚拟地址空间分布 设备最后访问的一定是物理地址,但Linux系统中使用的都是虚拟地址.虚拟地址简单的来说就是程序中使用的地址 ...

  7. &lbrack;国嵌攻略&rsqb;&lbrack;098&rsqb;&lbrack;Linux内核简介&rsqb;

    Linux系统架构 1.用户空间:应用程序.C函数库 2.内核空间:系统调用接口.内核.体系结构相关代码 Linux系统利用处理器不同的工作模式,使用其中的两个级别分别来运行Linux内核与应用程序, ...

  8. &lbrack;国嵌攻略&rsqb;&lbrack;070-095&rsqb;&lbrack;Linux编程函数手册&rsqb;

    第1类 时间编程类 1.1 获取日历时间 1.1.1 函数名 time 1.1.2 函数原形 time_t time(time_t *t) 1.1.3 函数功能 返回日历时间 1.1.4 所属头文件 ...

  9. &lbrack;国嵌攻略&rsqb;&lbrack;072&rsqb;&lbrack;Linux应用程序地址布局&rsqb;

    程序构成 代码段.数据段.BSS段(Block Started by Symbol,又叫:未初始化数据段).堆(heap)和栈(stack).这些部分构成了Linux应用程序的重要组成部分. 内存布局 ...

随机推荐

  1. ubuntu下安装加装DNS

    感觉在ubuntu下网速特别的慢,所以网上找了下解决方案,本地缓存域名解析相关信息. 首先,安装dns服务 命令: sudo apt-get install dnsmasq 编辑dnsmasq的配置文 ...

  2. IMAGE&lowbar;LOAD&lowbar;CONFIG&lowbar;DIRECTORY64 SafeSEH检测 表

    IMAGE_LOAD_CONFIG_DIRECTORY64 typedef struct { DWORD Size; DWORD TimeDateStamp; WORD MajorVersion; W ...

  3. WEB语言转义总结

    后台字符串嵌入前台语言输出   web语言分为后台和前台,如果后台语言嵌入方式将字符串输出到前台语言中,需要按照前台语言的要求进行转义. 因为前台各个语言都有自身的保留字符, 用于规定自身的语法格式, ...

  4. Andrew Ng机器学习公开课笔记&ndash&semi;Independent Components Analysis

    网易公开课,第15课 notes,11 参考, PCA本质是旋转找到新的基(basis),即坐标轴,并且新的基的维数大大降低 ICA也是找到新的基,但是目的是完全不一样的,而且ICA是不会降维的 对于 ...

  5. 对&lt&semi;&lt&semi; ubuntu 12&period;04编译安装linux-3&period;6&period;10内核笔记&gt&semi;&gt&semi;的修正

    前题: 在前几个月的时候,写了一篇笔记,说的是kernel compile的事情,当时经验不足,虽说编译过了,但有些地方写的有错误--因为当时的理解是有错误的.今天一一更正,记录如下: 前文笔记链接: ...

  6. arm get&lowbar;vector&lowbar;swi&lowbar;address

    unsigned long* get_vector_swi_addr() { const void *swi_addr = 0xFFFF0008; unsigned ; unsigned ; unsi ...

  7. JS 不定函数参数argument的用法

    本篇文章只要是对js的隐含参数(arguments,callee,caller)使用方法进行了介绍. arguments arguments 该对象代表正在执行的函数和调用它的函数的参数. [func ...

  8. 线上问题debug过程&lpar;cat&comma;grep&comma;tr&comma;awk&comma;sort&comma;uniq&comma;comm等工具的综合使用&rpar;

    问题:发现线上到货单的数量,小于实际到货的数量. 怀疑一些隐藏的条件,将部分唯一码进行了过滤,导致数量变少. 开展了如下的跟踪流程: 1.找到其中一个明细的唯一码 grep 6180e-4b09f p ...

  9. 用C语言做一个横板过关类型的控制台游戏

    前言:本教程是写给刚学会C语言基本语法不久的新生们. 因为在学习C语言途中,往往只能写控制台代码,而还能没接触到图形,也就基本碰不到游戏开发. 所以本教程希望可以给仍在学习C语言的新生们能提前感受到游 ...

  10. Fibonacci PKU logn 求斐波那契的快速方法!!!

    矩阵的快速幂 #include<cstdio> using namespace std; struct matrix { ][]; }ans,base; matrix multi( mat ...