linux内核模块,怎么编译?

来源:百度知道 编辑:UC知道 时间:2024/09/24 22:33:24
据说要用makefile,makefile怎么写,不要模板,看不懂。/root/a.c文件。里面static unsigned int user_firewall (unsigned int hooknum ,struct sk_buff **skb , const struc。。。。。。函数,
还有makefile的文件名就是makefile吗?
#ifndef __KERNEL__
#define __KERNEL__ /*按照内核模块编译*/
#endif

#ifndef MODULE
#define MODULE /*按设备驱动程序模块编译*/
#endif

/*最基本的内核模块头文件*/
#include<linux/module.h>
#include<linux/skbuff.h>
#include<linux/netdevice.h>
#include<linux/config.h>
#include<linux/ip.h>
#include<linux/tcp.h>
#include<linux/udp.h>
#include<linux/netfilter_ipv4.h>

static unsigned int user_firewall(unsigned int hooknum ,struct sk_buff **skb , const struct net_device in , const struct net_device out ,int (*okfn)(struct sk_buff *))

{
/*........*/
return NF_ACCEPT;/*NF_DROP*/

}

我来说下吧 本身你这个问题问的有点歧义 不知道你问的是内核编译 还是模块编译 两个不是一个东西 尽管模块加载后 也是内核的一部分 看看其他的回答 以为是单纯的内核的编译了 模块本身在linux下面是可以分为静态和动态加载的 要是采用静态加载的话 就是从新编译内核 和内核的编译基本是一回事 但是多采用动态加载 这个也简单点
从你的下面的模版可以看出 你是想写驱动程序吧 驱动一般作为动态加载的就可以了 写好你的c文件 格式和上面的差不多 然后GCC编译 生成.o文件,不要生成可执行文件 ( 如果是玩Embedded 就下载到目标板了 minicom 的使用) 如果是就在linux机器上 直接执行 insmod lsmod rmmod 这些就好了 这里也是简单的说下了 内核的编译 写驱动程序 本身就是个比较难得事情了 要个很长的时间去学习了 慢慢积累 好运

下载source 进入 执行make muneconfig && make -j2 && make modules && make modules_install
cp arch/i386/boot/bzImage /boot
配置grub

如果makefile不懂,及别谈任何模块了,建议去专门的内核编程论坛

建议先拿本kernel 看下
了解下结构!

内核的编译啊 呵呵 不是什么人都能编译的啊 首先你要知道内核的一些重要的信息啊 呵呵 然后根据自己的需要来 编译啊 如:你想编译内核的运行啊 等啊 呵呵