在Linux环境中配置交叉编译内核模块(目标架构ARM32位)

  1. 安装交叉编译链
    首先检查自己的Linux系统是否已经安装了对应的交叉编译链,有两种方式。
    一种可以采用输入arm然后双击TAB检查输出的方式,如下图所示则已经安装了arm-linux-gnueabihf-交叉编译链。
    在这里插入图片描述

第二种时输入arm-linux-gnueabihf-gcc -v (命令不完全相同,可以输入arm再TAB补齐)
在这里插入图片描述

关于交叉编译链的下载安装过程已经有很多博客了,可以自己去查询相关内容进行安装。

  1. 下载linux内核源代码
    因为我需要交叉编译生成内核模块,所以比起一般的交叉编译还需要配置关于Linux头文件部分,即下载目标机器同版本Linux内核代码。
    下载目标机器对应Linux内核版本的源代码,解压后放到要编译的代码的目录下,下载链接:https://cdn.kernel.org/pub/linux/kernel/ 。
    下载后对源代码进行编译,编译需要使用交叉编译(之间最开始直接make,后面编译自己的代码时会报错比如“include/uapi/linux/types.h:4:23: fatal error: asm/types.h: 没有那个文件或目录”,后面重新交叉编译linux内核代码后就没出现问题了)。
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8

在这里插入图片描述

  1. 编写对应的Makefile文件
    修改所写代码的Makefile文件,我要将文件lkm.c编译成内核模块。文件中需要指明交叉编译链、目标机器架构,以及对应的Linux内核源码位置(也就是KDIR这部分)。
CROSS_COMPILE:= arm-linux-gnueabihf-
ARCH:= arm
CC:= $(CROSS_COMPILE)gcc
LD:= $(CROSS_COMPILE)ld

obj-m:=lkm.o

P_KVER ?= $(shell uname -r)
#KDIR:=/lib/modules/$(shell uname -r)/build
KDIR:=/$(shell pwd)/linux-3.10.108  //目标机器同版本Linux内核路径
PWD:=$(shell pwd)

default:
	$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules ARCH=$(ARCH)

clean:
	$(MAKE) -C $(KDIR) M=$(PWD) clean
	$(RM) Module.markers modules.order
	$(RM) $(PWD)/src/modules/kmod/client/kmod/Module.markers
	$(RM) $(PWD)/src/modules/kmod/client/kmod/modules.order
  1. 编译代码,得到输出
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

在这里插入图片描述

查看生成的.ko文件属性,可以看到生成的是arm架构的目标文件。
在这里插入图片描述

以上就是关于Linux-ARM交叉编译内核模块的相关环境配置内容,整个步骤是我慢慢摸索成功的。如有错误,请多多指正!

参考文章:
https://zhuanlan.zhihu.com/p/94221380
https://blog.csdn.net/Luckiers/article/details/124531266 交叉编译linux内核实例(最详细)总结
https://blog.csdn.net/qq_43557686/article/details/126247648 Linux交叉编译生成驱动模块.ko (这部分有关于Makefile的内容)
https://blog.csdn.net/whatday/article/details/98485036 linux 交叉编译 生成模块 makefile

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值