基于x86_64平台交叉编译aarm64平台的驱动模块

1.什么是交叉编译

在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。

2.为什么需要交叉编译

主要原因是:嵌入式系统中的资源太少

具体的解释就是:交叉编译出来的程序,所要运行的目标环境中,各种资源,都相对有限,所以很难进行直接的本地编译

最常见的情况是:在进行嵌入式开发时,目标平台,即嵌入式开发板,比如是最大主频200MHz的ARM的CPU,加上32M的RAM,加上1G的Nand Flash等等。在如此相对比较紧张的硬件资源的前提下,在已经运行了嵌入式Linux的前提下,是没法很方便的直接在嵌入式Linux下,去本地编译,去在ARM的CPU下,编译出来,供ARM的CPU可以运行的程序的。因为编译,开发,都需要相对比较多的CPU,内存,硬盘等资源,而嵌入式开发上的那点资源,只够嵌入式(Linux)系统运行的,没太多剩余的资源,供你本地编译。

3.怎么进行交叉编译

2.1 开始前准备

2.1.1 背景介绍:

本机:Ubuntu20.04 kernel-5.4.0 架构:x86_64
客机: 统信UOS kernel-4.4.131 架构:aarm64
目的:在本机编译phy driver ko文件给客机装载使用

2.1.2 开始前的准备:

1.下载kernel: 网上下载kernel-4.4.131于本机(客机在客户那里)国内镜像kernel加速地址找到对于版的kernel解压
2. 下载安装aarch64-linux-gnu-gcc: 因为客户机器架构是arm64的所以下载这个交叉编译工具下载地址
在这里插入图片描述添加环境变量:vim /etc/profile
最后写export PATH=$PATH:(解压后目录路径:pwd查看)/bin
然后重启生效,将原来的代码注释掉,改成自己的代码

编译kernel

切入解压kernel的目录,打开顶层的Makefile,找到代码段
改成下面的样子。注意是arm64 而不是arm

  ARCH»   »       ?=arm64
  CROSS_COMPILE»  ?=aarch64-linux-gnu-
  
  #ARCH»  »       ?= $(SUBARCH)
  #CROSS_COMPILE» ?= $(CONFIG_CROSS_COMPILE:"%"=%)

然后make menuconfig 将网络支持编译到内核树中去,因为我要编译的驱动是phy driver所以这个开关一定到打开,其他pci驱动就打开pci开关
[*] Networking support
然后
make -j4

编译phy driver生成可加载的ko文件

jlsemi:是phy driver
KERNELDIR: 是刚刚下载的kernel

新建交叉编译的Makefile

CROSS_COMPILE :=aarch64-linux-gnu-
ARCH :=arm64
CC :=$(CROSS_COMPILE)gcc
LD :=$(CROSS_COMPILE)ld
obj-m :=jlsemi.o
KERNELDIR :=/home/jojo/linux-4.4.131
PWD :=$(shell pwd)

modules:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

clean:
	rm -f *.o
	rm -f *.symvers
	rm -f *.order
	rm -f *.ko
	rm -f *.mod.c

编译完成生成ko文件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值