【无标题】

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

第二种时输入arm-linux-gnueabihf-gcc -v (命令不完全相同,可以输入arm再TAB补齐)

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

下载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

编译代码,得到输出

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

查看生成的.ko文件属性,可以看到生成的是arm架构的目标文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值