Linux内核源代码编译生成内核对象文件(.ko文件)的方法

1.准备

需要准备好Linux内核源码(作者使用的是Linux-5.15.36),对应的交叉编译工具(如果编译工具不匹配,大概率在编译过程中会有报错或提示显示,作者使用的如图是arm-cross-tools),需要编译成.ko文件的内核模块代码(如图在test目录下),rootfs是配置所需的根目录

test目录下的hello.c代码如下:

#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("T_C");
int hiworld(void)
{
    printk(KERN_INFO "Hello, world!\n");
    return 0;
}

void saybye(void)
{
    printk(KERN_INFO "Goodbye, world!\n");
}
module_init(hiworld);
module_exit(saybye);

2.环境变量声明

声明目标机架构

声明交叉编译器前缀,声明成功,则-v有效

3.内核配置,并编译

方法1(有配置文件):

一般配置好的配置文件可以存放在linux-5.15.36/arch/arm/configs目录下,如:

作者的配置文件是zynq_myc_defconfig,-j4是为了加快编译速度

方法2(无配置文件):

没有配置文件,则需要自己进行配置

//进入内核配置界面,进行配置选项

make menuconfig

//配置完成后,进行编译

make -j4

4.创建内核对象文件(.ko)

方法1(直接编译生成):

//直接方法

make -C 内核源代码路径 M=内核模块代码路径 modules 

方法2(制作Makefile):

//打开Makefile

vi Makefile

//写入以下内容

ARCH=arm
KERNELDIR=/home/tc/DeskTop/test/linux-5.15.36

ifneq ($(KERNELRELEASE),)
# call from kernel build system
obj-m    := hello.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD       := $(shell pwd)
modules:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif

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

depend .depend dep:
    $(CC) $(EXTRA_CFLAGS) -M *.c > .depend

ifeq (.depend,$(wildcard .depend))
include .depend
endif

//写完后,保存关闭

:wq!

//make,进行编译

make

如图

5.验证

将hello.ko下载到开发板中,如图,加载模块和卸载模块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值