hello.c内核模块编译 -- linux内核

Linux开发模块,在本机上看调试信息的方法走通了。当前版本号2.6.32-32-generic

uname –r

能够查询

这里取module_param()作为样例。

该宏被定义在include/linux/moduleparam.h文件里,详细定义例如以下:

#define module_param(name, type, perm)

module_param_named(name, name, type, perm)

当中使用了 3个參数:要传递的參数变量名, 变量的数据类型, 以及訪问參数的权限。

hello.c

#include <linux/init.h>
#include <linux/module.h>
#include <linux/moduleparam.h>

MODULE_LICENSE("Dual BSD/GPL");

static char *flag="world";
static int times = 5;
module_param(times,int,S_IRUSR);
module_param(flag,charp,S_IRUSR);

static int hello_init(void)
{
	int i;
	for(i=0;i<=times;i++)
	{
		printk("(%d)hello ,%s\n",i,flag);  //KERN_DEBUG
	}
	return 0;
}

static void hello_exit(void)
{
	printk("Goodbye,%s\n",flag); //KERN_DEBUG
}

module_init(hello_init);
module_exit(hello_exit);

这个文件须要编译成模块,採用

Makefile

obj-m	:= hello.o
KERNELDIR := /lib/modules/$(shell uname -r)/build
PWD       := $(shell pwd)

default:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

clean:
	rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

1),-C $(KERNELDIR)

表示在$(KERNELDIR)文件夹下运行make命令。

2),M=$(PWD)

表示包括$(PWD)下的Makefile文件。

3),modules

表示模块编译

在终端中

make

生成hello.ko模块

Insmod hello.ko flag=”daniu” times=5

[email protected]:/mnt/hgfs/test_curl/core# dmesg -c

[ 9057.070444] Goodbye,\xffffffe2\xffffff80\xffffff9d\xffffff80\xffffff9ddaniu\xffffffe2\xffffff80\xffffff9d\xffffff80\xffffff9d

[ 9059.357777] (0)hello ,daniu

[ 9059.357781] (1)hello ,daniu

[ 9059.357783] (2)hello ,daniu

[ 9059.357784] (3)hello ,daniu

[ 9059.357785] (4)hello ,daniu

[ 9059.357786] (5)hello ,daniu

rmmod hello.ko

时间: 2024-11-06 18:10:43

hello.c内核模块编译 -- linux内核的相关文章

学习重新编译Linux内核

一.实验目的学习重新编译Linux内核,理解.掌握Linux内核和发行版本的区别. 二.实验内容在Linux操作系统环境下重新编译内核.实验主要内容:A. 查找并且下载一份内核源代码,本实验使用最新的Linux内核2.6.36.B. 配置内核.C. 编译内核和模块.D. 配置启动文件.本次实验环境是Linux2.6.35内核的环境下,下载并重新编译内核源代码(2.6.36):然后,配置GNU的启动引导工具grub,成功运行编译成功的内核. 三.主要仪器设备(必填)Linux环境:utuntu10

自定义配置编译linux内核

1 编译linux内核原因一般情况下,我们是不需要重新去编译linux内核的,但如果你发现你需要修改内核的某个部分或者说你需要的某个模块并没有编译进内核,那里你可以通过重新编译内核来满足你的需求,比如当我们需要用bcache时,但默认bcache是没有编译进内核的,我们可以通过修改编译配置文件,将bcache编译进内核,以下的编译操作均是在Centos7.3平台上进行的演示. 2 编译前准备工作2.1 编译用户身份选择官方是强调编译linux内核是强烈不建议以root身份来进行编译的,因为这样有

Vs2012在Linux开发中的应用(8): 编译Linux内核

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在有了UBOOT的编译基础之后,编译Linux内核就简单多了,所不同的只有两个地方,一个是错误信息的转换,另一个是内核需要进行参数配置. 1.1    错误信息转换 UBOOT的错误信息中,文件名是不带路径的,而内核的错误信息中,文件名是带相对路径的,因此我们对转换脚本略做修改: #user code begin classCUBootMake: error=False defBuild(sel

如何解决编译linux内核(解决声卡问题),遭遇fatal error: linux/limits.h: 没有那个文件或目录

最近帮一位上海的朋友搞一块小板,在ubuntu15.04 vivid上已经加载了对应了.ko驱动包 但关键是系统根本就枚举不到该声卡ALC5640,试了OpenSUSE也是一样的结果,看来是内核漏加载了什么模块. 所以准备重新编译Linux内核3.19.3,结果运行: make?menuconfig 得到错误提示: ? ? ? ? local_lim.h:38:26: fatal error: linux/limits.h ? 应该是在linux目录下找不到limits.h文件.有诸多兄弟碰到过

Ubuntu下载编译Linux内核。

1.安装git工具 2.到官网下载linux内核https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git,这个地址不是很好用 在用下面这个 git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git http://vger.kernel.org/vger-lists.html#linux-kernel这个是讨论Linux驱动的邮件组 3.

如何通过编译Linux内核打开IPVS(LVS)的debug模式

前言 为了定位keepalived VIP的问题, 一步一步定位到IPVS, IPVS默认是没有打开Debug模式的, 若需要打开Debug模式需要重新编译IPVS模块加载后才行, 最好的方式当然是仅仅编译IPVS模块就行, 但是实践过程中发现单独编译IPVS模块存在诸多问题, 暂且先放一放, 后续再整理整理单独编译IPVS模块的文章. 编译 查看编译机器Linux内核版本 先查看本地主机内核版本, 这一步主要是为了防止应用切换内核版本后不兼容, 故编译的内核尽量确保跟原本内核版本一致 [[em

实例:编译Linux内核3.18.25概要

前提: 将CentOS 7上3.10.0-229.el7.x86_64重新编译一个3.18.25内核 自编译安装,按照自己的硬件平台架构编译,能最适合硬件主机的性能 且按照需要编译模块,可以选择自己需要的包编译 [[email protected] tmp]# uname  -a 一.编译前准备工作 1.宿主机系统 本次编译宿主机:VMware Workstation Pro12 上的CentOS 7.0操作系统 2.开发环境(开发工具,开发库),头文件 [[email protected] y

编译Linux内核

这篇文章的目的是帮助理解如何编译一版Linux内核.熟悉Kconfig KBuild工具.无论是自己修改自己正在使用linux内核还是做嵌入式的交叉编译,都会有一些帮助. 内核编译体系 如果大家接触过一些Linux下的开源软件,就会知道它们使用 autotools 来进行配置及编译.通过执行./config --> make --> make install 命令来编译源代码.Linux内核的编译也需要先配置再编译.配置使用 Kconfig , 编译使用 KBuild , 这两个工具支撑起了L

CentOs下编译linux内核

● centos 7编译高版本内核: linux-3.13.10 过程相对简单: 1. 安装依赖 yum install ncurses-devel 2. 将linux内核解压缩到/usr.src/ 3. make 4. make modules_install 5. make install 6. 重起