又懂内核编译的大虾么?想深入请教几个问题。关于内核编译和内核模块生成的。 30

 我来答
匿名用户
2016-01-22
展开全部
知识点:
1. 编译多个.c源文件的ko(单个文件编写网上有太多的教程,多个c源文件编译是这我这回遇到的)
2. 编写带参数的内核模块(这个顺便也给记下,虽然貌似没有用到)
3. insmod,rmmod,mknod,modprobe,dmesg等命令使用(dmesg比较有用,有些人不知道用这个命令,就说要用串口显示信息,其实dmesg命令更方便,-c选项清空信息)
4. 无法插入内核的原因。(这个也是关键,很多时候操作起来比较简单,比如编译内核源码,但可能会碰到一系列错误,解决一堆错误最能提升一个人的能力)

一、编译多个.c文件的ko模块并插入内核
//test_module.c
#include <linux/init.h>
#include <linux/module.h>

#include "extern_app.h"

static char *who = "linux ss";
static int many = 1;
module_param(many, int, S_IRUGO);
module_param(who, charp, S_IRUGO);

static int __init hello_init(void)
{
test();
static int i = 0;

for(i = 0; i < many; i++)
printk(KERN_ALERT "Hello, %s!\n", who);

return 0;
}

static void __exit hello_exit(void)
{
printk(KERN_ALERT "Goodbye\n");
}

module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");

//extern_app.c
#include <linux/init.h>
#include <linux/module.h>
int test(void)
{
printk("test here.\n");

return 0;
}

//extern_app.h
#ifndef __EXTERN_APP_H
#define __EXTERN_APP_H

extern int test(void);

#endif

//Makefile
#ifneq ($(KERNELRELEASE),)
obj-m := my_module.o
my_module-objs := test_module.o extern_app.o
#else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式