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

分类: 365bet有没有app 时间: 2025-09-28 06:42:33 作者: admin 阅读: 4846
Linux内核源代码编译生成内核对象文件(.ko文件)的方法

1.准备

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

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

#include

#include

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.环境变量声明

声明目标机架构

export ARCH=arm

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

export PATH=/home/tc/Desktop/test/arm-cross-tools/bin:$PATH

export CROSS_COMPILE=arm-jwoe-linux-gnueabi-

3.内核配置,并编译

方法1(有配置文件):

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

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

方法2(无配置文件):

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

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

make menuconfig

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

make -j4

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

生成内容:make -C 内核源代码路径 M=内核模块代码路径 modules

方法(制作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下载到开发板中,如图,加载模块和卸载模块

相关文章

清远按摩哪里好?清远市最受欢迎的按摩店排行榜
欧路词典|英汉-汉英词典 驱动是什么意思
魔兽世界怀旧服击心者怎么样?击心者属性说明